H2704111825
K2805121926
Sz2906132027
Cs3007142128
P0108152229
Sz0209162330
V0310172431

Connect the dots.

2006/12/31

Python

Ú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...
Kulcsszavak: szakma

shin



©2006 Sarok.org