[Python] Python 2.7 & 3 - afraid and terrified (?)

Giampaolo Rodola' g.rodola a gmail.com
Sab 12 Lug 2014 20:28:54 CEST


2014-07-08 22:48 GMT+02:00 Dario Bertini <berdario a gmail.com>:

> Python3, ovviamente (ma il grosso di quello che scrivo ora come ora
> non è python)
>
> piuttosto, anch'io sono preoccupato, non tanto per la tecnologia, ma
> per le persone che vedo aprire bocca:
>
> Qualche settimana fa, alla Pycon a Firenze durante una presentazione
> lo speaker ha detto una cosa tipo
>
> "Anche Armin Ronacher ha avuto problemi nello scrivere un tool da
> linea di comando con Python3, e visto che ne sconsiglia l'utilizzo
> allora ovviamente ho scritto questo codice con Python2"
>
> per la cronaca, questo è il post:
> http://lucumr.pocoo.org/2014/5/12/everything-about-unicode/
>
> Come potete vedere, non propaganda da nessuna parte l'idea che "è
> meglio usare Python2", anzi la frase finale è:
>
> "The much more likely thing to happen is that people stick to Python 2
> or build broken stuff on Python 3. Or they go with Go. Which uses an
> even simpler model than Python 2: everything is a byte string."
>
> Parla della cosa più probabile, non parla di un giudizio
> positivo/negativo su ciò che accadrà, ma visto che la discussione è
> incentrata sul supporto della comunità ad un linguaggio, è ovvio che
> sta esponendo un ipotetico risultato negativo (almeno per la comunità
> python)
>
> ("everything is a byte string" fra l'altro è una semplificazione
> pericolosa, non illudetevi che sia la scelta ovvia & corretta: è lo
> stesso approccio scelto da php, foriero di bug e vulnerabilità
> varie.... golang ovviamente non è così naive come php)
>
> È forse Python3 perfetto? Ovviamente no. Ma il punto è (come lo stesso
> Armin fa notare nel suo post) il problema deriva anche dal fatto che
> stiamo costruendo i nostri software su delle fondamenta di
> pastafrolla: Unix e HTTP... nello specifico il meccanismo implicito
> dei locale, e l'encoding latin1/zuppa di byte di HTTP (che
> sinceramente non trovo così terribile, avendo scritto un server HTTP
> giocattolo in Python3).
>
> Se la vostra mente non è stata ancora irrimediabilmente offuscata dal
> koolaid dell'implicita superiorità di Unix/Linux/Macosx, per capire
> meglio da dove vengo vi consiglio di leggere questa vecchia perla:
>
> http://web.mit.edu/~simsong/www/ugh.pdf
>
> Il concetto al quale volevo arrivare comunque è: Abbiamo dei tool e
> delle infrastrutture imperfette, dobbiamo arrangiarci con quello che
> abbiamo e provare a migliorarli quanto più possibile.
>
> L'approccio corretto è migliorare quelle parti di Python3 che la gente
> trova ostiche
>
> È una cosa fattibile, e non c'è nulla di strano, ne è un esempio
> .format() sui bytes:
>
> vedi: http://bugs.python.org/msg171804 e la risposta di guido:
> http://bugs.python.org/msg180430 per capire come mai "io voglio un
> metodo .format() sui bytes!" è come un "c'è troppo traffico! Io voglio
> delle strade più grandi e in maggior numero"
>
> Bisogna prestare attenzione al feedback, e capire qual'è il vero
> problema sottostante: così come per il traffico la vera risposta è
> potenziare i mezzi pubblici, disincentivare l'uso dell'auto a favore
> delle biciclette, etc... la vera risposta non è continuare ad usare
> Python2 solo per poter scrivere `b"{}".format(1)`, o fornire un metodo
> .format()  perfettamente equivalente, ma fornire un subset sensato di
> .format() che copra gli use case di Twisted e delle altre librerie che
> implementano protocolli simil-plain text.
>
> È ragionevole postporre la migrazione a Python3 per una vostra
> codebase, sopratutto se fate molto affidamento su questi dettagli?
> Certo che si.
>
> Ma le soluzioni sono 3:
> - rimarrete per sempre con una codebase legacy Python2, con
> vulnerabilità di sicurezza non più fixate, ma che non importeranno
> perchè tanto andrete a proxare/wrappare tutte le interfacce di questo
> software con il mondo esterno (diciamo che diventerà tipo un Cobol...
> e questa è una cosa che avverà comunque in un sottinsieme ristretto di
> casi)
> - vi rimboccate le maniche assieme ad altre persone disposte a creare
> un Python2.8, col quale poter prolungare la vita un altro po' a
> Python2 (che già sarà comunque longevissimo), per poi finire nelle
> soluzioni 1 o 3
> - migrate a Py3 non appena tutte le piccole asperità verranno limate via
>
> Personalmente, ho migrato (anche se i cambiamenti non sono stati
> mergiati) una libreria (che fa pesante uso di accesso a sequenze di
> byte) di ~10k righe di codice da Py2 a Py3... rendendola compatibile
> con entrambe le versioni
>
> Finchè le uniche persone che si lamentano di Py2 e non portano il loro
> codice sono le persone che fraintendono i problemi ed i benefici in
> questo porting e (forse proprio per questo) non sono disposti/in grado
> di rimboccarsi le maniche ed incominciare un lavoro su Python2.8 è
> ovvio che continueremo a sentirli lamentarsi (sia chiaro: Armin ed i
> tizi di Twisted non sono in questa categoria, in quanto loro stessi
> scrivono codice Py3, o lavorano seppur lentamente sul porting, o
> propongono/introducono migliorie in Py3)
>
> Ma questo lamento improduttivo non è altro che un rumore, che rischia
> di distogliere l'attenzione delle persone dal vero segnale, e che
> porterà i nuovi utenti a complicarsi la vita, convincendoli
> assurdamente che in linea di principio per loro è più conveniente
> iniziare con Python2, piuttosto che con Python3 (esattamente come
> purtroppo è successo con lo speaker di cui parlavo, che ha così
> interpretato il segnale distorto di Armin)
>
>
> --
> xmpp: berdario a gmail.com
> bitmessage: BM-2cTYXfGiSTsnx3righ6aHcJSWe4MV17jDP
> gpg fingerprint: 3F8D53518012716C4EEF7DF67B498306B3BF75A0 (used just
> for signing commits)
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> http://lists.python.it/mailman/listinfo/python
>


