<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2015-07-17 14:53 GMT+01:00 enrico franchi <span dir="ltr"><<a href="mailto:enrico.franchi@gmail.com" target="_blank">enrico.franchi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Per il resto, davvero, non vedo come possiamo continuare la discussione con un minimo di interesse </div></blockquote><div><br></div><div>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.</div><div><br></div><div> 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".</div><div><br></div><div>Per dire... la parte ad oggetti di Python non e' particolarmente innovativa. Le versioni "vecchie" (<2.2) non avevano le new style classes.</div><div>Tutta questa parte non e' particolarmente innovativa: Smalltalk faceva probabilmente altrettanto se non di piu' 20 anni prima. Lisp come sopra.</div><div>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.</div><div><br></div><div>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...</div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>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.</div><div><br></div><div>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... </div></div><br>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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">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).</div><div class="gmail_extra"><br></div><div class="gmail_extra">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...</div><div class="gmail_extra"><br></div><div class="gmail_extra">Eh.<br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>