[Python] Python innovation -- no longer OT --[Re: OT ma interssante]
enrico franchi
enrico.franchi a gmail.com
Ven 17 Lug 2015 16:28:21 CEST
2015-07-17 14:53 GMT+01:00 enrico franchi <enrico.franchi a gmail.com>:
> Per il resto, davvero, non vedo come possiamo continuare la discussione
> con un minimo di interesse
>
Ora... facciamo un po' di esercizio. Per esempio cerchiamo di applicare il
concetto di "innovazione" a qualcosa che tutti conosciamo. Python. La
domanda e' "Python e' innovativo"? Non daro' una risposta, ma un po' di
spunti.
Breve contesto... Python e' un linguaggio vecchio, da un certo punto di
vista. Ma non e' cosi' vecchio da potere essere annoverato fra i "pionieri".
Per dire... la parte ad oggetti di Python non e' particolarmente
innovativa. Le versioni "vecchie" (<2.2) non avevano le new style classes.
Tutta questa parte non e' particolarmente innovativa: Smalltalk faceva
probabilmente altrettanto se non di piu' 20 anni prima. Lisp come sopra.
Lisp aveva pure il concetto di MOP, che in Python fino a 1.5 era
implementabile con molta fatica (e uscendo da Python) e fino
all'introduzione delle metalcassi e' stato disponibile con "fatica". Anche
qui, la versione del MOP di Python non e' piu' elegante o piu' potente di
quella di Lisp.
Il fatto che funzioni siano valori non e' particolarmente innovativa. Lisp
aveva questa cosa da 40 anni o giu' di li. map/filter e compagnia? Ancora
Lisp. List comprehensions? Haskell e probabilmente altri. Generatori
"base"? Anche li c'e' parecchia prior art (se guardi la PEP ti dicono anche
esattamente cosa). Ad essere onesto, e' prior art meno "celebre" di Haskell
o Lisp, ma ancora una volta...
I generatori "completi" che abbiamo ora? Un po' piu' innovativi... ma non
sono altro che una versione "castratissima" delle continuation di Scheme (e
di altri linguaggi che le hanno) e in generale non sono nulla di nuovo.
Altri hanno avuto cose simili tutte insieme.
Il descriptor protocol? Quello mi sembra piuttosto nuovo. Ma, dal mio punto
di vista, e' una cosa relativamente implementativa. Ti consente di scrivere
codice piu' coinciso in determinate circostanze, ma di per se non rende il
linguaggio piu' potente. Ti consente di fare certe cose (che si fanno di
rado) in modo un po' piu' semplice.
Decoratori? Davvero... qui c'e' parecchia prior art. Troppa per entrarci.
Ottima implementazione (peccato che Python sia anche un linguaggio con
ereditarieta' e che le due cose facciano a cazzotti in modo spettacolare:
se non ve ne siete accorti, meditate). Ma innovativo? Il fatto che il
programmatore Java non li avesse non li rende certo innovativi... oh, ma
dannazione... i Javisti avevano le annotazioni, con una sintassi molto
simile, relativamente piu' raffinati, ma molto piu' complicati da usare per
determinate cose che invece in Python sono molto semplici. Innovativi?
Boh... effettivamente e' qualcosa che anche i laymen hanno preso su da
subito. Fra tutte le features elencate sono probabilmente la piu' banale,
la meno interessante, la meno innovativa... eppure hanno avuto un impatto
colossale sulla comunita'. Tanto per dire.
Per il resto... cpython e' implementato con una macchina a stack. Piuttosto
banale, per inciso. Non e' funzionalmente troppo diversa dalle
implementazioni giocattolo che si scrivono in un paio di pomeriggi. Il
compilatore non fa ottimizzazione nemmeno a parlarne (e' tipo anni indietro
rispetto quello che fanno oggi le macchine virtuali dei linguaggi dinamici
e paragonarla alla tecnologia che c'e' nella JVM e' davvero offensivo).
Niente di innovativo li. Oh... ma anche cose come un garbage collector che
fa un po' tristezza ma non e' completamente uno scherzo sono arrivati quasi
10 anni dopo l'implementazione iniziale. Per dire...
Ora praticamente la cosa piu' innovativa che Python ha avuto e' stata
l'intuizione sulla leggibilita'. Ora il concetto (letterario) di
leggibilita' e' qualcosa di cui si stava parlando gia' nell' '800 (so much
for innovation). Nell'ambito dei linguaggi di programmazione il concetto di
readability e' stato studiato piuttosto presto (ci sono risultati
interessanti dei primi anni 80, sostanzialmente quando si parlava anche di
literate programming). Da un certo punto di vista... niente di
interessante. Eppure il concetto di literate programming ha sostanzialmente
fallito... io personalmente ricordo qualche vecchia versione di Haskell che
andava in questa direzione e mi dava davvero dolore indicibile. Se vuoi
l'approccio di Python e' opposto: rendiamo il codice leggibile, non
farciamolo di spiegazioni testuali per renderlo leggibile. Ma anche li...
se ne parlava da tempo.
Innovativo o no? Il fatto e' che Python e' tutto sommato uno dei linguaggi
piu' usati al mondo (si, essere nei primi 10 vuole dire essere molto usato)
ed e' quello che ha portato il concetto di readability a molti
sviluppatori. E incidentalmente li ha anche esposti ad una serie di
tecniche (quelle la sopra) che i laymen programmer non conoscevano (e che,
per inciso, tuttora non padroneggiano... pero' almeno si possono usare).
Ora, se consideriamo esclusivamente i meriti tecnici/tecnologici Python non
e' per nulla innovativo (dal mio punto di vista). Non e' Erlang, non e'
Rust, non e' C++ (al di la del fatto che siano stati inventati per sbaglio,
i templates sono veramente qualcosa di spettacolarmente potente), non e'
Lisp, non e' Scheme e non e' Haskell. Eppure usando un diverso concetto di
"innovazione" e' invece un linguaggio estremamente innovativo...
Eh.
--
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150717/74090c4d/attachment-0001.html>
Maggiori informazioni sulla lista
Python