ugrás a tartalomhoz

Perl 6 alapjai I.

Bártházi András · 2005. Jún. 12. (V), 21.00
Perl 6 alapjai I.
A Perl 6 nyelv – bár sem tervezése, sem implementálása nem fejeződött be még teljesen – egy akár már éles környezetben is használható, új és friss programozási nyelv. Letisztult, átgondolt lehetőségekkel rendelkezik, s bár a teljes megújítása a Perl nyelvnek, a hangulata nem változott. A script nyelvek közül minden bizonnyal az egyik legmodernebb, számos olyan nyelvi szerkezettel, megoldással bír, mely vagy még egy nyelvnek sem, vagy csak néhánynak sajátja (s ezek sem az ismert nyelvek között szerepelnek). A most induló sorozat a Perl 6-ot és a kapcsolódó technológiákat, így a Parrotot, Pugs-ot fogja bemutatni, illetve reményeim szerint kitér majd egyes már meglévő moduljainak a bemutatására is.

A Perl 6-nak már a története sem hasonlít a többi nyelvére, elég sajátos módon indult el a fejlesztése. A történet szerint a 2000. július 18-n tartott negyedik Perl Konferencián kezdődött minden, amikor páran összegyűltek, hogy előkészítsék a nap folyamán később tartandó Perl 5 fejlesztői találkozót. A Perl 5 fejlesztése igazából stagnált, egy komplex, tovább már nem igazán fejleszthető nyelvvé vált, az utóbbi verziókban igazi nagy újdonságok már nem jelentek meg benne. A Perl 5 fejlesztők egy része emiatt elhagyni tervezte a csapatot, valamit tenni kellett volna, de senki sem tudta, hogy mit.

A beszélgetés közben jelent meg a szobában Jon Orwant (a Perl Journal magazin egykori vezetője), aki szokatlan módon pár kávéscsésze falhoz vágásával üdvözölte a társaságot, s közben szemükre vetette a helyzet kilátástalanságát, s hogy itt lenne az ideje tenni valamit. Ezzel sikerült annyira felrázni a résztvevőket (illetve a “show” hatására a csatlakozókat), hogy egy új folyamat indult el. Mindenki egyetértésével nem csak új nyelvi elemek hozzáadása, vagy pár helyen történő ráncfelvarrás, hanem teljes koncepcióváltás s a nyelv alapoktól történő megújítása mellett tették le a végén a voksot. A koncepcióváltás jegyében ezúttal a Perl 6 nyelvet immáron nem Larry Wall, hanem a közösség tervezte (bár a bólintások – melyek igen jó bólintások – továbbra is tőle származnak). A Perl 6 a Perl nyelv közösségi megújítása, s egyúttal a tervek szerint magának a közösségnek is a megújulása.

Bár korábban is voltak tervek a nyelv megújítására, illetve a futtató újraírására, ezek végül nem bizonyultak életképesnek, illetve minden bizonnyal a megújulás elindult volna a csészék repte nélkül is, de az események katalizátora végülis az ezen a napon történtek lett.A nyelv megújítása egy több lépcsőből álló folyamat, mely még ma is tart. Elsőként az úgynevezett RFC-k álltak össze: bárki javaslatot tehetett új nyelvi elemekre, megoldásokra, változtatásokra. Ezekből lettek aztán az egyes RFC dokumentumok. Ezeket utána Larry olvasta át, s foglalta össze Apokalipszisek formájában. Egy-egy apokalipszis a Programming Perl könyv egy-egy fejezetének témája alapján, igen részletesen fogja össze az RFC-ket, s tart meg, utasít el, vagy olvaszt egybe – indoklással - dokumentumokat. Nehéz és hosszú olvasmányok, melyek alaposan átgondolva teszik a nagyközönség számára is láthatóvá a tervezési folyamatot. Az Apokalipszisek kivonataként készültek el aztán a Szinopszisok, melyek kivonatos, vázlatos formában, s könnyen áttekinthetően foglalják össze a lényeget. Végül az Exegézisek megintcsak az Apokalipsziseket foglalják össze, azonban már példák segítségével mutatják be és teszik még jobban érthetővé a lehetőségeket.

