( andrewjsi | 2021. 12. 27., h – 02:06 )

(x) Használom, sőt, imádom :)

Egy egészségügyi intézmény részére üzemeltetünk ügyviteli rendszert, mely Perl-ben van írva. Elég sok területet lefed, az értékesítés, szerződéskötés, biológiai minták, pénzügyi konstrukció beállítása és az ehhez kapcsolódó rengeteg apró ügyfél és szolgáltató oldali cécót. Lassan 7 éve fut, azóta eddig összesen 1 óra 9 percnyi előre meghirdetett üzemszünetünk volt. Hetente átlagosan 2-3 alkalommal tolunk ki frissítést az éles rendszerre, miközben több GIT ágban zajlanak különböző fejlesztések, amiket az intézmény munkatársai demo szervereken tesztelnek... blabla... folytathatnám még, de ez a topic most a Perl-ről szól, és az eddigiekkel csak azt akartam érzékeltetni, hogy a Perl nem csak akkor állja meg a helyét, ha logokat kell elemezni, egysorosokat, spam szűrőt vagy deb csomag mahinálót kell írni.

Miért Perl? - kérdezik sokszor. Miért szopatjuk magunkat egy 34 éves ősrégi elavult kövülettel, amikor halomra válogathatunk a legújabb technológiák közül? Hát igen... Valahol megértem a kérdezőt, hisz fogalma sincs, hogy mi a Perl, és manapság olyan világot élünk, hogy minden, ami 34 éves, az ódivatú, ócska és szar. És akkor rengeteg instrukciót kapok, hogy manapság miben kéne rendszert írni, mi a divatos és mit kéne követnem, stb, stb... de valahogy olyan jól érezzük magunkat, hogy egy megtanult, megszokott módon, nap mint nap Perl-ben kell megfogalmaznunk a gép számára, hogy az ügyfél milyen újdonságokat szeretne. Bőven okoz meglepetést az ügyfél, nem kellenek meglepetések a géptől :) Viszont a hosszútávú berendezkedés nagyon is kell a mi munkánkhoz. Ezt pedig maximálisan megkapjuk a Perl-től!

A Perl nem csak egy nyelv, hanem egy szemlélet, egy gondolkodásmód. Ezt ugye Larry bácsi találta ki 34 évvel ezelőtt, aki programozóként az akkori informatikai problémáját nyelvész szemlélettel oldotta meg. A konferencián úgy fogalmazott, hogy túl sok volt neki a C, kevés volt a BASH és ennek halmazába akart kerülni, ezt próbálta áthidalni új nyelvi elemek megalkotásával, amihez készített egy interpretert. Maga a nyelv anno olyan mély nyelvi gyökereket kapott, amik ma is meghatározóak, stabilak és tele vannak lehetőséggel. Pont ezt hánytorgatják fel leginkább, hogy undorító kódot lehet benne írni. Sajnos, nem sajnos, így igaz, Perl-ben szinte bármilyen fogalmazási, ábrázolási módszerrel megoldható egy adott informatikai probléma. Nincs kapaszkodó, nincsenek korlátok, szabályok, nincs kikövezett ösvény, aminek mentén haladhat, illetve haladnia kellene a fejlesztőnek. Teljes szabadság van, ha úgy tetszik liberalizmus vagy akárminek is nevezhetjük. Egy zeneszerző egy üres kottával. Na igen. Egy oldalcsípővel is lehet kalapálni... De ez a szabadelvű tulajdonság, gondolkodás nem csak az ocsmány kódoknak ad táptalajt, hanem az alkotó elmének ad hihetetlen eszközkészletet. Ha részleteibe menően konkrét elképzeléseid vannak, hogy ma, holnap, holnapután mit és hogyan akarsz csinálni, netán ezek az elképzelések szembe mennek a manapság elfogadott dolgokkal, akkor a Perl a barátod és a szerszámos táskád :) 

Sok évvel ezelőtt többször üvöltöztem a kocsmában, hogy a Perl-t méltatlanul elhanyagolják, nem beszélnek róla, nem reklámozzák és a fiatalok nem tudnak róla, bezzeg ez meg ez az új programozási nyelv, az meg az az új keretrendszer mekkora szar és a csapból is ez folyik... pfúúú teljesen ki voltam akadva, szívügyemnek kezeltem és tehetetlenül kántáltam a faszságomat... És most ennyi év után pont annak örülök, hogy nem a Perl lett a kedvenc nyelv. Nem lett népszerű, nem lett hype, nem Perl-ben akarták megírni a világ legújabb keretrendszereit, nem Perl kódokkal lett teleokádva a Stackoverflow és nem lett teleszemetelve a Perl platform, CPAN, Perlmonks, stb... Ez a manapság tapasztalható hisztéria teljesen elkerülte a Perl közösséget és a közösség megmaradhatott a maga nyugalmában, a megszokott lassú, de fokozatos fejlődésében. A mai napig bármikor belépek IRC-re, informatikai szakemberekkel találom szembe magam. Ha visszanézek több napnyi IRC logot, releváns szakmai tartalmat olvasok el rövid tömör formában némi iróniával és poénnal megfűszerezve. Ez a Perl közösség, amit anno Larry összehozott és a mai napig is működik, kicsit távol a világ zajától.

