Pythons historia - History of Python

Image
Gammal Python -logotyp, 1990–2006
Image
Ny Python -logotyp, 2006– nu

Den programmeringsspråket Python föddes i slutet av 1980, och dess genomförande inleddes i december 1989 av Guido van RossumCWI i Nederländerna som en efterföljare till ABC kan undantagshantering och samverkar med Amoeba operativsystemet . Van Rossum är Pythons huvudförfattare, och hans fortsatta centrala roll för att bestämma Pythons riktning återspeglas i titeln som Pythonsamhället gav honom, Benevolent Dictator for Life (BDFL) . (Van Rossum avgick dock som ledare den 12 juli 2018.). Python har fått sitt namn efter BBC -tv -programmet Monty Python's Flying Circus .

Python 2.0 släpptes den 16 oktober 2000 med många stora nya funktioner, inklusive en cykeldetekterande sopsamlare (förutom referensräkning ) för minneshantering och stöd för Unicode . Den viktigaste förändringen var dock själva utvecklingsprocessen, med en övergång till en mer transparent och samhällsstödd process.

Python 3.0, en stor, bakåtkompatibel version, släpptes den 3 december 2008 efter en lång testperiod. Många av dess huvudfunktioner har också backportats till bakåtkompatibla, men nu inte stödda, Python 2.6 och 2.7.

Tidig historia

I februari 1991 publicerade Van Rossum koden (märkt version 0.9.0) till alt.källor. Redan finns i detta skede utvecklingen var klasser med arv , undantagshantering, funktioner och kärndatatyper av list, dict, stroch så vidare. I den här första versionen fanns också ett modulsystem lånat från Modula-3 ; Van Rossum beskriver modulen som "en av Pythons stora programmeringsenheter". Pythons undantagsmodell liknar också Modula-3, med tillägg av en elseklausul. 1994 bildades comp.lang.python , det primära diskussionsforumet för Python, vilket markerar en milstolpe i tillväxten av Pythons användarbas.

Version 1

Python nått version 1.0 i januari 1994. De stora nya funktioner som ingår i den här versionen var funktionella programmeringsverktyg lambda, map, filteroch reduce. Van Rossum uppgav att "Python förvärvade lambda, reducera (), filter () och karta (), med tillstånd av en Lisp -hackare som missade dem och skickade in arbetslappar ".

Den senaste versionen som släpptes medan Van Rossum var på CWI var Python 1.2. 1995 fortsatte Van Rossum sitt arbete med Python vid Corporation for National Research Initiatives (CNRI) i Reston , Virginia, varifrån han släppte flera versioner.

I version 1.4 hade Python förvärvat flera nya funktioner. Anmärkningsvärda bland dessa är de Modula-3-inspirerade sökordsargumenten (som också liknar Common Lisp- sökordsargument) och inbyggt stöd för komplexa tal . Dessutom ingår en grundläggande form av data som döljer sig genom namngivning , även om detta lätt kan kringgås.

Under Van Rossums vistelse på CNRI lanserade han initiativet Computer Programming for Everybody (CP4E), i avsikt att göra programmeringen mer tillgänglig för fler människor, med en grundläggande "läskunnighet" i programmeringsspråk, liknande den grundläggande engelska läskunnighet och matematik som krävs av de flesta arbetsgivare. Python spelade en central roll i detta: på grund av dess fokus på ren syntax var den redan lämplig, och CP4E: s mål hade likheter med sin föregångare, ABC. Projektet finansierades av DARPA . Från och med 2007 är CP4E-projektet inaktivt, och även om Python försöker vara lätt att lära sig och inte är för häftigt i sin syntax och semantik, är uppsökande till icke-programmerare inte ett aktivt problem.

Var öppen

År 2000 flyttade Python -kärnutvecklingsteamet till BeOpen.com för att bilda BeOpen PythonLabs -teamet, under ledning av den tidiga Google -alumnen Domenic Merenda. CNRI begärde att en version 1.6 skulle släppas, som sammanfattar Pythons utveckling fram till den tidpunkt då utvecklingsteamet lämnade CNRI. Följaktligen hade utgivningsplanerna för 1.6 och 2.0 en betydande överlappning. Python 2.0 var den enda versionen från BeOpen.com. Efter att Python 2.0 släpptes av BeOpen.com anslöt sig Guido van Rossum och de andra PythonLabs -utvecklarna till Digital Creations .

Python 1.6 -versionen inkluderade en ny CNRI -licens som var väsentligt längre än CWI -licensen som hade använts för tidigare versioner. Den nya licensen innehöll en klausul om att licensen styrdes av lagarna i delstaten Virginia . Den Free Software Foundation hävdade att valet-of-law klausul var oförenlig med GNU General Public License . BeOpen, CNRI och FSF förhandlade fram en ändring av Pythons gratis programvarulicens som skulle göra den GPL-kompatibel. Python 1.6.1 är i huvudsak samma som Python 1.6, med några mindre buggfixar och med den nya GPL-kompatibla licensen.

Version 2