A következő mérföldkő (az egyes dokumentumok megjelenése mellett) 2001. április elsején, egy áprilisi tréfa keretében megjelent Perl.com-os cikk volt. A cikk azt írta le, hogy a Perl és a Python atyjai összeborultak, s egy közös projektet indítottak a két nyelv összeolvasztására, a Parrotot. A tréfa olyan jól sikerült, hogy végül – ha nem is ebben a formában, - igazzá vált: a Perl 6 terve úgy módosult, hogy a nyelvi értelmező illetve fordító és a futtató motor végül külön vált, s ez utóbbi projekt Parrot néven indult el. A Parrot immár nem csak egy nyelvet, a Perl 6-ot futtató motor, hanem egy a scriptnyelvek egy jövőbeni potenciális közös futtatókörnyezeteként használható virtuális gép lett, melyeknek csak egyike a Perl 6. A lényeg itt az, hogy mikor ez megvalósul, egymás már meglévő kódkönyvtárait képesek lesznek használni ezek a nyelvek, hatalmas tudást felhalmozva. A Parrot céljai hatalmasak, hiszen minden scriptnyelvnek megfelelni nagyon nehéz – például máshogy működnek a tömbök Perlben, mint PHP-ben, vagy a Ruby-ben úgy is ki lehet lépni egy függvényből, hogy utána mégegyszer meghívva a kilépési ponttól folytatódhasson a futása. Virtuális gépként működik, mint a Java virtuális gép, vagy a Common Language Runtime, mely a .Net-es programokat futtatja, azonban velük szemben nem szigorúan tipizált nyelvek futtatására lett tervezve, hanem scriptnyelvekére, ezért ezeknél a nyelveknél minden bizonnyal jelentős előnnyel tud majd szerepelni. Az új virtuális gépnek valójában ez az indoka, az eddigi két virtuális gép ugyanis csak jelentős teljesítménycsökkenés, s jelentős hackek segítségével lenne képes futtatni a scriptnyelvek legtöbbjét (ennek ellenére már létezik Perl, Python és más script futtató .Net alá). Virtuális gépről lévén szó, ún. Parrot Assembly-ben programozható, illetve létezik egy kicsit magasabb szintű nyelv is rá. A Parrot már most sikereket ért el az oktatásban: Franciaország egyik egyetemén a hallgatóknak tanítják, mint gépi kódot.

A Perl 6 a nagy célok miatt mind a mai napig nincs kész. A nyelv alapjai, s az irányvonalak gyorsan le lettek ugyan fektetve, de ezután a lendület alábbhagyott, s lassabb ütemet vett fel a fejlesztés. Immár öt éve találták ki a megújítást, s a publikusan használható verziók megjelenése mindig későbbre kerül. Ez azonban nem jelenti azt, hogy ne folyna munka a háttérben, csak a kevés fejlesztő miatt ez lassan, s néha vakvágányon is halad.

Az év elején egy jelentős esemény történt. Autrijus Tang, a Haskell nyelvvel történő ismerkedése során az egyik feladat kapcsán egy kis nyelvi futtató megvalósítását kapta. A Perl 6-ot választotta erre a célra, s a Haskell lehetőségeinek, s az általa megvalósítható funkcióinak a Perl 6-tal történő összecsengése miatt napok alatt képes volt alapszintű Perl 6 programok futtatására projekje. Február elsején jelent meg az első publikus verzió belőle Pugs néven, s azóta töretlenül fejlődik, egyre több és több valósul meg a már specifikált Perl 6 nyelvi elemekből, sőt, az is előfordul, hogy a Pugsban megvalósított nyelvi elemet Larry elfogadja, s a nyelv részévé teszi. Az ilyen projektek esetén az a tapasztalatom, hogy a tervezetlenség, s a rengeteg funkció megvalósítása miatt vagy gyorsan el szoktak bukni, vagy jelentős átírást igényelnek, azonban Autrijus esetén – személyesen is tapasztalhattam – hatalmas tárgyi tudás is rendelkezésre áll a fordítók és kapcsolódó elmélet terén, így a projekt előtt minden bizonnyal nagy jövő áll.

