Storia di Python - History of Python
Il linguaggio di programmazione Python è stato concepito alla fine degli anni '80 e la sua implementazione è stata avviata nel dicembre 1989 da Guido van Rossum presso CWI nei Paesi Bassi come successore di ABC in grado di gestire le eccezioni e interfacciarsi con il sistema operativo Amoeba . Van Rossum è l'autore principale di Python e il suo ruolo centrale nel decidere la direzione di Python si riflette nel titolo datogli dalla comunità Python, Benevolent Dictator for Life (BDFL) . (Tuttavia, van Rossum si è dimesso da leader il 12 luglio 2018.). Python prende il nome dal programma televisivo della BBC Monty Python's Flying Circus .
Python 2.0 è stato rilasciato il 16 ottobre 2000, con molte nuove funzionalità importanti, incluso un garbage collector che rileva il ciclo (oltre al conteggio dei riferimenti ) per la gestione della memoria e il supporto per Unicode . Tuttavia, il cambiamento più importante riguardava il processo di sviluppo stesso, con il passaggio a un processo più trasparente e sostenuto dalla comunità.
Python 3.0, una versione importante e incompatibile con le versioni precedenti, è stata rilasciata il 3 dicembre 2008 dopo un lungo periodo di test. Molte delle sue caratteristiche principali sono state anche trasferite su Python 2.6 e 2.7, compatibile con le versioni precedenti, sebbene ora non supportato.
Storia antica
Nel febbraio 1991, Van Rossum ha pubblicato il codice (con etichetta versione 0.9.0) su alt.sources. Già presente in questa fase di sviluppo erano classi con ereditarietà , gestione delle eccezioni, funzioni, e il nucleo tipi di dati di list, dict, stre così via. Anche in questa versione iniziale c'era un sistema di moduli preso in prestito da Modula-3 ; Van Rossum descrive il modulo come "una delle principali unità di programmazione di Python". Il modello di eccezione di Python assomiglia anche a quello di Modula-3, con l'aggiunta di una elseclausola. Nel 1994 è stato formato comp.lang.python , il forum di discussione principale per Python, che ha segnato una pietra miliare nella crescita della base di utenti di Python.
Versione 1
Python ha raggiunto la versione 1.0 nel gennaio 1994. Le principali novità incluse in questa release sono stati gli strumenti di programmazione funzionale lambda, map, filtere reduce. Van Rossum ha dichiarato che "Python ha acquisito lambda, reduce(), filter() e map(), per gentile concessione di un hacker Lisp che non li ha rilevati e ha presentato patch funzionanti ".
L'ultima versione rilasciata mentre Van Rossum era al CWI era Python 1.2. Nel 1995, Van Rossum ha continuato il suo lavoro su Python presso la Corporation for National Research Initiatives (CNRI) a Reston , in Virginia , da dove ha rilasciato diverse versioni.
Con la versione 1.4, Python aveva acquisito diverse nuove funzionalità. Notevoli tra questi sono gli argomenti delle parole chiave ispirati a Modula-3 (che sono anche simili agli argomenti delle parole chiave di Common Lisp ) e il supporto integrato per i numeri complessi . È inclusa anche una forma di base per nascondere i dati tramite il nome mangling , anche se questo è facilmente aggirabile.
Durante il soggiorno di Van Rossum al CNRI, ha lanciato l'iniziativa Computer Programming for Everybody (CP4E), con l'intenzione di rendere la programmazione più accessibile a più persone, con una "alfabetizzazione" di base nei linguaggi di programmazione, simile all'alfabetizzazione inglese di base e alle abilità matematiche richieste da maggior parte dei datori di lavoro. Python ha svolto un ruolo centrale in questo: a causa della sua attenzione alla sintassi pulita, era già adatto e gli obiettivi di CP4E presentavano somiglianze con il suo predecessore, ABC. Il progetto è stato finanziato da DARPA . A partire dal 2007, il progetto CP4E è inattivo, e mentre Python cerca di essere facilmente apprendibile e non troppo arcano nella sua sintassi e semantica, raggiungere i non programmatori non è una preoccupazione attiva.
Essere aperto
Nel 2000, il team di sviluppo principale di Python si è trasferito su BeOpen.com per formare il team BeOpen PythonLabs, sotto la direzione del primo allievo di Google Domenic Merenda. Il CNRI ha richiesto il rilascio di una versione 1.6, che riassumesse lo sviluppo di Python fino al punto in cui il team di sviluppo ha lasciato il CNRI. Di conseguenza, le pianificazioni di rilascio per 1.6 e 2.0 hanno avuto una notevole sovrapposizione. Python 2.0 è stata l'unica versione di BeOpen.com. Dopo che Python 2.0 è stato rilasciato da BeOpen.com, Guido van Rossum e gli altri sviluppatori di PythonLabs si sono uniti a Digital Creations .
La versione 1.6 di Python includeva una nuova licenza CNRI che era sostanzialmente più lunga della licenza CWI che era stata utilizzata per le versioni precedenti. La nuova licenza includeva una clausola che affermava che la licenza era disciplinata dalle leggi dello Stato della Virginia . La Free Software Foundation ha sostenuto che la clausola di scelta della legge era incompatibile con la GNU General Public License . BeOpen, CNRI e FSF hanno negoziato una modifica alla licenza del software libero di Python che lo avrebbe reso compatibile con la GPL. Python 1.6.1 è essenzialmente uguale a Python 1.6, con alcune correzioni di bug minori e con la nuova licenza compatibile con GPL.
Versione 2
Python 2.0, rilasciato nell'ottobre 2000, ha introdotto la comprensione delle liste , una funzionalità presa in prestito dai linguaggi di programmazione funzionale SETL e Haskell . La sintassi di Python per questo costrutto è molto simile a quella di Haskell, a parte la preferenza di Haskell per i caratteri di punteggiatura e la preferenza di Python per le parole chiave alfabetiche. Python 2.0 ha anche introdotto un garbage collector in grado di raccogliere cicli di riferimento.
Python 2.1 era vicino a Python 1.6.1, così come Python 2.0. La sua licenza è stata ribattezzata Python Software Foundation License . Tutto il codice, la documentazione e le specifiche aggiunte, dal momento della versione alpha di Python 2.1 in poi, sono di proprietà della Python Software Foundation (PSF), un'organizzazione senza scopo di lucro costituita nel 2001, sul modello della Apache Software Foundation . La versione includeva una modifica alla specifica del linguaggio per supportare gli ambiti nidificati, come altri linguaggi con ambito statico . (La funzionalità era disattivata per impostazione predefinita e non era richiesta fino a Python 2.2.)
Python 2.2 è stato rilasciato nel dicembre 2001; una delle principali innovazioni è stata l'unificazione dei tipi di Python (tipi scritti in C ) e delle classi (tipi scritti in Python) in un'unica gerarchia. Questa singola unificazione ha reso il modello a oggetti di Python puramente e coerentemente orientato agli oggetti. Sono stati aggiunti anche generatori ispirati a Icon .
Python 2.5 è stato rilasciato nel settembre 2006 e ha introdotto l' withistruzione, che racchiude un blocco di codice all'interno di un gestore di contesto (ad esempio, l'acquisizione di un blocco prima dell'esecuzione del blocco di codice e il rilascio del blocco in seguito, o l'apertura di un file e quindi la sua chiusura) , consentendo un comportamento simile a RAII ( Resource Acquisition Is Initialization ) e sostituendo un comune idioma try/finally.
Python 2.6 è stato rilasciato in concomitanza con Python 3.0 e includeva alcune funzionalità di tale versione, nonché una modalità di "avvisi" che evidenziava l'uso di funzionalità rimosse in Python 3.0. Allo stesso modo, Python 2.7 ha coinciso e includeva funzionalità di Python 3.1, che è stato rilasciato il 26 giugno 2009. Le versioni parallele 2.xe 3.x sono quindi cessate e Python 2.7 è stata l'ultima versione della serie 2.x. Nel novembre 2014 è stato annunciato che Python 2.7 sarebbe stato supportato fino al 2020, ma gli utenti sono stati incoraggiati a passare a Python 3 il prima possibile. Il supporto per Python 2.7 è terminato il 1° gennaio 2020, insieme al blocco del codice del ramo di sviluppo 2.7. Una versione finale, 2.7.18, è avvenuta il 20 aprile 2020 e includeva correzioni per bug critici e blocchi di rilascio. Questo ha segnato la fine del ciclo di vita di Python 2.
Versione 3
Python 3.0 (chiamato anche "Python 3000" o "Py3K") è stato rilasciato il 3 dicembre 2008. È stato progettato per correggere i difetti di progettazione fondamentali del linguaggio: le modifiche richieste non possono essere implementate pur mantenendo la piena retrocompatibilità con 2. x, che richiedeva un nuovo numero di versione principale. Il principio guida di Python 3 era: "ridurre la duplicazione delle funzionalità rimuovendo i vecchi modi di fare le cose".
Python 3.0 è stato sviluppato con la stessa filosofia delle versioni precedenti. Tuttavia, poiché Python aveva accumulato modi nuovi e ridondanti per programmare lo stesso compito, Python 3.0 ha posto l'accento sulla rimozione di costrutti e moduli duplicati, in linea con "Ci dovrebbe essere un - e preferibilmente solo un - modo ovvio per farlo".
Tuttavia, Python 3.0 è rimasto un linguaggio multi-paradigma . I programmatori potevano ancora seguire paradigmi di programmazione orientati agli oggetti , strutturati e funzionali , tra gli altri, ma all'interno di scelte così ampie, i dettagli dovevano essere più ovvi in Python 3.0 di quanto non fossero in Python 2.x.
Compatibilità
Python 3.0 ha rotto la compatibilità con le versioni precedenti e gran parte del codice Python 2 non viene eseguito senza modifiche su Python 3. La tipizzazione dinamica di Python combinata con i piani per modificare la semantica di alcuni metodi di dizionari, ad esempio, ha reso perfetta la traduzione meccanica da Python 2.x a Python 3.0 molto difficile. Uno strumento chiamato "2to3" esegue le parti di traduzione che possono essere eseguite automaticamente. In questo, 2to3 sembrava avere un discreto successo, anche se una prima revisione ha rilevato che c'erano aspetti della traduzione che uno strumento del genere non sarebbe mai stato in grado di gestire. Prima del lancio di Python 3, ai progetti che richiedevano compatibilità con entrambe le serie 2.xe 3.x si consigliava di avere un'unica fonte (per la serie 2.x) e di produrre versioni per la piattaforma Python 3.x utilizzando 2a3. Le modifiche al codice Python 3.x sono state scoraggiate finché il codice necessario per essere eseguito su Python 2.x. Questo non è più raccomandato; a partire dal 2012 l'approccio preferito era creare un'unica base di codice che potesse essere eseguita sia con Python 2 che con 3 utilizzando moduli di compatibilità.
Caratteristiche
Alcuni dei principali cambiamenti inclusi per Python 3.0 sono stati:
- Modifica in
printmodo che sia una funzione incorporata , non un'istruzione. Ciò ha reso più semplice modificare un modulo per utilizzare una funzione di stampa diversa, oltre a rendere la sintassi più regolare. In Python 2.6 e 2.7print()è disponibile come built-in ma è mascherato dalla sintassi dell'istruzione print, che può essere disabilitata inserendofrom __future__ import print_functionall'inizio del file - Rimozione della
inputfunzione Python 2 e ridenominazione dellaraw_inputfunzione ininput. Lainputfunzione di Python 3 si comporta come la funzione di Python 2raw_input, in quanto l'input viene sempre restituito come stringa anziché essere valutato come espressione - Spostamento
reduce(ma nonmapofilter) fuori dallo spazio dei nomi integrato e dentrofunctools(la logica è che il codice che utilizzareduceè meno leggibile del codice che utilizza un ciclo for e una variabile accumulatore) - Aggiunta del supporto per annotazioni di funzioni facoltative che possono essere utilizzate per dichiarazioni di tipo informali o altri scopi
- Unificare i tipi
str/unicode, rappresentare il testo e introdurre unbytestipo immutabile separato ; e unbytearraytipo mutabile per lo più corrispondente , entrambi i quali rappresentano array di byte - Rimozione delle funzionalità di compatibilità con le versioni precedenti, incluse le classi vecchio stile, le eccezioni di stringa e le importazioni relative implicite
- Un cambiamento nella funzionalità di divisione di interi : in Python 2,
5 / 2è2; in Python 3,5 / 2è2.5. (Sia in Python 2 (2.2 in poi) che in Python 3, esiste un operatore separato per fornire il vecchio comportamento:5 // 2is2)
Le versioni successive della serie Python 3.x hanno incluso nuove funzionalità aggiuntive e sostanziali; tutto lo sviluppo in corso del linguaggio avviene nella serie 3.x.
Tabella delle versioni
Uscite prima delle versioni numerate:
- Iniziata l'implementazione - dicembre 1989
- Rilasci interni al Centrum Wiskunde & Informatica - 1990
| Versione | Ultima versione micro | Data di rilascio | Fine del pieno supporto | Fine delle correzioni di sicurezza |
|---|---|---|---|---|
| 0.9 | 0.9.9 | 1991-02-20 | 1993-07-29 | |
| 1.0 | 1.0.4 | 1994-01-26 | 1994-02-15 | |
| 1.1 | 1.1.1 | 1994-10-11 | 1994-11-10 | |
| 1.2 | 1995-04-13 | Non supportato | ||
| 1.3 | 1995-10-13 | Non supportato | ||
| 1.4 | 1996-10-25 | Non supportato | ||
| 1.5 | 1.5.2 | 1998-01-03 | 1999-04-13 | |
| 1.6 | 1.6.1 | 2000-09-05 | 2000-09 | |
| 2.0 | 2.0.1 | 2000-10-16 | 2001-06-22 | |
| 2.1 | 2.1.3 | 2001-04-15 | 2002-04-09 | |
| 2.2 | 2.2.3 | 2001-12-21 | 2003-05-30 | |
| 2.3 | 2.3.7 | 2003-06-29 | 2008-03-11 | |
| 2.4 | 2.4.6 | 2004-11-30 | 2008-12-19 | |
| 2,5 | 2.5.6 | 2006-09-19 | 2011-05-26 | |
| 2.6 | 2.6.9 | 2008-10-01 | 2010-08-24 | 2013-10-29 |
| 2.7 | 2.7.18 | 2010-07-03 | 01/01/2020 | |
| 3.0 | 3.0.1 | 2008-12-03 | 2009-06-27 | |
| 3.1 | 3.1.5 | 2009-06-27 | 2011-06-12 | 2012-04-06 |
| 3.2 | 3.2.6 | 2011-02-20 | 2013-05-13 | 2016-02-20 |
| 3.3 | 3.3.7 | 2012-09-29 | 2014-03-08 | 2017-09-29 |
| 3.4 | 3.4.10 | 2014-03-16 | 2017-08-09 | 2019-03-18 |
| 3.5 | 3.5.10 | 2015-09-13 | 2017-08-08 | 2020-09-30 |
| 3.6 | 3.6.15 | 2016-12-23 | 2018-12-24 | 2021-12 |
| 3.7 | 3.7.12 | 2018-06-27 | 2020-06-27 | 2023-06 |
| 3.8 | 3.8.12 | 2019-10-14 | 2021-05-03 | 2024-10 |
| 3.9 | 3.9.7 | 2020-10-05 | 2022-05 | 2025-10 |
| 3.10 | 3.10.0 | 2021-10-04 | 2023-05 | 2026-10 |
| 3.11 | 3.11.0a0 | 2022-10-03 | 2024-05 | 2027-10 |
| Leggenda: |
Vecchia versione
Versione precedente, ancora mantenuta
Ultima versione
Ultima versione di anteprima
Rilascio futuro
|
|||
| Il corsivo indica l'ultima versione micro delle versioni attualmente supportate dal 2021-07-15. | ||||
Note sulla tabella:
Supporto