Pythons historie - History of Python
Den programmeringssproget Python blev udtænkt i slutningen af 1980'erne, og dens gennemførelse blev startet i december 1989 af Guido van Rossum ved CWI i Holland som en efterfølger til ABC i stand til håndtering af undtagelser og samspil med det Amoeba operativsystemet . Van Rossum er Pythons hovedforfatter, og hans fortsatte centrale rolle i beslutningen om Pythons retning afspejles i den titel, Python -samfundet, Benevolent Dictator for Life (BDFL) har givet ham . (Van Rossum trådte imidlertid tilbage som leder den 12. juli 2018.). Python blev opkaldt efter BBC -tv -programmet Monty Python's Flying Circus .
Python 2.0 blev udgivet den 16. oktober 2000 med mange store nye funktioner, herunder en cyklusdetekterende affaldssamler (ud over referencetælling ) til styring af hukommelse og understøttelse af Unicode . Den vigtigste ændring var imidlertid selve udviklingsprocessen med et skift til en mere gennemsigtig og samfundsstøttet proces.
Python 3.0, en større, bagud-inkompatibel udgivelse, blev frigivet den 3. december 2008 efter en lang periode med test. Mange af dens hovedfunktioner er også blevet backporteret til bagudkompatible, men nu ikke understøttede, Python 2.6 og 2.7.
Tidlig historie
I februar 1991 offentliggjorde Van Rossum koden (mærket version 0.9.0) til alt. Kilder. Allerede er til stede på dette stadium i udviklingen var klasser med arv , undtagelseshåndtering, funktioner og de centrale datatyper af list, dict, strog så videre. Også i denne første udgivelse var et modulsystem lånt fra Modula-3 ; Van Rossum beskriver modulet som "en af Pythons store programmeringsenheder". Pythons undtagelsesmodel ligner også Modula-3'er med tilføjelse af en elseklausul. I 1994 blev comp.lang.python , det primære diskussionsforum for Python, dannet, hvilket markerede en milepæl i væksten af Pythons brugerbase.
Version 1
Python nåede version 1.0 i januar 1994. De store nye funktioner, der indgår i denne udgivelse var de funktionelle programmeringsværktøjer lambda, map, filterog reduce. Van Rossum, at "Python erhvervet lambda, reducere (), filter () og kort (), høflighed af en Lisp hacker, der gik glip af dem og indsendte arbejder patches ".
Den sidste version, der blev frigivet, mens Van Rossum var på CWI, var Python 1.2. I 1995 fortsatte Van Rossum sit arbejde med Python hos Corporation for National Research Initiatives (CNRI) i Reston , Virginia, hvorfra han udgav flere versioner.
Ved version 1.4 havde Python erhvervet flere nye funktioner. Bemærkelsesværdig blandt disse er de Modula-3-inspirerede søgeordsargumenter (som også ligner Common Lisp 's søgeordsargumenter) og indbygget understøttelse af komplekse tal . Der er også inkluderet en grundlæggende form for data, der gemmer sig ved navnemangel , selvom dette let kan omgås.
Under Van Rossums ophold på CNRI lancerede han initiativet Computer Programming for Everybody (CP4E) med det formål at gøre programmeringen mere tilgængelig for flere mennesker med en grundlæggende "læsefærdighed" i programmeringssprog, der ligner de grundlæggende engelskkundskaber og matematikfærdigheder, der kræves af de fleste arbejdsgivere. Python spillede en central rolle i dette: på grund af sit fokus på ren syntaks var det allerede passende, og CP4Es mål bar ligheder med sin forgænger, ABC. Projektet blev finansieret af DARPA . Fra 2007 er CP4E-projektet inaktivt, og selvom Python forsøger at være let at lære og ikke for åbenlyst i sin syntaks og semantik, er opsøgende til ikke-programmører ikke en aktiv bekymring.
BeOpen
I 2000 flyttede Python -kerneudviklingsteamet til BeOpen.com for at danne BeOpen PythonLabs -teamet under ledelse af den tidlige Google -alun Domenic Merenda. CNRI anmodede om, at en version 1.6 blev frigivet, der opsummerede Pythons udvikling op til det punkt, hvor udviklingsteamet forlod CNRI. Følgelig havde udgivelsesplanerne for 1.6 og 2.0 en betydelig overlapning. Python 2.0 var den eneste udgivelse fra BeOpen.com. Efter at Python 2.0 blev frigivet af BeOpen.com sluttede Guido van Rossum og de andre PythonLabs -udviklere sig til Digital Creations .
Python 1.6 -udgivelsen inkluderede en ny CNRI -licens, der var væsentligt længere end CWI -licensen, der var blevet brugt til tidligere udgivelser. Den nye licens indeholdt en klausul om, at licensen var underlagt lovene i staten Virginia . Den Free Software Foundation hævdede, at klausulen valg-af-lov var uforenelig med GNU General Public License . BeOpen, CNRI og FSF forhandlede en ændring af Pythons gratis softwarelicens, der ville gøre den GPL-kompatibel. Python 1.6.1 er i det væsentlige det samme som Python 1.6, med et par mindre fejlrettelser og med den nye GPL-kompatible licens.
Version 2
Python 2.0, udgivet oktober 2000 indførte liste forståelser , en funktion lånt fra funktionelle programmeringssprog sprog SETL og Haskell . Pythons syntaks for denne konstruktion ligner meget Haskells, bortset fra Haskells præference for tegnsætningstegn og Pythons præference for alfabetiske søgeord. Python 2.0 introducerede også en affaldssamler, der er i stand til at indsamle referencecyklusser.
Python 2.1 var tæt på Python 1.6.1, samt Python 2.0. Licensen blev omdøbt til Python Software Foundation License . Al kode, dokumentation og specifikationer tilføjet fra tidspunktet for Python 2.1s alfa-udgivelse den ejes af Python Software Foundation (PSF), en non-profit organisation, der blev dannet i 2001, modelleret efter Apache Software Foundation . Udgivelsen omfattede en ændring af sprogspecifikationen for at understøtte indlejrede omfang, ligesom andre statisk anvendte sprog. (Funktionen blev som standard slået fra og ikke påkrævet før Python 2.2.)
Python 2.2 blev frigivet i december 2001; en stor nyskabelse var foreningen af Pythons typer (typer skrevet i C ) og klasser (typer skrevet i Python) i ét hierarki. Denne enkelt forening gjorde Pythons objektmodel rent og konsekvent objektorienteret. Der blev også tilføjet generatorer, der var inspireret af Icon .
Python 2.5 blev frigivet i september 2006 og introducerede witherklæringen, som omslutter en kodeblok i en konteksthåndterer (f.eks. Erhverver en lås, før kodeblokken køres og frigiver låsen bagefter, eller åbner en fil og derefter lukker den) , så Resource Acquisition Is Initialization (RAII) -lignende adfærd tillades og erstatte et almindeligt forsøg/endelig formsprog.
Python 2.6 blev frigivet til at falde sammen med Python 3.0 og inkluderede nogle funktioner fra denne udgivelse samt en "advarsels" -tilstand, der fremhævede brugen af funktioner, der blev fjernet i Python 3.0. Tilsvarende faldt Python 2.7 sammen med og inkluderede funktioner fra Python 3.1, som blev udgivet den 26. juni 2009. Parallelle 2.x og 3.x udgivelser ophørte derefter, og Python 2.7 var den sidste udgivelse i 2.x serien. I november 2014 blev det annonceret, at Python 2.7 ville blive understøttet frem til 2020, men brugere blev opfordret til at flytte til Python 3 så hurtigt som muligt. Python 2.7 -support sluttede den 1. januar 2020 sammen med kodefrysning af 2,7 udviklingsgren. En endelig udgivelse, 2.7.18, fandt sted den 20. april 2020 og omfattede rettelser til kritiske fejl og frigivelsesblokkere. Dette markerede afslutningen på Python 2's levetid .
Version 3
Python 3.0 (også kaldet "Python 3000" eller "Py3K") blev udgivet den 3. december 2008. Det var designet til at udbedre grundlæggende designfejl i sproget - de nødvendige ændringer kunne ikke implementeres, mens der blev bevaret fuld bagudkompatibilitet med 2. x -serien, hvilket nødvendiggjorde et nyt større versionsnummer. Det vejledende princip for Python 3 var: "reducer funktionens dobbeltarbejde ved at fjerne gamle måder at gøre tingene".
Python 3.0 blev udviklet med den samme filosofi som i tidligere versioner. Da Python imidlertid havde akkumuleret nye og overflødige måder at programmere den samme opgave på, havde Python 3.0 vægt på at fjerne duplikative konstruktioner og moduler i overensstemmelse med "Der burde være en - og helst kun én - tydelig måde at gøre det på".
Ikke desto mindre forblev Python 3.0 et sprog med flere paradigmer . Kodere kunne stadig blandt andet følge objektorienterede , strukturerede og funktionelle programmeringsparadigmer, men inden for så brede valg var detaljerne tiltænkt at være mere indlysende i Python 3.0, end de var i Python 2.x.
Kompatibilitet
Python 3.0 brød bagudkompatibilitet, og meget Python 2 -kode kører ikke uændret på Python 3. Pythons dynamiske typning kombineret med planerne om at ændre semantikken i visse metoder i ordbøger, for eksempel, lavede perfekt mekanisk oversættelse fra Python 2.x til Python 3.0 meget svært. Et værktøj kaldet "2to3" udfører de dele af oversættelsen, der kan udføres automatisk. På dette syntes 2to3 at være temmelig vellykket, selvom en tidlig anmeldelse bemærkede, at der var aspekter af oversættelse, som et sådant værktøj aldrig ville kunne håndtere. Inden udrulningen af Python 3 blev projekter, der kræver kompatibilitet med både 2.x og 3.x-serien, anbefalet at have én kilde (til 2.x-serien) og producere udgivelser til Python 3.x-platformen ved hjælp af 2 til 3. Redigeringer af Python 3.x -koden blev frarådet, så længe koden var nødvendig for at køre på Python 2.x. Dette kan ikke længere anbefales; fra 2012 var den foretrukne tilgang at oprette en enkelt kodebase, der kan køre under både Python 2 og 3 ved hjælp af kompatibilitetsmoduler.
Funktioner
Nogle af de store ændringer inkluderet for Python 3.0 var:
- Ændrer sig,
printså det er en indbygget funktion , ikke en erklæring. Dette gjorde det lettere at ændre et modul for at bruge en anden udskrivningsfunktion samt gøre syntaksen mere regelmæssig. I Python 2.6 og 2.7print()er tilgængelig som en indbygget, men maskeres af udskriftssætningssyntaksen, som kan deaktiveres ved at indtastefrom __future__ import print_functionøverst i filen - Fjernelse af Python 2
input-funktionen og omdøbning afraw_inputfunktionen tilinput. Python 3'sinputfunktion opfører sig som Python 2'sraw_inputfunktion, idet input altid returneres som en streng frem for at blive evalueret som et udtryk - Bevægelse
reduce(men ikkemapellerfilter) ud af det indbyggede navnerum og ind ifunctools(begrundelsen for at kode, der bruger,reduceer mindre læsbar end kode, der bruger en for loop og akkumulatorvariabel) - Tilføjelse af understøttelse af valgfrie funktionsannoteringer, der kan bruges til uformelle typedeklarationer eller andre formål
- Samling af
str/unicodetyperne, repræsentation af tekst og indførelse af en separat uforanderligbytestype; og en for det meste tilsvarende mutablebytearraytype, som begge repræsenterer arrays af bytes - Fjernelse af bagudkompatibilitetsfunktioner, herunder klasser i gammel stil, strengundtagelser og implicit relativ import
- En ændring i heltal division funktionalitet: i Python 2,
5 / 2er2; i Python 3,5 / 2er2.5. (I både Python 2 (2.2 og fremefter) og Python 3 eksisterer der en separat operator for at give den gamle adfærd:5 // 2is2)
Efterfølgende udgivelser i Python 3.x -serien har inkluderet yderligere, betydelige nye funktioner; al løbende udvikling af sproget sker i 3.x -serien.
Tabel med versioner
Udgivelser før nummererede versioner:
- Implementeringen startede - december 1989
- Interne udgivelser hos Centrum Wiskunde & Informatica - 1990
| Version | Seneste mikro version | Udgivelses dato | Slut på fuld support | Slut på sikkerhedsrettelser |
|---|---|---|---|---|
| 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 | Ikke understøttet | ||
| 1.3 | 1995-10-13 | Ikke understøttet | ||
| 1.4 | 1996-10-25 | Ikke understøttet | ||
| 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 |
| Legende: |
Gammel version
Ældre version, stadig vedligeholdt
Nyeste version
Seneste eksempelversion
Fremtidig udgivelse
|
|||
| Kursiv angiver den nyeste mikroversion af aktuelt understøttede versioner fra 2021-07-15. | ||||
Tabelnoter:
Support