A Pugs projekt egy interpreteres Perl 6 megvalósítás, s – a tervek szerint – sohasem fogja kiváltani a Parrotot, illetve egy Perl 6-ról Parrotra fordító programot (bár a jelenlegi tervek szerint ilyen nem is lesz, a Parrot, illetve a Parrot Grammar Engine fogja tudni fordítani a nyelvek egy részét). Az interpreteres megoldás miatt elég lassú megoldást kínál, így sebességigényes környezetben nem használható. Használható viszont a nyelvvel való ismerkedésre, vagy olyan környezetekben, ahol nem gond, ha az alkalmazás egy nagyságrenddel lassabban fut, mint a többi scriptnyelv. A Pugs segítségével az elmúlt időszak alatt már több Perl 6 modul is született, s a folyamatosan megjelenő nyelvi elemek kapcsán egyre több születik.

Pugs fejlesztése érdekes “wikipédia” szerű stílusban zajlik (legalábbis az anarhisztikus helyett ezt szokta mondani Autrijus). Aki bármit hozzá szeretne tenni a Pugshoz, gyakorlatilag minden előzetes ellenőrzés nélkül kaphat hozzáférési jogot, s egyből részévé vállhat a fejlesztői közösségnek. A fejlesztésbe bekapcsolódók száma nap-mint-nap nő, átlag napi egy segítővel. Segíteni nem csak a Pugs fejlesztésével lehet (persze azzal is), sőt. Lehet készíteni Perl 6 modulokat, dokumentációt, példákat, s bármit, ami kapcsolódik. A legérdekesebb dolog talán a tesztek készítése, hiszen a fejlesztés jelentősen épít ezekre. A dolog lényege, hogy már akkor is lehet teszteket írni, mikor azok még elbuknak: a specifikáció alapján elkészítve azok a jövőbeni fejlesztést tudják segíteni. A meglévő tesztek minden változtatáskor lefuttathatóak, így ha valami elromlott, egyből kiderül. A Pugs fejlesztése így – nagyon-nagyon erős túlzással – a kódoló majmok munkájához hasonlatos: még véletlenül is kijavítódhatnak hibák, hiányosságok, s még ha ez nyilván nem is igaz, de egy nagyon erős bázist tud biztosítani. Érdekesség, hogy Autrijus még egy tesztet sem írt, a több ezer tesztet mások készítették el.

Chip, Leo és Autrijus

A napokban a Perl 6-Parrot vonalon egy további jelentős lépésnek lehetünk tanúi. Leo Tötsch, a Parrot jelenleg kiadásokért felelős fejlesztője, Chip Salzenberg, a “címnélküli” Parrot projekt vezető, s Autrjius az osztrák Perl workshop keretében a földgolyó egyazon pontján találták magukat, s most 10 napig együtt is maradnak Leo Bécshez közeli vidéki házában (internet azért van). A workshop kapcsán, s utána még egy további egy napra csatlakozhattam hozzájuk, s amit láttam, annak kapcsán elmondhatom, hogy várhatóan nagyon sokat fog lendíteni a Parrot fejlesztésén a találkozó, melynek céljaként a Parrot felkészítését a Perl 6 és a többi nyelv elemeire tűzték ki. Ennek kapcsán átbeszélik, hogy az egyes elemeket hogyan lehetne a leghatékonyabban megvalósítani, milyen tapasztalatai voltak Autrijusnak a Pugs megvalósítása kapcsán, hogyan oldotta meg azokat. Chip – a szintén elég mély szakmai tudásának hozzáadása mellett – a moderátor és kicsit a manager feladatot is betölti a pár napos együttlétük alatt.

A jövőre is számos tervük van. A Pugsba nemrégiben került beágyazásra a Parrot futtató, illetve maga a Perl 5 interpreter, az előbbi segítségével képessé vált a Parrot Grammar Engine keretében már megvalósított Perl 6 szabályok (a reguláris kifejezések utódja) futtatására, továbbá a Perl 5 kódok, illetve meglévő hatalmas CPAN modulmennyiség meghívására, használatára. Ezzel nem csak egy jelentős előnyhöz jutott a használhatóság terén, de sebességet is nyert: a számításigényes részek futtathatóak Perl 5 segítségével, míg a Perl 6 sokkal szebb és többet tudó szintaktikájával hatékonyan fejleszthető központi magot tud kínálni. Autrijus tervezi azt is, hogy a Pugsból ez a lehetőség átkerül a Parrotba, így maga a Parrot fog tudni használni Perl 5 modulokat, kódot. Ez a Parrot felhasználhatóságán tud majd javítani, s valószínűleg Parrot programozókat fog tudni csábítani a fejlesztéshez.

