Co nowego w Perlu czyli Nowoczesny Perl
Zbigniew Łukasiak i Piotr Roszatycki
Perl is Dead
Czyli Perl jest martwy
Ale wciąż rośnie
Zombie
Pogłoski o mojej śmierci były mocno przesadzone - Mark Twain
Jest Perl 5.10
Albo też Perl 5 wersja 10.
- Grudzień 2007
- Trochę nowości
- Ale to tylko dygresja
Re: Why should I use perl 5.10?:
smart match, defined or, switch, say, rekurencyjne wyrażenia regularne i mnóstwo innych
mniejszych zmian - ale tak naprawdę to nic przełomowego. A więc mamy Perl 6 który wprowadzi
mnóstwo zmian - i w zasadzie jest już zupełnie nowym językiem i na razie raczej wolną
ewolucję Perl 5.
Perl 6
- Parrot 1.0 - 17 Marca
- Ale to też tylko dygresja
Parrot Roadmap.
Od paru lat projekt jest bardzo skrupulatnie planowany,
a od dwóch lat ma regularne co miesięczne
releasy.
Być może jest to efekt uboczny
grantów.
Perl 6 się zbliża. I będzie to duża rewolucja.
Ale nie przyszliśmy tutaj namawiać do czekania na Perl 6
Co się więc dzieje w Perlu?
Może tak?
- Prehistoria
- Starożytność (1987 - pierwsze źródła pisane)
- Średniowiecze
- Renesans (1994 Perl 5.0 - objekty
- Barok (1995 - CPAN)
- ...
- Oświecenie
CPAN
- 50 nowych wersji dziennie
- liczba plików podwaja się co rok
CPAN infrastruktura
- Cpan Testers
- automatyczne testy
- 1000 000 raportów od sierpnia
Ja po załadowaniu na CPAN moich bibliotek dostaję tego samego dnia po parę raportów.
CPAN
- to infrastruktura
- to ekologia
- to nisza ewolucyjna
Ewolucja
Linux is evolution, not intelligent design - Linus Torvalds
Perl
TIMTOWTDI
(Tim Toady)
CPAN
- Otwarte pole do eksperymentowania
- Mutacje i krzyżówki
- Długi ogon
Brak jest nastawienia na hity.
Problemy z ewolucją
- Za duży wybór
- Dużo powtórzeń
- Potrzebna mocniejsza selekcja
Być może są tu psychologiczne przyczyny - każdy chce mieć własną bibliotekę.
Chyba tak samo jak wszędzie w Open Source.
Nowoczesny Perl
- Wspomagana ewolucja
- Mocniejsza selekcja - recenzje
- Walka z piekłem zależności
Opinie.
Zależności
Zależności
To również pokazuje potęgę Perlowej infrastruktury.
Społeczność
Trudno się samemu zorientować, trzeba polegać na opinii innych.
Zarówno Perl Monks jak i Use Perl to spore sajty - ale zupełnie
niewidoczne spoza Perlowego środowiska. Może design ma coś na rzeczy?
Perl Mongers
- Warszawa.pm to my
- Poza tym w Polsce krakow.pm, piotrkow.pm, poznan.pm i szczecin.pm
- Ponad 700 na całym świecie
CPAN
- Ma problemy związane ze swoją skalą
- Ale to tylko upewnia mnie, że jesteśmy wciąż w awangardzie
- Ale my już zaczęliśmy je rozwiązywać
Obiektowość
- Bardzo podstawowa wręcz prymitywna
Obiektowość
- TIMTOWTDI
- CPAN
- Class::Classless
- Class::Prototyped
- Class::Accessor
Obiektowość
- Moose
- Opinia większości
- Selekcja
Perl jak Lisp? - TIMTOWTDI
- Higher Order Perl
- funkcje (first-class)
- dostęp do tablicy symboli
- zarządzanie pamięcią
- domknięcia (closures)
Wybrane biblioteki
- Moose
- Catalyst
- Jifty
- Rose
- DBIx::Class (aka DBIC)
- Catalyst::Example::InstantCRUD
Catalyst
- MVC
- Ale bez narzucania wyboru
- Dowolny Model, dowolne View
Catalyst - Modele
- DBIx::Class
- Class::DBI
- Rose::DB::Object
- File
- LDAP
- Zreszta: pełna lista
Catalyst
- Tak naprawdę to tylko dispaczer
- Otwarty system
- Znowu długi ogon
- Znowu ewolucyjna architektura
Catalyst to platforma integracyjna
Modele do wszystkiego.
Jifty
- Zintegrowany system
- Kontynuacje
- Formularze
Eksperyment stawiający na inteligentne zaprojektowanie zamiast na ewolucję.
Paradoksalnie to również mieści się w ewolucyjnym paradygmacie.
Rose
- Następny zintegrowany system
- Ale ma też użyteczne części
- Rose::DB::Object - ORM
- Rose::HTML::Form - obsługa formularzy
W moim InstantCRUD używam teraz Rose::HTML::Form - ale chyba jednak zmienię to na HTML::FormHandler,
żeby nie używać dodatkowej infrastruktury objektowej.
DBIx::Class
- praktycznie każda baza danych
- LEFT JOIN
- GROUP BY
- COUNT
- HAVING
DBIx::Class - co to daje
- Uniwersalny kod dla formularzy CRUD
- Uniwersalny kod dla przeglądarek rekordów
- Skalowalność - bo nie narzuca jakiegoś jednego sposobu używania bazy danych
- InstantCRUD
Catalyst::Example::InstantCRUD
- Minimalna konfiguracja - tylko nazwa i połączenie z bazą
- Generuje 'rusztowanie'
- CRUD - ale pozwalna na edycję paru powiązanych razem rekordów
- Właśnie pracuję nad wersją używającą UTF-8
Jak 'scaffolding' w Railsach - ale działa z większością baz danych. Jak używałem wcześniejszych wersji
to zauważyłem, że ciągle muszę rezygnować z tej wygodnej CRUDowej abstrakcji - bo prawie nigdy
formularz nie był powiązany z dokładnie jednym rekordem.
Catalyst::Example::InstantCRUD społeczność