luigi scarso ha scritto: > [...] >> Purtroppo sono ancora alla ricerca di un linguaggio tra C e Python, e ne >> Haskell, ne OCaml ne Erlang non mi sembrano adeguati. > lua+C ?
> [...] Non mi sembra che si guadagni molto in prestazioni e, soprattutto, a livello di astrazioni. Per me il livello di astrazione è molto importante, perchè di solito significa maggiori possibilità di riuscire a scrivere codice *veramente* riutilizzabile. Python ha dalla sua la dinamicità e costrutti potenti come i generatori. Ma anche Haskell è molto interessante da questo punto di vista. Il "problema" di Python è che spesso i vari "building block" te li devi scrivere in C. Vedi ad esempio numpy. Di solito ti va bene, ma non è detto che i vari "blocchi" facciano sempre al caso tuo: vedi sempre numpy che, se ricordo bene, implementa una funzione per cercare un elemento all'interno di un array *solo* se questo è ordinato (perchè in questo caso l'implementazione è più efficiente). Giusto per fare un esempio banale, qui ci sono diverse implementazioni, in Python ed Haskell, di controllo di un elemento all'interno di una sequenza **lazy**. # nums.py: Python, versione che usa xrange: http://paste.pocoo.org/show/150006/ # nums-pure.py: Python, versione che usa un generatore esplicito: http://paste.pocoo.org/show/150007/ # nums.hs: Haskell http://paste.pocoo.org/show/150008/ In Haskell, [a..b] è solo zucchero sintattico, non è un "builtin". Ecco una versione con codice esplicito: # nums-pure.hs http://paste.pocoo.org/show/150009/ Per i tempi ho usato la funzione `time` di bash. Il codice Haskell è stato compilato con `ghc -O2 --make nums.hs` Gli script Python sono stati precompilati (ma non è necessario). # nums.py real 0m4.745s user 0m4.620s sys 0m0.004s # nums-pure.py real 0m30.321s user 0m29.842s sys 0m0.032s Come si vede c'è una differenza abissale. Per quanto riguarda Haskell: # nums.hs real 0m2.533s user 0m2.448s sys 0m0.020s # nums-pure.hs real 0m2.673s user 0m2.584s sys 0m0.004s La versione Python occupa 2476 KB, quella Haskell 1344 KB (ma sono valori indicativi). La versione Haskell è più efficente probabilmente perchè può gestire gli interi nativi della CPU. Le prestazioni nella gestione della sequenza lazy sono molto simili. Quello che sto cercando è un linguaggio di livello non troppo lontano da Python, ma efficiente. Haskell ed Ocaml si avvicinano, ma hanno diversi problemi purtroppo. Ciao Manlio _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python