Historia Pythona - History of Python
Język programowania Python powstał pod koniec lat 80. XX wieku, a jego implementację rozpoczął w grudniu 1989 r. Guido van Rossum w CWI w Holandii jako następca ABC, który potrafi obsługiwać wyjątki i łączyć się z systemem operacyjnym Amoeba . Van Rossum jest głównym autorem Pythona, a jego ciągła główna rola w decydowaniu o kierunku Pythona znajduje odzwierciedlenie w tytule nadanym mu przez społeczność Pythona, Benevolent Dictator for Life (BDFL) . (Jednak van Rossum ustąpił ze stanowiska lidera 12 lipca 2018 r.). Python został nazwany na cześć programu telewizyjnego BBC Latający cyrk Monty Pythona .
Python 2.0 został wydany 16 października 2000 roku i zawierał wiele ważnych nowych funkcji, w tym wykrywający cykle odśmiecania pamięci (oprócz zliczania odwołań ) do zarządzania pamięcią i obsługę Unicode . Jednak najważniejsza zmiana dotyczyła samego procesu rozwoju, z przejściem na bardziej przejrzysty i wspierany przez społeczność proces.
Python 3.0, główne, niezgodne z poprzednimi wersjami wydanie, zostało wydane 3 grudnia 2008 roku po długim okresie testowania. Wiele z jego głównych funkcji zostało również przeniesionych do kompatybilnego wstecznie, choć obecnie nieobsługiwanego, Pythona 2.6 i 2.7.
Wczesna historia
W lutym 1991 roku Van Rossum opublikował kod (oznaczony jako wersja 0.9.0) na alt.sources. Już obecne na tym etapie rozwoju były zajęcia z dziedziczenia , obsługę wyjątków, funkcji i podstawowych typów danych z list, dict, stri tak dalej. Również w tej początkowej wersji był system modułów zapożyczony z Modula-3 ; Van Rossum opisuje moduł jako „jedną z głównych jednostek programistycznych Pythona”. Model wyjątków Pythona również przypomina model Modula-3, z dodatkiem elseklauzuli. W 1994 r. powstało comp.lang.python , główne forum dyskusyjne dotyczące Pythona, wyznaczając kamień milowy w rozwoju bazy użytkowników Pythona.
Wersja 1
Python w wersji 1.0 osiągnęła w styczniu 1994. Nowe główne cechy zawarte w tej wersji były funkcjonalne narzędzia programistyczne lambda, map, filteri reduce. Van Rossum stwierdził, że "Python nabył lambda, Reduce(), filter() i map() dzięki uprzejmości hakera Lisp, który je przeoczył i przesłał działające łaty ".
Ostatnią wersją wydaną, gdy Van Rossum był na CWI, był Python 1.2. W 1995 roku Van Rossum kontynuował pracę na Python w Corporation for National Research Initiatives (CNRI) w Reston , Virginia skąd wydał kilka wersji.
W wersji 1.4 Python zyskał kilka nowych funkcji. Wśród nich godne uwagi są argumenty słów kluczowych inspirowane Modula-3 (które są również podobne do argumentów słów kluczowych Common Lisp ) oraz wbudowana obsługa liczb zespolonych . Dołączona jest również podstawowa forma ukrywania danych przez maglowanie nazw , chociaż można to łatwo ominąć.
Podczas pobytu Van Rossuma w CNRI uruchomił inicjatywę Computer Programming for Everybody (CP4E), której celem jest uczynienie programowania bardziej dostępnym dla większej liczby osób, z podstawową „umiejętnością” w językach programowania, podobną do podstawowych umiejętności czytania i pisania w języku angielskim oraz matematyki wymaganych przez większość pracodawców. Python odegrał w tym centralną rolę: ze względu na koncentrację na czystej składni był już odpowiedni, a cele CP4E były podobne do swojego poprzednika, ABC. Projekt został sfinansowany przez DARPA . Od 2007 roku projekt CP4E jest nieaktywny i chociaż Python stara się być łatwym do nauczenia i niezbyt tajemniczy w swojej składni i semantyce, docieranie do nie-programistów nie jest aktywnym problemem.
Bądź otwarty
W 2000 r. główny zespół programistów Pythona przeniósł się do BeOpen.com, tworząc zespół BeOpen PythonLabs, pod kierownictwem wczesnego absolwenta Google, Domenica Merendy. CNRI zażądało wydania wersji 1.6, podsumowującej rozwój Pythona do momentu, w którym zespół programistów opuścił CNRI. W konsekwencji harmonogramy wydań 1.6 i 2.0 w znacznym stopniu się pokrywały. Python 2.0 był jedynym wydaniem z BeOpen.com. Po wydaniu Pythona 2.0 przez BeOpen.com, Guido van Rossum i pozostali programiści PythonLabs dołączyli do Digital Creations .
Wersja Python 1.6 zawierała nową licencję CNRI, która była znacznie dłuższa niż licencja CWI, która była używana we wcześniejszych wydaniach. Nowa licencja zawiera klauzulę stwierdzającą, że licencja została regulowane przepisami w stanie Wirginia . Fundacja Wolnego Oprogramowania argumentowała, że klauzula wyboru prawa była niezgodna z Powszechną Licencją Publiczną GNU . BeOpen, CNRI i FSF wynegocjowały zmianę w licencji wolnego oprogramowania Pythona, dzięki której będzie on kompatybilny z GPL. Python 1.6.1 jest zasadniczo taki sam jak Python 1.6, z kilkoma drobnymi poprawkami i nową licencją zgodną z GPL.
Wersja 2
Python 2.0, wydany w październiku 2000 r., wprowadził listy składane , funkcję zapożyczoną z funkcjonalnych języków programowania SETL i Haskell . Składnia Pythona dla tej konstrukcji jest bardzo podobna do składni Haskella, z wyjątkiem preferencji Haskella do znaków interpunkcyjnych i preferencji Pythona dla alfabetycznych słów kluczowych. Python 2.0 wprowadził również garbage collector, który może zbierać cykle referencyjne.
Python 2.1 był bliski Pythonowi 1.6.1, a także Pythonowi 2.0. Jego licencja została przemianowana na Python Software Foundation License . Cały dodany kod, dokumentacja i specyfikacje, od czasu wydania wersji alfa Python 2.1, są własnością Python Software Foundation (PSF), organizacji non-profit utworzonej w 2001 roku, wzorowanej na Apache Software Foundation . Wydanie zawierało zmianę specyfikacji języka w celu obsługi zakresów zagnieżdżonych, podobnie jak inne języki o zakresach statycznych . (Funkcja była domyślnie wyłączona i nie była wymagana, aż do Python 2.2.)
Python 2.2 został wydany w grudniu 2001 roku; Główną innowacją było ujednolicenie typów Pythona (typów napisanych w C ) i klas (typów napisanych w Pythonie) w jedną hierarchię. Ta pojedyncza unifikacja sprawiła, że model obiektowy Pythona jest czysto i konsekwentnie zorientowany obiektowo. Dodano także generatory inspirowane ikoną .
Python 2.5 został wydany we wrześniu 2006 roku i wprowadził withinstrukcję, która zawiera blok kodu w menedżerze kontekstu (na przykład uzyskanie blokady przed uruchomieniem bloku kodu i zwolnienie blokady później lub otwarcie pliku, a następnie zamknięcie go) , zezwalając na zachowanie podobne do inicjowania pozyskiwania zasobów (RAII) i zastępując typowy idiom try/finally.
Python 2.6 został wydany, aby zbiegać się z Pythonem 3.0 i zawierał niektóre funkcje z tego wydania, a także tryb „ostrzeżeń”, który podkreślał użycie funkcji, które zostały usunięte w Pythonie 3.0. Podobnie, Python 2.7 zbiegł się i zawierał funkcje z Pythona 3.1, który został wydany 26 czerwca 2009 roku. Równoległe wydania 2.xi 3.x następnie ustały, a Python 2.7 był ostatnim wydaniem z serii 2.x. W listopadzie 2014 roku ogłoszono, że Python 2.7 będzie wspierany do 2020 roku, ale użytkownicy byli zachęcani do jak najszybszego przejścia na Python 3. Obsługa Pythona 2.7 zakończyła się 1 stycznia 2020 r., wraz z zamrożeniem kodu gałęzi deweloperskiej 2.7. Ostateczna wersja, 2.7.18, pojawiła się 20 kwietnia 2020 roku i zawierała poprawki krytycznych błędów i blokadę wydania. To oznaczało koniec życia Pythona 2.
Wersja 3
Python 3.0 (zwany także „Python 3000” lub „Py3K”) został wydany 3 grudnia 2008 roku. Został zaprojektowany w celu naprawienia podstawowych błędów projektowych w języku — wymagane zmiany nie mogły zostać zaimplementowane przy zachowaniu pełnej wstecznej kompatybilności z wersją 2. serii x, co wymagało nowego głównego numeru wersji. Naczelną zasadą Pythona 3 było: „ograniczenie powielania funkcji poprzez usunięcie starych sposobów robienia rzeczy”.
Python 3.0 został opracowany zgodnie z tą samą filozofią, co we wcześniejszych wersjach. Ponieważ jednak Python zgromadził nowe i nadmiarowe sposoby programowania tego samego zadania, Python 3.0 kładł nacisk na usuwanie duplikujących się konstrukcji i modułów, zgodnie z zasadą „Powinna istnieć jedna – a najlepiej tylko jedna – oczywista metoda”.
Mimo to Python 3.0 pozostał językiem wieloparadygmatycznym . Programiści mogli nadal stosować między innymi zorientowane obiektowo , strukturalne i funkcjonalne paradygmaty programowania, ale w ramach tak szerokiego wyboru szczegóły miały być bardziej oczywiste w Pythonie 3.0 niż w Pythonie 2.x.
Zgodność
Python 3.0 złamał kompatybilność wsteczną, a większość kodu Pythona 2 nie działa bez modyfikacji w Pythonie 3. Dynamiczne pisanie Pythona w połączeniu z planami zmiany semantyki niektórych metod słowników, na przykład, dokonało doskonałego tłumaczenia mechanicznego z Pythona 2.x na Python 3.0 bardzo trudne. Narzędzie o nazwie „2to3” wykonuje części tłumaczenia, które można wykonać automatycznie. W tym momencie 2to3 wydawało się całkiem udane, chociaż wczesny przegląd zauważył, że istnieją aspekty tłumaczenia, których takie narzędzie nigdy nie będzie w stanie obsłużyć. Przed wypuszczeniem Pythona 3, projekty wymagające kompatybilności zarówno z serią 2.x, jak i 3.x były zalecane, aby mieć jedno źródło (dla serii 2.x) i tworzyć wydania dla platformy Python 3.x przy użyciu 2do3. Edycje w kodzie Pythona 3.x były odradzane tak długo, jak kod musiał działać w Pythonie 2.x. Nie jest to już zalecane; od 2012 roku preferowanym podejściem było stworzenie jednej bazy kodu, która może działać zarówno w Pythonie 2, jak i 3 przy użyciu modułów zgodności.
Cechy
Niektóre z głównych zmian zawartych w Pythonie 3.0 to:
- Zmiana
printtak, aby była funkcją wbudowaną , a nie instrukcją. Ułatwiło to zmianę modułu w celu użycia innej funkcji drukowania, a także sprawiło, że składnia była bardziej regularna. W Pythonie 2.6 i 2.7print()są dostępne jako wbudowane, ale są maskowane przez składnię instrukcji print, którą można wyłączyć, wpisującfrom __future__ import print_functionna górze pliku - Usunięcie funkcji Pythona 2
inputi zmiana nazwyraw_inputfunkcji nainput.inputFunkcja Pythona 3 zachowuje się jak funkcja Pythona 2raw_input, ponieważ dane wejściowe są zawsze zwracane jako ciąg znaków, a nie są oceniane jako wyrażenie - Przejście
reduce(ale niemaplubfilter) poza wbudowaną przestrzeń nazw i dofunctoolsśrodka (powodem jest to, że kod, który używa,reducejest mniej czytelny niż kod, który używa pętli for i zmiennej akumulatorowej) - Dodanie obsługi opcjonalnych adnotacji funkcji, które można wykorzystać do nieformalnych deklaracji typu lub do innych celów
- Ujednolicenie
str/unicodetypów, reprezentowanie tekstu i wprowadzenie oddzielnego niezmiennegobytestypu; i w większości odpowiadający mu zmiennybytearraytyp, z których oba reprezentują tablice bajtów - Usuwanie funkcji zgodności wstecznej, w tym klas w starym stylu, wyjątków ciągów i niejawnych importów względnych
- Zmiana w funkcjonalności dzielenia liczb całkowitych : w Pythonie 2
5 / 2jest2; w Pythonie 35 / 2jest2.5. (Zarówno w Pythonie 2 (od 2.2) jak i Pythonie 3 istnieje osobny operator zapewniający stare zachowanie:5 // 2is2)
Kolejne wydania w serii Python 3.x zawierały dodatkowe, istotne nowe funkcje; cały bieżący rozwój języka odbywa się w serii 3.x.
Tabela wersji
Wydania przed wersjami numerowanymi:
- Rozpoczęcie realizacji - grudzień 1989
- Publikacje wewnętrzne w Centrum Wiskunde & Informatica - 1990
| Wersja | Najnowsza wersja mikro | Data wydania | Koniec pełnego wsparcia | Koniec poprawek bezpieczeństwa |
|---|---|---|---|---|
| 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 | Nieobsługiwane | ||
| 1,3 | 1995-10-13 | Nieobsługiwane | ||
| 1,4 | 1996-10-25 | Nieobsługiwane | ||
| 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 | 2020-01-01 | |
| 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 |
| Legenda: |
Stara wersja
Starsza wersja, nadal utrzymywana
Ostatnia wersja
Najnowsza wersja zapoznawcza
Przyszłe wydanie
|
|||
| Kursywa wskazuje najnowszą mikrowersję aktualnie obsługiwanych wersji na dzień 2021-07-15. | ||||
Uwagi do tabeli:
Wsparcie