Una decisione deliberata
Il 3 dicembre 2008, la comunità Python rilascia Python 3.0, la prima versione del linguaggio che non è retrocompatibile con le versioni precedenti. Non si tratta di un incidente né di un effetto collaterale: è una scelta progettuale deliberata. Dopo oltre quindici anni di sviluppo, il linguaggio ha accumulato inconsistenze, ridondanze e decisioni di design che non possono essere corrette senza rompere il codice esistente.
Guido van Rossum, creatore di Python e BDFL (Benevolent Dictator For Life) del progetto, ha guidato il processo attraverso una serie di PEP (Python Enhancement Proposals) che documentano ogni modifica e la sua motivazione. Il principio guida è chiaro: eliminare i “modi sbagliati” di fare le cose, anche a costo di una migrazione dolorosa.
Le modifiche principali
Le modifiche di Python 3 toccano aspetti fondamentali del linguaggio:
print diventa una funzione. In Python 2, print è un’istruzione (statement): print "hello". In Python 3 è una funzione built-in: print("hello"). Il cambiamento non è cosmetico — una funzione può essere sostituita, passata come argomento, utilizzata in espressioni lambda. È anche la modifica che rompe il maggior numero di script esistenti.
Stringhe Unicode di default. In Python 2 convivono due tipi di stringa: str (byte) e unicode (testo). La confusione tra i due è fonte costante di errori, specialmente nella gestione di dati internazionalizzati. Python 3 adotta Unicode come tipo stringa predefinito (str), con un tipo bytes separato ed esplicito per i dati binari.
Divisione vera. In Python 2, 5/2 restituisce 2 (divisione intera). In Python 3, 5/2 restituisce 2.5 (divisione float). La divisione intera esplicita si ottiene con l’operatore //. Questo elimina una classe di errori sottili nei calcoli numerici.
Altre modifiche includono: le viste al posto delle liste per dict.keys(), dict.values() e dict.items(); la funzione range() che sostituisce xrange(); la rimozione delle comparazioni implicite tra tipi diversi; una gerarchia delle eccezioni semplificata.
Il costo della transizione
La rottura della compatibilità ha un costo concreto. L’ecosistema Python è vasto: migliaia di librerie, framework e applicazioni sono scritte per Python 2. La migrazione richiede di aggiornare il codice, testarlo e verificare che tutte le dipendenze siano compatibili. La FSF è la comunità hanno rilasciato lo strumento 2to3 per automatizzare le conversioni più comuni, ma la migrazione completa resta un processo manuale e incrementale.
Python 2 continuerà a ricevere rilasci di manutenzione. La transizione a Python 3 è appena iniziata e richiederà tempo — probabilmente anni — prima che l’ecosistema converga sulla nuova versione. La scommessa della comunità è che il costo della migrazione sarà inferiore al costo di mantenere indefinitamente le inconsistenze del passato.
Link: python.org