További Pugs cél, melynek a megvalósítására igen jó esély van, hogy a Pugs által most készülő Haskell kódot egy már meglevő fordító segítségével C-re lehetne fordítani, majd az így keletkező C kódot Parrotra, a tervek szerint ez egy a több fordítás hatásának ellenére is megfelelő töménységű Parrot bytekódot tudna készíteni. Ezzel a lépéssel a Pugsból – ha nem is a leghatékonyabb – Perl 6 fordító válhatna. Ehhez az alapok lefektetése most folyik.

Ami a Perl 6 kapcsán még a képbe jön, az a Ponie projekt, mely a Perl 5-ös meglévő modulok Parrotra történő fordításáért felelős. A projekt abból a szempontból jól áll, hogy ez már megtörténik, de a projektet kevesen tudják lefordítani a gépükön, illetve a jelenlegi megoldás csak nagyon lassú futtatást tesz lehetővé. A Ponie-nak nem csak a Perl 5-ben írt modulok, hanem a bináris részeket tartalmazók elérhetővé tétele is a feladata. A Ponie fejlesztése jelenleg a többitől külön zajlik.

Ha visszatekintünk a Perl 4-ről a Perl 5-re történő átállásra, az is hasonló hosszan évekig tartott, ráadásul egy teljes nyelvi megújításról van szó, melyet nem lehet napról-napról megtenni. Ennek ellenére a Perl 6 fejlesztése nem mondható gyorsnak, sajnos a rossz dokumentáltság és egyéb okok miatt több fejlesztő is lemorzsolódott (ezen is változtatni szeretne Chip Salzenberg). Hogy mikor lesz a Parrotból stabilan, hatékonyan használható virtuális gép, Perl 6 és más fordítókkal, nem merem még megsaccolni sem, elég nehezen lenne megjósolható. Ami biztos, hogy a Perl 6 a Pugs kapcsán gyakorlatilag már most nagyon jól használható (akár webes, akár más környezetben), s egyre jobban fejlődik. A Parrot, ha megszűnik a sok vakvágánynak bizonyult fejlesztési irány (erre a napokban jó esély van), akkor szintén előbb-utóbb egy jól használható, nagy tudású virtuális géppé nőheti ki magát. A Parrotra már most is léteznek különböző (kisebb) nyelvi fordítók, melyek közül legjobban talán a Python emelkedik ki, de várhatóan más nyelvek megvalósítása sem lesz több éves projekt feladat. Apache webszerverhez már most létezik, mod_pugs és mod_parrot modul, melyek szintén ígéretes projekteknek tűnnek.

Ami biztos, s bízom benne, hogy a cikksorozatunk kapcsán az olvasóink is hasonlóan fognak vélekedni róla, a Perl 6 nyelv egy nagyon szép megoldásokat kínáló, elődjéhez hasonlóan tömör, sokat tudó, s egységes programozási nyelv. A mostani bevezető után legközelebb a tervezése során használt irányelvekkel, illetve alapvető szintaktikájával fogunk megismerkedni.
 
Bártházi András arcképe
Bártházi András
Az Emarsys-nál dolgozik vezető fejlesztőként, és az API-ért, integrációkért felelős termékmenedzserként. Szeret profi csapatban profit alkotni.
1

Kutya, papagaj, lany

Anonymous · 2005. Jún. 13. (H), 13.09
Ha a kutya a Pugs, a papagaj a Parrot, akkor a szep leany minek felel meg? :)

Udv,
Gyula
2

Perl 6

Bártházi András · 2005. Jún. 13. (H), 20.42
Alapvetően a teve már nem fért ki a képre. ;) Így a hölgy a Perl 6-ot szimbolizálja.

-boogie-
3

Szóval a lényeg az, hogy

Anonymous · 2005. Júl. 14. (Cs), 11.37
Szóval a lényeg az, hogy kétpúpú legyen?:)