Python 2.0, släpptes oktober 2000 infördes list uppfattningar , en funktion lånad från funktionella programmeringsspråk språk Setl och Haskell . Pythons syntax för denna konstruktion är mycket lik Haskells, förutom Haskells preferens för skiljetecken och Pythons preferens för alfabetiska sökord. Python 2.0 introducerade också en sopsamlare som kan samla referenscykler.

Python 2.1 var nära Python 1.6.1, liksom Python 2.0. Licensen fick namnet Python Software Foundation License . All kod, dokumentation och specifikationer som läggs till, från tiden för Python 2.1: s alfa-release, ägs av Python Software Foundation (PSF), en ideell organisation som bildades 2001, efter modell av Apache Software Foundation . Utgåvan inkluderade en ändring av språkspecifikationen för att stödja kapslade omfattningar, liksom andra statiskt omfattande språk. (Funktionen stängdes av som standard och krävs inte förrän Python 2.2.)

Python 2.2 släpptes i december 2001; en stor nyhet var enandet av Pythons typer (typer skrivna i C ) och klasser (typer skrivna i Python) till en hierarki. Denna enda förening gjorde Pythons objektmodell rent och konsekvent objektorienterat. Dessutom tillkom generatorer som var inspirerade av Icon .

Python 2.5 släpptes i september 2006 och introducerade withuttalandet, som omsluter ett kodblock i en kontexthanterare (till exempel att skaffa ett lås innan kodblocket körs och släppa låset efteråt, eller öppna en fil och sedan stänga den) , så att Resource Acquisition Is Initialization (RAII) -liknande beteende tillåts och ersätter ett vanligt försök/slutligen-idiom.

Python 2.6 släpptes för att sammanfalla med Python 3.0 och inkluderade några funktioner från den versionen, samt ett "varnings" -läge som markerade användningen av funktioner som togs bort i Python 3.0. På samma sätt sammanföll Python 2.7 med och inkluderade funktioner från Python 3.1, som släpptes den 26 juni 2009. Parallella 2.x och 3.x -versioner upphörde sedan, och Python 2.7 var den sista versionen i 2.x -serien. I november 2014 meddelades att Python 2.7 skulle stödjas fram till 2020, men användarna uppmuntrades att flytta till Python 3 så snart som möjligt. Support för Python 2.7 slutade den 1 januari 2020, tillsammans med kodfrysning av 2,7 utvecklingsgren. En slutgiltig version, 2.7.18, inträffade den 20 april 2020 och inkluderade korrigeringar för kritiska buggar och releaseblockerare. Detta markerade slutet på Python 2.

Version 3

Python 3.0 (även kallat "Python 3000" eller "Py3K") släpptes den 3 december 2008. Den var utformad för att rätta till grundläggande designfel i språket - de nödvändiga ändringarna kunde inte genomföras samtidigt som de behåller full bakåtkompatibilitet med 2: an. x -serien, vilket krävde ett nytt större versionsnummer. Den vägledande principen för Python 3 var: "minska funktionen dubbelarbete genom att ta bort gamla sätt att göra saker".

Python 3.0 utvecklades med samma filosofi som i tidigare versioner. Eftersom Python hade samlat nya och redundanta sätt att programmera samma uppgift, hade Python 3.0 dock tyngdpunkten på att ta bort dubbla konstruktioner och moduler, i enlighet med "Det borde finnas ett - och helst bara ett - självklart sätt att göra det".

Ändå förblev Python 3.0 ett språk med flera paradigmer . Kodare kan fortfarande följa objektorienterade , strukturerade och funktionella programmeringsparadigm, bland annat, men inom så breda val var detaljerna avsedda att vara mer uppenbara i Python 3.0 än de var i Python 2.x.

Kompatibilitet

Python 3.0 bröt bakåtkompatibilitet, och mycket Python 2 -kod körs inte omodifierad på Python 3. Pythons dynamiska typning kombinerat med planerna att ändra semantik för vissa metoder i ordlistor, till exempel, gjorde perfekt mekanisk översättning från Python 2.x till Python 3.0 mycket svårt. Ett verktyg som heter "2to3" gör de delar av översättningen som kan göras automatiskt. Vid detta verkade 2to3 vara ganska framgångsrikt, även om en tidig granskning noterade att det fanns aspekter av översättning som ett sådant verktyg aldrig skulle kunna hantera. Innan lanseringen av Python 3 rekommenderades projekt som kräver kompatibilitet med både 2.x- och 3.x-serien att ha en källa (för 2.x-serien) och producera versioner för Python 3.x-plattformen med 2 till 3. Redigeringar av Python 3.x -koden avråddes så länge som koden behövs för att köra på Python 2.x. Detta rekommenderas inte längre; från 2012 var det föredragna tillvägagångssättet att skapa en enda kodbas som kan köras under både Python 2 och 3 med hjälp av kompatibilitetsmoduler.

Funktioner