A Perl Interpreter. A fordított nyelvek esetén sokszor szó esik arról, hogy a fordító milyen kódot készít, az hogy fog futni, mi van benne, mit és hogyan használ ki, milyen hatékony, stb. Az interpretált nyelvek esetén erről nem sokat hallok. Lehet, hogy én vagyok tájékozatlan és kérlek javítsatok ki, de feltűnt, hogy az interpretált nyelvek esetén semmi információt nem kapunk arról, hogy az adott nyelvben megfogalmazott utasításokat az interpreter hogyan és miként fogja futtatni. Mit optimalizál? Van -e copy-on-write? Tömbök iterálásánál, hash-ek keresésénél, sorba rendezésnél milyen algoritmust használ? Többszálú? Stb!? És akkor miért van az, hogy egy 10K elemű tömbön végzett művelet egy mai divatos platformon közel másfél giga ramot elvisz, amit a kis csumpi Perl-es scriptecskénk megold pár megabájtból? A fent említett biológiai ügyviteli rendszerünk 70 mega RAM-ot eszik meg (buffer+cache nélkül) ezt megszorozzuk 8 szállal és még így is fél giga per vas. Középiskolai informatikai tanártól kaptuk meg azt, hogy ez lehetetlen... pedig de!

A Perl 34 éves és naprakész! Kis történelem... Az 5.8-nál (kb. 2002-ben) volt egy stagnálás. Ekkor merült föl az első Perl6-os ötlet egy minden nyelvet átfogó interpreter (Parrot) és fordító (Pugs) gépről. El is indult a fejlesztése, még konkrét (nyomtatott, bekötött) könyvek is születtek, de érdemben semmi nem történt. Sok akkori fiatal fejlesztő azzal a kérdéssel hátrált meg, hogy "tanuljam a perl5-öt vagy várjak a perl6-ra?" - nem tudtunk jól válaszolni nekik.  Elvesztettük őket. Évek teltek el így és nem történt semmi, pedig Larry Wall sok jó dolgot megfogalmazott a leendő Perl6 számára. Eközben a kétezres évek közepén elég sok fontos dolog történt, mint pl. az Unicode térhódítása. Maga a Perl nem fejlődött, legalábbis nem tudtunk róla, de Larry közössége, a CPAN fejlesztők szorgalmasan dolgoztak és követték az Unicode szabványt meg mindent, ami akkoriban történt. Ezeket feltöltötték a CPAN-ra, hogy egymást közt tudják használni az aktuális munkáikhoz. 2007-ben pedig úgy döntöttek, hogy kiadnak egy új 5-ös Perl verziót, függetlenül attól, hogy a Perl6 már tervben van, készül, de senki nem tudja, hogy mikor lesz belőle valami. Ekkor jött 2004-ben az 5.8-as után 5 évre rá a Perl 5.10. Ez egy mérföldkő a modern Perl életében, na nem szoftverileg, hanem azért, mert itt indult be az a Perl fejlődési hullám, amit a mai napig tapasztalunk. A szoftveres mérföldkövek csak évekkel később jöttek. Maga a nyelv nem változott. Az idők folyamán soha semmi fő nyelvi elemet nem szedtek ki a nyelvből. Ha kisebb kompatibilitást sértő változtatást eszközöltek a nyelvben, akkor azokat jóval előre, több évre közölték. Sőt, a Perl nyelvi kompatibilitási képessége a legerősebb a világon (még a C-nél is jobb) ugyanis egy 1998-ban megírt perl script a mai legújabb Debian-on ugyanúgy lefut, mint anno akkor. 

Ebből az elmaradt Pugs/Parrot fejlesztésből, azaz a Perl6-ból lett a Raku, és az 5-ösből ezt a 6-ost átlépő verzió lenne a Perl 7, ami semmiben nem tér el a Perl 5.34-től, csak a default beállításokban változtat. Ez a Perl történelem eddigi legkeményebb kompatibilitást boncoló ugrása. Érdemes tanulmányozni! A Raku és a Perl két külön irány, ne keverjük össze. A Raku jövője nagyon kecsegtető, de még nem tudjuk mi lesz belőle. A Perl jövője (5.32, 5.34, v7) egy (ahogyan eddig is) stabilan hosszú távon kiszámítható rendszer, amire lehet alapozni.