История Python - History of Python
Язык программирования Python был задуман в конце 1980-х годов, а его реализация была начата в декабре 1989 года Гвидо ван Россумом из CWI в Нидерландах в качестве преемника ABC, способного обрабатывать исключения и взаимодействовать с операционной системой Amoeba . Ван Россум является основным автором Python, и его неизменная центральная роль в определении направления Python отражена в названии, присвоенном ему сообществом Python, « Доброжелательный диктатор на всю жизнь» (BDFL) . (Однако ван Россум ушел с поста лидера 12 июля 2018 г.). Python был назван в честь летающего цирка Монти Пайтона телешоу BBC .
Python 2.0 был выпущен 16 октября 2000 года с множеством основных новых функций, включая сборщик мусора с обнаружением циклов (в дополнение к подсчету ссылок ) для управления памятью и поддержку Unicode . Однако наиболее важным изменением стал сам процесс разработки с переходом к более прозрачному и поддерживаемому сообществом процессу.
Python 3.0, основной, обратно несовместимый выпуск, был выпущен 3 декабря 2008 года после длительного периода тестирования. Многие из его основных функций также были перенесены на обратно совместимые, хотя сейчас и не поддерживаемые, Python 2.6 и 2.7.
История ранних веков
В феврале 1991 года Ван Россум опубликовал код (помеченный как версия 0.9.0) в alt.sources. Уже присутствует на данном этапе развития были классы с наследованием , обработка исключений, функции и основные типы данных из list, dict, strи так далее. Также в этом первоначальном выпуске была модульная система, заимствованная из Modula-3 ; Ван Россум описывает модуль как «одну из основных программных единиц Python». Модель исключений Python также похожа на модель Modula-3 с добавлением elseпредложения. В 1994 году был сформирован comp.lang.python , основной дискуссионный форум по Python, что стало важной вехой в росте пользовательской базы Python.
Версия 1
Python достигла версии 1.0 в январе 1994 года основные новые функции , включенные в этот релиз были функциональные инструменты программирования lambda, map, filterи reduce. Ван Россум заявил, что «Python приобрел lambda, reduce (), filter () и map () благодаря любезности хакера Lisp, который пропустил их и представил рабочие патчи ».
Последней версией, выпущенной, когда Ван Россум был на CWI, был Python 1.2. В 1995 году Ван Россум продолжил свою работу над Python в Корпорации национальных исследовательских инициатив (CNRI) в Рестоне , штат Вирджиния, откуда он выпустил несколько версий.
К версии 1.4 Python получил несколько новых функций. Среди них следует отметить аргументы ключевого слова, вдохновленные Modula-3 (которые также похожи на аргументы ключевого слова Common Lisp ) и встроенную поддержку комплексных чисел . Также включена базовая форма сокрытия данных путем изменения имени , хотя это легко обойти.
Во время пребывания Ван Россума в CNRI он запустил инициативу «Компьютерное программирование для всех» (CP4E), намереваясь сделать программирование более доступным для большего числа людей, с базовой «грамотностью» в языках программирования, аналогичной базовой английской грамотности и математическим навыкам, необходимым для большинство работодателей. Python сыграл в этом центральную роль: из-за того, что он был ориентирован на чистый синтаксис, он уже был подходящим, а цели CP4E имели сходство с его предшественником, ABC. Проект финансировался DARPA . По состоянию на 2007 год проект CP4E неактивен, и хотя Python пытается быть легко обучаемым и не слишком запутанным в своем синтаксисе и семантике, работа с непрограммистами не является активной проблемой.
Быть открытым
В 2000 году команда разработчиков ядра Python переехала на BeOpen.com, чтобы сформировать команду BeOpen PythonLabs под руководством одного из первых выпускников Google Доменика Меренды. CNRI попросила выпустить версию 1.6, в которой подведены итоги разработки Python до момента, когда команда разработчиков покинула CNRI. Следовательно, графики выпуска 1.6 и 2.0 во многом совпадали. Python 2.0 был единственным выпуском от BeOpen.com. После того, как на BeOpen.com был выпущен Python 2.0, Гвидо ван Россум и другие разработчики PythonLabs присоединились к Digital Creations .
Версия Python 1.6 включала новую лицензию CNRI, которая была значительно длиннее, чем лицензия CWI, которая использовалась для более ранних версий. Новая лицензия включала в себя положение о том , что лицензия регулируется законами о штате Вирджиния . Фонд свободного программного обеспечения утверждал, что пункт о выборе закона несовместим с Стандартной общественной лицензией GNU . BeOpen, CNRI и FSF договорились об изменении лицензии на свободное программное обеспечение Python, которое сделало бы его совместимым с GPL. Python 1.6.1 по сути такой же, как Python 1.6, с несколькими исправлениями незначительных ошибок и с новой лицензией, совместимой с GPL.
Версия 2
Python 2.0, выпущенный в октябре 2000 года, представил понимание списков , функцию, заимствованную из языков функционального программирования SETL и Haskell . Синтаксис Python для этой конструкции очень похож на синтаксис Haskell, за исключением того, что Haskell предпочитает символы пунктуации и Python предпочитает буквенные ключевые слова. Python 2.0 также представил сборщик мусора, способный собирать ссылочные циклы.
Python 2.1 был близок к Python 1.6.1, а также к Python 2.0. Его лицензия была переименована в Python Software Foundation License . Весь код, документация и спецификации, добавленные со времени альфа-версии Python 2.1, принадлежат Python Software Foundation (PSF), некоммерческой организации, созданной в 2001 году по образцу Apache Software Foundation . В выпуске было внесено изменение в спецификацию языка для поддержки вложенных областей видимости, как и других языков со статической областью видимости . (Эта функция была отключена по умолчанию и не требовалась до Python 2.2.)
Python 2.2 был выпущен в декабре 2001 г .; Основным нововведением было объединение типов Python (типов, написанных на C ) и классов (типов, написанных на Python) в одну иерархию. Это единственное объединение сделало объектную модель Python чисто и последовательно объектно-ориентированной. Также были добавлены генераторы, вдохновленные Icon .
Python 2.5 был выпущен в сентябре 2006 года и представил withоператор, который включает блок кода в диспетчер контекста (например, получение блокировки перед запуском блока кода и снятие блокировки после этого или открытие файла с последующим его закрытием) , позволяя поведение , подобное получению ресурсов, как инициализация (RAII), и заменяя обычную идиому try / finally.
Python 2.6 был выпущен одновременно с Python 3.0 и включал некоторые функции из этого выпуска, а также режим «предупреждений», в котором подчеркивалось использование функций, которые были удалены в Python 3.0. Точно так же Python 2.7 совпал и включал функции из Python 3.1, который был выпущен 26 июня 2009 года. Параллельные выпуски 2.x и 3.x затем были прекращены, и Python 2.7 был последним выпуском в серии 2.x. В ноябре 2014 года было объявлено, что Python 2.7 будет поддерживаться до 2020 года, но пользователям было рекомендовано как можно скорее перейти на Python 3. Поддержка Python 2.7 закончилась 1 января 2020 года вместе с замораживанием кода ветки разработки 2.7. Финальный выпуск 2.7.18 вышел 20 апреля 2020 г. и включал исправления критических ошибок и средства блокировки выпуска. Это ознаменовало конец жизни Python 2.
Версия 3
Python 3.0 (также называемый «Python 3000» или «Py3K») был выпущен 3 декабря 2008 года. Он был разработан для исправления фундаментальных недостатков дизайна в языке - требуемые изменения не могли быть реализованы при сохранении полной обратной совместимости с 2. x, что потребовало нового номера основной версии. Руководящим принципом Python 3 было: «уменьшить дублирование функций, удалив старые способы работы».
Python 3.0 был разработан с той же философией, что и в предыдущих версиях. Однако, поскольку Python накопил новые и избыточные способы программирования одной и той же задачи, Python 3.0 сделал акцент на удалении дублирующих конструкций и модулей в соответствии с утверждением «Должен быть один - и желательно только один - очевидный способ сделать это».
Тем не менее Python 3.0 оставался языком с множеством парадигм . Программисты все еще могли следовать парадигмам объектно-ориентированного , структурированного и функционального программирования, среди прочего, но при таком широком выборе детали должны были быть более очевидными в Python 3.0, чем в Python 2.x.
Совместимость
Python 3.0 нарушил обратную совместимость, и большая часть кода Python 2 не запускается без изменений на Python 3. Динамическая типизация Python в сочетании с планами по изменению семантики некоторых методов словарей, например, сделали идеальный механический перевод с Python 2.x на Python 3.0 очень сложно. Инструмент под названием «2to3» выполняет те части перевода, которые могут выполняться автоматически. При этом 2to3 оказался довольно успешным, хотя в раннем обзоре было отмечено, что есть аспекты перевода, с которыми такой инструмент никогда не справится. До развертывания Python 3 для проектов, требующих совместимости с сериями 2.x и 3.x, рекомендовалось иметь один исходный код (для серии 2.x), а выпускать выпуски для платформы Python 3.x с использованием 2to3. Редактировать код Python 3.x не рекомендуется до тех пор, пока код должен работать на Python 2.x. Это больше не рекомендуется; с 2012 года предпочтительным подходом было создание единой базы кода, которая может работать как под Python 2, так и под Python 3 с использованием модулей совместимости.
Функции
Некоторые из основных изменений, внесенных в Python 3.0:
- Изменение
printтак, чтобы это была встроенная функция , а не инструкция. Это упростило изменение модуля для использования другой функции печати, а также сделало синтаксис более регулярным. В Python 2.6 и 2.7print()доступен как встроенный, но маскируется синтаксисом оператора печати, который можно отключить, введяfrom __future__ import print_functionв верхней части файла - Удаление функции Python 2
inputи переименованиеraw_inputфункции вinput.inputФункция Python 3 ведет себя так же, как функция Python 2raw_input, в том смысле, что ввод всегда возвращается в виде строки, а не оценивается как выражение. - Перемещение
reduce(но неmapилиfilter) из встроенного пространства имен вfunctools(обоснование - код, который используетreduce, менее читабелен, чем код, который использует цикл for и переменную аккумулятора) - Добавление поддержки дополнительных аннотаций функций, которые можно использовать для неформальных объявлений типов или других целей.
- Объединение типов
str/unicode, представление текста и введение отдельного неизменяемогоbytesтипа; и в основном соответствующий изменяемыйbytearrayтип, оба из которых представляют собой массивы байтов - Удаление функций обратной совместимости, включая классы старого стиля, строковые исключения и неявный относительный импорт
- Изменение функциональности целочисленного деления : в Python 2
5 / 2это2; в Python 35 / 2есть2.5. (Как в Python 2 (начиная с версии 2.2), так и в Python 3 существует отдельный оператор для обеспечения старого поведения:5 // 2is2)
Последующие выпуски серии Python 3.x включали дополнительные существенные новые функции; все текущее развитие языка осуществляется в серии 3.x.
Таблица версий
Выпуски до пронумерованных версий:
- Начало реализации - декабрь 1989 г.
- Внутренние релизы в Centrum Wiskunde & Informatica - 1990
| Версия | Последняя микро-версия | Дата выхода | Окончание полной поддержки | Конец исправлений безопасности |
|---|---|---|---|---|
| 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 | Неподдерживаемый | ||
| 1.3 | 1995-10-13 | Неподдерживаемый | ||
| 1.4 | 1996-10-25 | Неподдерживаемый | ||
| 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 |
| Легенда: |
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий выпуск
|
|||
| Курсивом выделена последняя микроверсия поддерживаемых в настоящее время версий по состоянию на 15.07.2021. | ||||
Примечания к таблице:
Служба поддержки