Újabban fejlesztek Python-ban. Egyrészt azért, mert a Csodaprojekt
csodaguruja a Python-t szereti, másrészt azért, mert az tök jó.
Alább leírom, hogy mik az első tapasztalataim a nyelvvel.
Először is a pozitívumok: nagyon dinamikus nyelv, könnyen
alakítható – nem kell szenvedni hülye interfészdeklarációkkal és
típusokkal, nem kell hülye módokon megkerülni azt, hogy csak
egyszeres öröklődés van, és a legtöbb szoftver nyílt forráskódú,
ezért ha valami gond van, nincs dokumentáció, bugra gyanakszom, egy
perc alatt mélyre lehet ásni a forráskódban, és ki lehet deríteni,
hogy tényleg bug van-e.
A könnű alakíthatóság miatt nem kell leírni ugyanazt ezerszer, nem
kell "boilerplate" kódot írni. Ugyan nem fejlesztettem sokat idáig,
de még nem fordult elő, hogy copy-pastelni kellett volna. A legtőbb
érdekes ponton módosítani lehet az interpreter viselkedését: lehet
definiálni, hogy mi történjen objektumok attribútumának lekéréskor,
példányok létrehozásakor, lehet kódot kiértékelni sztringből, és
általában mindent, ami "izgalmas", és ami egy elborult hekkernek az
eszébe juthat.
Előny továbbá, hogy a gondolkodási idő/gépelési idő hányados nagyon
magas: a tegnapi túra közben néha elkalandoztak a gondolataim, és
amit egy nap alatt a néhány perces holtidőkben sikerült
végiggondolni, azt lekódoltam nagyjából negyedóra alatt. Illetve...
az a baj, hogy ilyenkor nem lehet az automatikus gépelés mögé
húzodni, hanem szembe kell nézzek a saját hülyeségemmel :)
És akkor most a hátrányokról. A legelső, ami eszembe jut, az az,
hogy nem értem, hogy Guido bácsi miért írta meg a Python-t, mikor
van már, ami közelebb van az Igazsághoz (és Lispnek hívják). Úgy
érzem, hogy ami Lispben a negyvenvalahány éves múltja miatt jól
végig van gondolva, majdnem matematikai alapokra helyezve, azt a
Pythonban úgy implementálták meg, hogy leült egy kóder, és ahogy
eszébe jutott, megcsinálta.
Ezer helyen kilóg ez a dolog: a decorator-szintaxisnál (miért nem
lehet osztályokra decoratort akasztani, és dekorátor futása közben
miért nem lehet elérni az éppen deklarálandó függvény nevét, meg
esetleg az osztályt? Sírok egy jó kis makróért...), abban, hogy a
dokumentáció tele van olyanokkal, hogy ne csináljak körkörös
referenciákat, annak ellenére, hogy elvileg már meg van oldva, hogy
a GC-t ne zavarják (Még jó, hogy! Hadd ne kelljen már nekem ezzel
törődni 2007 alkonyán!), abban, hogy most már, a Python legújabb
verziójában végre lehet egy try blokkban kivételkezelő és finally
blokk is egyszerre (mert idáig választani kellett).
Szépen szivárognak be ide a Lisp-es szokások: a Twisted framework
manhole nevű fícsörjével elkezdődött a fejlesztési és futtatási idő
összemosása, van lispes REPL, a decoratorok felteszem, hogy a
makrók megfelelői akartak lenni... szép, szép, csak hosszú lesz az
út, míg a Lisp kényelméig elér.
Viszont a Lisppel szemben előny, hogy van közösség, ami elérte a
kritikus méretet, és gyakorlatilag minden feladat megoldására van
legalább egy, de inkább több lehetőség. Igaz, néha nem túlságosan
dokumentáltak... :) Azt kell mondjam, hogy valódi problémák
megoldására, ami nem ötéves projekt, a Python szerintem
alkalmasabb: a Lisp világában mindig attól félnék, hogy kell
valamit megcsinálni, amire nincsen kész termék, pedig elvileg
lehetne.
Amiért viszont sírok, az a fejlesztési segítése: nem találtam még
értelmes Python IDE-t. Nem csilivili kell, hanem használható – a
SLIME a Lisp-hez tökéletes (annak ellenére, hogy pilótavizsgás), de
úgy láttam, hogy például azonosítókiegészítést nem nagyon csinál
semmi IDE. Debugolni is fájdalmas. Leginkább az, hogy nem találtam
remote debuggingra lehetőséget (pedig ez nagyon fog fájni), úgyhogy
úgy néz ki, hogy marad a jól bevált naplófájl írása-aztán a két
szememmel elolvasása rendszer.
Majd meglátjuk, milyen lesz. Ezerszer jobban élvezem, mint a C#
fejlesztést, de fáj, hogy annyival szebb lehetne, ha egy kicsivel
több dolgot átvett volna a Lisp világból...