Istoria Python - History of Python
Limbajul de programare Python a fost conceput la sfârșitul anilor 1980, iar punerea sa în aplicare a fost începută în decembrie 1989 de către Guido van Rossum la CWI în Țările de Jos ca un succesor ABC capabil de manipulare excepție și interfațarea cu sistemul de operare Amoeba . Van Rossum este autorul principal al Python, iar rolul său continuu central în a decide direcția Python se reflectă în titlul dat de comunitatea Python, Benevolent Dictator for Life (BDFL) . (Cu toate acestea, van Rossum a renunțat la funcția de lider pe 12 iulie 2018.). Python a fost numit după emisiunea TV Monty Python's Flying Circus .
Python 2.0 a fost lansat pe 16 octombrie 2000, cu multe caracteristici noi majore, inclusiv un colector de gunoi care detectează ciclul (pe lângă numărarea referințelor ) pentru gestionarea memoriei și suport pentru Unicode . Cu toate acestea, cea mai importantă schimbare a fost procesul de dezvoltare în sine, cu trecerea la un proces mai transparent și susținut de comunitate.
Python 3.0, o versiune majoră, incompatibilă înapoi, a fost lansată pe 3 decembrie 2008 după o lungă perioadă de testare. Multe dintre caracteristicile sale majore au fost, de asemenea, backportate către versiunile compatibile cu versiunile anterioare, deși acum nu sunt acceptate, Python 2.6 și 2.7.
Istoria timpurie
În februarie 1991, Van Rossum a publicat codul (versiunea etichetată 0.9.0) pe alt.sources. Deja prezent în acest stadiu de dezvoltare au fost în clase cu moștenire , de manipulare excepție, funcțiile și miezul tipuri de date de list, dict, strși așa mai departe. De asemenea, în această versiune inițială a fost un sistem de module împrumutat de la Modula-3 ; Van Rossum descrie modulul ca fiind „una dintre principalele unități de programare ale Python”. Modelul de excepție al lui Python seamănă și cu Modula-3, cu adăugarea unei elseclauze. În 1994 a fost format comp.lang.python , forumul principal de discuții pentru Python, marcând o etapă importantă în creșterea bazei de utilizatori a Python.
Versiunea 1
Python a ajuns la versiunea 1.0 în ianuarie 1994. Noile caracteristici majore incluse în această versiune au fost instrumentele de programare funcționale lambda, map, filterși reduce. Van Rossum a declarat că „Python a achiziționat lambda, reduce (), filter () și map (), prin amabilitatea unui hacker Lisp care le-a ratat și a trimis patch-uri de lucru ”.
Ultima versiune lansată în timp ce Van Rossum era la CWI a fost Python 1.2. În 1995, Van Rossum și-a continuat activitatea pe Python la Corporation for National Research Initiatives (CNRI) din Reston , Virginia , de unde a lansat mai multe versiuni.
Prin versiunea 1.4, Python a dobândit mai multe funcții noi. Remarcabile sunt argumentele de cuvinte cheie inspirate de Modula-3 (care sunt, de asemenea, similare cu argumentele de cuvinte cheie ale lui Common Lisp ) și suportul încorporat pentru numere complexe . De asemenea, este inclusă o formă de bază de date care se ascund după denumirea de nume , deși aceasta este ușor de ocolit.
În timpul șederii lui Van Rossum la CNRI, el a lansat inițiativa Computer Programming for Everybody (CP4E), intenționând să facă programarea mai accesibilă pentru mai mulți oameni, cu o „alfabetizare” de bază în limbaje de programare, similară cu abilitățile de bază în materie de alfabetizare și matematică în limba engleză. majoritatea angajatorilor. Python a jucat un rol central în acest sens: datorită concentrării sale pe sintaxa curată, era deja adecvat, iar obiectivele CP4E aveau asemănări cu predecesorul său, ABC. Proiectul a fost finanțat de DARPA . Începând din 2007, proiectul CP4E este inactiv și, deși Python încearcă să fie ușor de învățat și să nu fie prea arcane în sintaxa și semantica sa, accesul către non-programatori nu este o preocupare activă.
Deschis
În 2000, echipa de dezvoltare Python core s-a mutat pe BeOpen.com pentru a forma echipa BeOpen PythonLabs, sub îndrumarea primului alum de la Google Domenic Merenda. CNRI a solicitat lansarea unei versiuni 1.6, care să rezume dezvoltarea Python până în momentul în care echipa de dezvoltare a părăsit CNRI. În consecință, programele de lansare pentru 1.6 și 2.0 au avut o cantitate semnificativă de suprapunere. Python 2.0 a fost singura versiune de pe BeOpen.com. După lansarea Python 2.0 de către BeOpen.com, Guido van Rossum și ceilalți dezvoltatori PythonLabs s-au alăturat Digital Creations .
Versiunea Python 1.6 a inclus o nouă licență CNRI care era substanțial mai lungă decât licența CWI care fusese utilizată pentru versiunile anterioare. Noua licență a inclus o clauză care să ateste că licența a fost guvernată de legile din statul Virginia . Free Software Foundation a susținut că clauza de alegere a legii a fost incompatibilă cu GNU General Public License . BeOpen, CNRI și FSF au negociat o modificare a licenței de software gratuit Python care ar face-o compatibilă cu GPL. Python 1.6.1 este în esență același cu Python 1.6, cu câteva remedieri minore de erori și cu noua licență compatibilă GPL.
Versiunea 2
Python 2.0, lansat octombrie 2000, a introdus comprehensions lista , o caracteristică împrumutată de la funcționale de programare limbaje SETL și Haskell . Sintaxa lui Python pentru acest construct este foarte similară cu cea a lui Haskell, în afară de preferința lui Haskell pentru caracterele de punctuație și preferința lui Python pentru cuvintele cheie alfabetice. Python 2.0 a introdus, de asemenea, un colector de gunoi capabil să colecteze cicluri de referință.
Python 2.1 era aproape de Python 1.6.1, precum și de Python 2.0. Licența sa a fost redenumită Licența Python Software Foundation . Toate codurile, documentația și specificațiile adăugate, de la lansarea alfa a Python 2.1, sunt deținute de Python Software Foundation (PSF), o organizație non-profit formată în 2001, după modelul Apache Software Foundation . Versiunea a inclus o modificare a specificațiilor de limbă pentru a accepta domenii imbricate, ca și alte limbi cu domeniu static . (Funcția a fost dezactivată în mod implicit și nu este necesară până la Python 2.2.)
Python 2.2 a fost lansat în decembrie 2001; o inovație majoră a fost unirea tipurilor Python (tipuri scrise în C ) și a claselor (tipuri scrise în Python) într-o ierarhie. Această unificare unică a făcut ca modelul obiectului Python să fie orientat în mod pur și consecvent. De asemenea, au fost adăugate generatoare care au fost inspirate de Icon .
Python 2.5 a fost lansat în septembrie 2006 și a introdus withdeclarația, care cuprinde un bloc de cod într-un manager de context (de exemplu, achiziționarea unei blocări înainte ca blocul de cod să fie executat și eliberarea blocării ulterior, sau deschiderea unui fișier și apoi închiderea acestuia) , permițând achiziționarea resurselor este inițializarea (RAII) ca un comportament asemănător și înlocuirea unui idiom comun try / în cele din urmă.
Python 2.6 a fost lansat pentru a coincide cu Python 3.0 și a inclus câteva caracteristici din acea versiune, precum și un mod „avertismente” care a evidențiat utilizarea caracteristicilor care au fost eliminate în Python 3.0. În mod similar, Python 2.7 a coincis și a inclus funcții din Python 3.1, care a fost lansat la 26 iunie 2009. Versiunile paralele 2.x și 3.x au încetat, iar Python 2.7 a fost ultima versiune din seria 2.x. În noiembrie 2014, s-a anunțat că Python 2.7 va fi acceptat până în 2020, dar utilizatorii au fost încurajați să se mute în Python 3 cât mai curând posibil. Suportul Python 2.7 s-a încheiat la 1 ianuarie 2020, împreună cu înghețarea codului ramurii de dezvoltare 2.7. O versiune finală, 2.7.18, a avut loc pe 20 aprilie 2020 și a inclus remedieri pentru erori critice și blocanți de lansare. Aceasta a marcat sfârșitul vieții Python 2.
Versiunea 3
Python 3.0 (numit și „Python 3000” sau „Py3K”) a fost lansat pe 3 decembrie 2008. A fost conceput pentru a remedia defectele fundamentale de proiectare în limbă - modificările necesare nu au putut fi implementate, păstrând în același timp compatibilitatea totală cu versiunea 2. seria x, care a necesitat un nou număr de versiune majoră. Principiul director al Python 3 a fost: „reduceți duplicarea caracteristicilor prin eliminarea vechilor moduri de a face lucrurile”.
Python 3.0 a fost dezvoltat cu aceeași filozofie ca în versiunile anterioare. Cu toate acestea, întrucât Python a acumulat modalități noi și redundante de a programa aceeași sarcină, Python 3.0 a pus accentul pe eliminarea construcțiilor și modulelor duplicate, în concordanță cu „Ar trebui să existe una - și de preferință doar una - modalitate evidentă de a o face”.
Cu toate acestea, Python 3.0 a rămas un limbaj multi-paradigmă . Codificatorii ar putea urmări în continuare paradigme de programare orientate pe obiecte , structurate și funcționale , printre altele, dar în cadrul unor alegeri atât de largi, detaliile au fost menite să fie mai evidente în Python 3.0 decât în Python 2.x.
Compatibilitate
Python 3.0 a întrerupt compatibilitatea înapoi și multe coduri Python 2 nu rulează nemodificat pe Python 3. Tastarea dinamică a Python combinată cu planurile de schimbare a semanticii anumitor metode de dicționare, de exemplu, a făcut o traducere mecanică perfectă din Python 2.x în Python 3.0 foarte dificil. Un instrument numit „2to3” face părțile de traducere care pot fi realizate automat. În acest sens, 2to3 părea destul de reușit, deși o revizuire timpurie a remarcat că există aspecte ale traducerii pe care un astfel de instrument nu le va putea gestiona niciodată. Înainte de lansarea Python 3, proiectelor care necesită compatibilitate atât cu seria 2.x cât și cu cele 3.x li s-a recomandat să aibă o singură sursă (pentru seria 2.x) și să producă versiuni pentru platforma Python 3.x folosind 2to3. Modificările aduse codului Python 3.x au fost descurajate atât timp cât codul trebuia să ruleze pe Python 2.x. Acest lucru nu mai este recomandat; începând din 2012, abordarea preferată a fost crearea unei baze de cod unice care să poată rula atât sub Python 2 cât și sub 3 folosind module de compatibilitate.
Caracteristici
Unele dintre modificările majore incluse pentru Python 3.0 au fost:
- Modificarea,
printastfel încât să fie o funcție încorporată , nu o declarație. Acest lucru a facilitat schimbarea unui modul pentru a utiliza o funcție de imprimare diferită, precum și simplificarea sintaxei. În Python 2.6 și 2.7print()este disponibil ca un program încorporat, dar este mascat de sintaxa instrucțiunii de imprimare, care poate fi dezactivată prin introducereafrom __future__ import print_functionîn partea de sus a fișierului - Eliminarea funcției Python 2
inputși redenumirearaw_inputfuncției lainput.inputFuncția Python 3 se comportă ca funcția Python 2raw_input, prin faptul că intrarea este întotdeauna returnată ca un șir, mai degrabă decât să fie evaluată ca o expresie - Mutarea
reduce(dar numapsaufilter) din spațiul de nume încorporat și înfunctools(rațiunea fiind codul care foloseștereduceeste mai puțin lizibil decât codul care folosește o variabilă pentru buclă și acumulator) - Adăugarea suportului pentru adnotări de funcții opționale care pot fi utilizate pentru declarații de tip informal sau alte scopuri
- Unificarea tipurilor
str/unicode, reprezentarea textului și introducerea unuibytestip separat imuabil ; și unbytearraytip mutabil în mare parte corespunzător , ambele reprezentând matrici de octeți - Eliminarea caracteristicilor de compatibilitate cu versiunile anterioare, inclusiv clasele de stil vechi, excepțiile șirurilor și importurile relative implicite
- O modificare a funcționalității divizării întregi : în Python 2,
5 / 2este2; în Python 3,5 / 2este2.5. (Atât în Python 2 (2.2 în continuare), cât și în Python 3, există un operator separat pentru a furniza vechiul comportament:5 // 2este2)
Lansările ulterioare din seria Python 3.x au inclus noi caracteristici suplimentare substanțiale; toată dezvoltarea continuă a limbajului se face în seria 3.x.
Tabelul versiunilor
Lansări înainte de versiunile numerotate:
- Implementarea a început - decembrie 1989
- Comunicate interne la Centrum Wiskunde & Informatica - 1990
| Versiune | Ultima versiune micro | Data de lansare | Sfârșitul sprijinului complet | Sfârșitul remedierilor de securitate |
|---|---|---|---|---|
| 0,9 | 0.9.9 | 20.02.1991 | 29.07.1993 | |
| 1.0 | 1.0.4 | 26.01.1994 | 15.02.1994 | |
| 1.1 | 1.1.1 | 1994-10-11 | 1994-11-10 | |
| 1.2 | 13.04.1995 | Neacceptat | ||
| 1.3 | 1995-10-13 | Neacceptat | ||
| 1.4 | 25-10-2006 | Neacceptat | ||
| 1.5 | 1.5.2 | 03.01.1988 | 13.04.1999 | |
| 1.6 | 1.6.1 | 05.09.2000 | 2000-09 | |
| 2.0 | 2.0.1 | 2000-10-16 | 22.06.2001 | |
| 2.1 | 2.1.3 | 15-04-2001 | 09-04-2002 | |
| 2.2 | 2.2.3 | 2001-12-21 | 30.05.2003 | |
| 2.3 | 2.3.7 | 29.06.2003 | 2008-03-11 | |
| 2.4 | 2.4.6 | 2004-11-30 | 19.12.2008 | |
| 2.5 | 2.5.6 | 19.09.2006 | 26.05.2011 | |
| 2.6 | 2.6.9 | 01.10.2008 | 24.08.2010 | 29-10-2013 |
| 2.7 | 2.7.18 | 03.07.2010 | 01.01.2020 | |
| 3.0 | 3.0.1 | 03.12.2008 | 27.06.2009 | |
| 3.1 | 3.1.5 | 27.06.2009 | 12.06.2011 | 06-04-2012 |
| 3.2 | 3.2.6 | 20.02.2011 | 2013-05-13 | 20.02.2016 |
| 3.3 | 3.3.7 | 29.09.2012 | 08.03.2014 | 29.09.2017 |
| 3.4 | 3.4.10 | 16.03.2014 | 09.08.2017 | 2019-03-18 |
| 3.5 | 3.5.10 | 13.09.2015 | 08-08-2017 | 30.09.2020 |
| 3.6 | 3.6.15 | 23.12.2016 | 24.12.2018 | 2021-12 |
| 3.7 | 3.7.12 | 27.06.2018 | 27.06.2020 | 2023-06 |
| 3.8 | 3.8.12 | 2019-10-14 | 2021-05-03 | 2024-10 |
| 3.9 | 3.9.7 | 05-10-2020 | 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 |
| Legendă: |
Versiune veche
Versiune mai veche, încă menținută
Ultima versiune
Ultima versiune de previzualizare
Lansare viitoare
|
|||
| Cursivele indică cea mai recentă versiune micro a versiunilor acceptate în prezent începând cu 2021-07-15. | ||||
Note de masă:
A sustine