Sono contento di vedere una discussione a riguardo (sono così poche...),
inoltre così bene argomentata.
Riguardo la mancata adozione di Python 3 ci sono svariati motivi, ma credo
che il più importante sia il fatto che ancora molte, troppe librerie
"grosse" non siano state ancora portate e considerando che sono passati 5
anni da Python 3.0 direi che la cosa è abbastanza preoccupante.
http://py3readiness.org/
Nomi quali Twisted, gevent, eventlet, MySQL-python, pika e molti altri
implicano che centinaia di migliaia di persone sono, ad oggi, letteralmente
*impossibilitate* a fare il porting e quindi non si pongono neanche il
problema. ...E non solo: se anche tutte le tue dipendenze fossero
soddisfatte, chi te lo dice che in futuro non potresti avere bisogno di
qualcosa che non è stato ancora portato, magari basato su Twisted o che so
io? Come può un'azienda fare una scelta tanto rischiosa? Semplice: non la
fa.
Un *vero* campione statistico riguardo il successo di Python 3 IMO si
potrebbe avere solamente nel momento in cui chiunque può effetturare il
porting senza porsi il problema se la libreria X o Y è stata portata o
meno, e calcolare le tempistiche da allora (altro che da Python 3.0).
Per fare un esempio concreto, il porting di Open Stack è fermo da ben una
sessantina di loro dipendenze non ancora portate:
https://gist.github.com/brettcannon/9009338
OK, la code base di Open Stack è enorme, ma il numero rimane indicativo.

-- 
Giampaolo - http://grodola.blogspot.com
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140712/949477ee/attachment.html>


Maggiori informazioni sulla lista Python