Istoria Python - History of Python

Image
Sigla veche Python, anii 1990-2006
Image
Noul logo Python, 2006 – prezent

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.7 print()este disponibil ca un program încorporat, dar este mascat de sintaxa instrucțiunii de imprimare, care poate fi dezactivată prin introducerea from __future__ import print_functionîn partea de sus a fișierului
  • Eliminarea funcției Python 2 inputși redenumirea raw_inputfuncției la input. inputFuncția Python 3 se comportă ca funcția Python 2 raw_input, prin faptul că intrarea este întotdeauna returnată ca un șir, mai degrabă decât să fie evaluată ca o expresie
  • Mutarea reduce(dar nu mapsau filter) din spațiul de nume încorporat și în functools(rațiunea fiind codul care folosește reduceeste 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 unui bytestip separat imuabil ; și un bytearraytip 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 / 2este 2; în Python 3, 5 / 2este 2.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 // 2este 2)

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:

Versiune Ultima versiune micro Data de lansare Sfârșitul sprijinului complet Sfârșitul remedierilor de securitate
Versiune veche, care nu mai este menținută: 0,9 0.9.9 20.02.1991 29.07.1993
Versiune veche, care nu mai este menținută: 1.0 1.0.4 26.01.1994 15.02.1994
Versiune veche, care nu mai este menținută: 1.1 1.1.1 1994-10-11 1994-11-10
Versiune veche, care nu mai este menținută: 1.2 13.04.1995 Neacceptat
Versiune veche, care nu mai este menținută: 1.3 1995-10-13 Neacceptat
Versiune veche, care nu mai este menținută: 1.4 25-10-2006 Neacceptat
Versiune veche, care nu mai este menținută: 1.5 1.5.2 03.01.1988 13.04.1999
Versiune veche, care nu mai este menținută: 1.6 1.6.1 05.09.2000 2000-09
Versiune veche, care nu mai este menținută: 2.0 2.0.1 2000-10-16 22.06.2001
Versiune veche, care nu mai este menținută: 2.1 2.1.3 15-04-2001 09-04-2002
Versiune veche, care nu mai este menținută: 2.2 2.2.3 2001-12-21 30.05.2003
Versiune veche, care nu mai este menținută: 2.3 2.3.7 29.06.2003 2008-03-11
Versiune veche, care nu mai este menținută: 2.4 2.4.6 2004-11-30 19.12.2008
Versiune veche, care nu mai este menținută: 2.5 2.5.6 19.09.2006 26.05.2011
Versiune veche, care nu mai este menținută: 2.6 2.6.9 01.10.2008 24.08.2010 29-10-2013
Versiune veche, care nu mai este menținută: 2.7 2.7.18 03.07.2010 01.01.2020
Versiune veche, care nu mai este menținută: 3.0 3.0.1 03.12.2008 27.06.2009
Versiune veche, care nu mai este menținută: 3.1 3.1.5 27.06.2009 12.06.2011 06-04-2012
Versiune veche, care nu mai este menținută: 3.2 3.2.6 20.02.2011 2013-05-13 20.02.2016
Versiune veche, care nu mai este menținută: 3.3 3.3.7 29.09.2012 08.03.2014 29.09.2017
Versiune veche, care nu mai este menținută: 3.4 3.4.10 16.03.2014 09.08.2017 2019-03-18
Versiune veche, care nu mai este menținută: 3.5 3.5.10 13.09.2015 08-08-2017 30.09.2020
Versiune mai veche, dar încă menținută: 3.6 3.6.15 23.12.2016 24.12.2018 2021-12
Versiune mai veche, dar încă menținută: 3.7 3.7.12 27.06.2018 27.06.2020 2023-06
Versiune mai veche, dar încă menținută: 3.8 3.8.12 2019-10-14 2021-05-03 2024-10
Versiune mai veche, dar încă menținută: 3.9 3.9.7 05-10-2020 2022-05 2025-10
Versiune stabilă curentă: 3.10 3.10.0 2021-10-04 2023-05 2026-10
Lansare viitoare: 3.11 3.11.0a0 2022-10-03 2024-05 2027-10
Legendă:
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

Image

Vezi si

Referințe

linkuri externe