Några av de stora förändringarna som inkluderades för Python 3.0 var:

  • Ändras printså att det är en inbyggd funktion , inte ett uttalande. Detta gjorde det lättare att ändra en modul för att använda en annan utskriftsfunktion, liksom att göra syntaxen mer regelbunden. I Python är 2.6 och 2.7 print()tillgängligt som inbyggt men maskeras av utskriftssyntaxen, som kan inaktiveras genom att ange from __future__ import print_functionhögst upp i filen
  • Borttagning av Python 2 input-funktionen och byte av raw_inputfunktionen till input. Python 3: s inputfunktion beter sig som Python 2: s raw_inputfunktion, genom att ingången alltid returneras som en sträng snarare än att utvärderas som ett uttryck
  • Flytta reduce(men inte mapeller filter) ut ur det inbyggda namnutrymmet och in i functools(skälet till att kod som används reduceär mindre läsbar än kod som använder en för loop och ackumulatorvariabel)
  • Lägga till stöd för valfria funktionsannoteringar som kan användas för informella typdeklarationer eller andra ändamål
  • Unifying the str/ unicodetypes, representing text, and introducing a separate immutable bytestype; och en mestadels motsvarande muterbar bytearraytyp, som båda representerar grupper med byte
  • Ta bort funktioner för bakåtkompatibilitet, inklusive klasser i gammal stil, undantag från strängar och implicit relativ import
  • En förändring i heltalsdelningsfunktionalitet : i Python 2 5 / 2är 2; i Python 3, 5 / 2är 2.5. (I både Python 2 (2.2 och framåt) och Python 3 finns en separat operatör för att tillhandahålla det gamla beteendet: 5 // 2is 2)

Efterföljande versioner i Python 3.x -serien har inkluderat ytterligare, betydande nya funktioner; all pågående utveckling av språket görs i 3.x -serien.

Tabell över versioner

Utgåvor före numrerade versioner:

Version Senaste mikroversionen Utgivningsdatum Slut på fullt stöd Slut på säkerhetsåtgärder
Gammal version, underhålls inte längre: 0,9 0.9.9 1991-02-20 1993-07-29
Gammal version, underhålls inte längre: 1.0 1.0.4 1994-01-26 1994-02-15
Gammal version, underhålls inte längre: 1.1 1.1.1 1994-10-11 1994-11-10
Gammal version, underhålls inte längre: 1.2 1995-04-13 Utan stöd
Gammal version, underhålls inte längre: 1.3 1995-10-13 Utan stöd
Gammal version, underhålls inte längre: 1.4 1996-10-25 Utan stöd
Gammal version, underhålls inte längre: 1.5 1.5.2 1998-01-03 1999-04-13
Gammal version, underhålls inte längre: 1.6 1.6.1 2000-09-05 2000-09
Gammal version, underhålls inte längre: 2.0 2.0.1 2000-10-16 2001-06-22
Gammal version, underhålls inte längre: 2.1 2.1.3 2001-04-15 2002-04-09
Gammal version, underhålls inte längre: 2.2 2.2.3 2001-12-21 2003-05-30
Gammal version, underhålls inte längre: 2.3 2.3.7 2003-06-29 2008-03-11
Gammal version, underhålls inte längre: 2.4 2.4.6 2004-11-30 2008-12-19
Gammal version, underhålls inte längre: 2.5 2.5.6 2006-09-19 2011-05-26
Gammal version, underhålls inte längre: 2.6 2.6.9 2008-10-01 2010-08-24 2013-10-29
Gammal version, underhålls inte längre: 2.7 2.7.18 2010-07-03 2020-01-01
Gammal version, underhålls inte längre: 3.0 3.0.1 2008-12-03 2009-06-27
Gammal version, underhålls inte längre: 3.1 3.1.5 2009-06-27 2011-06-12 2012-04-06
Gammal version, underhålls inte längre: 3.2 3.2.6 2011-02-20 2013-05-13 2016-02-20
Gammal version, underhålls inte längre: 3.3 3.3.7 2012-09-29 2014-03-08 2017-09-29
Gammal version, underhålls inte längre: 3.4 3.4.10 2014-03-16 2017-08-09 2019-03-18
Gammal version, underhålls inte längre: 3.5 3.5.10 2015-09-13 2017-08-08 2020-09-30
Äldre version, men ändå underhållen: 3.6 3.6.15 2016-12-23 2018-12-24 2021-12
Äldre version, men ändå underhållen: 3.7 3.7.12 2018-06-27 2020-06-27 2023-06
Äldre version, men ändå underhållen: 3.8 3.8.12 2019-10-14 2021-05-03 2024-10
Äldre version, men ändå underhållen: 3.9 3.9.7 2020-10-05 2022-05 2025-10
Nuvarande stabil version: 3.10 3.10.0 2021-10-04 2023-05 2026-10
Framtida utgåva: 3.11 3.11.0a0 2022-10-03 2024-05 2027-10
Legend:
Legend:
Gammal version
Äldre version, fortfarande underhållen
Senaste versionen
Senaste förhandsversionen
Framtida släpp
Kursiv indikerar den senaste mikroversionen av de versioner som stöds för närvarande 2021-07-15.

Tabellanteckningar:

Stöd

Image

Se även

Referenser

externa länkar