История Python - History of Python

Старый логотип Python, 1990–2006 гг.
Новый логотип Python, 2006-настоящее время

В язык программирования Python был задуман в конце 1980-х,[1] и его реализация началась в декабре 1989 г.[2] к Гвидо ван Россум в CWI в Нидерланды как преемник ABC способен Обработка исключений и взаимодействие с Операционная система Amoeba.[3] Ван Россум - главный автор Python, и его неизменная центральная роль в определении направления развития Python отражена в титуле, присвоенном ему сообществом Python: Доброжелательный диктатор на всю жизнь (БДФЛ).[4][5] (Однако ван Россум ушел с поста лидера 12 июля 2018 г.[6]) Python был назван в честь телешоу BBC Летающий цирк Монти Пайтона.[7]

Python 2.0 был выпущен 16 октября 2000 г. с множеством важных новых функций, в том числе обнаружением циклов. уборщик мусора (в добавление к подсчет ссылок ) за управление памятью и поддержка Unicode. Однако наиболее важным изменением стал сам процесс разработки с переходом к более прозрачному и поддерживаемому сообществом процессу.[8]

Python 3.0, крупный, обратно несовместимый выпуск, был выпущен 3 декабря 2008 г.[9] после длительного периода тестирования. Многие из его основных функций также были портированный к обратно совместимым, но пока не поддерживаемым Python 2.6 и 2.7.[10]

Ранняя история

В феврале 1991 года Ван Россум опубликовал код (помеченный как версия 0.9.0) в alt.sources.[11] Уже присутствующие на данном этапе разработки были классы с наследованием, обработка исключений, функции и основные типы данных список, диктовать, ул и так далее. Также в этом первоначальном выпуске был модульная система заимствовано из Модула-3; Ван Россум описывает модуль как «одну из основных программных единиц Python».[1] Модель исключений Python также похожа на модель Modula-3 с добавлением еще пункт.[3] В 1994 г. comp.lang.python был сформирован основной дискуссионный форум для Python, что стало важной вехой в росте пользовательской базы Python.[1]

Версия 1

Python достиг версии 1.0 в январе 1994 года. Основными новыми функциями, включенными в этот выпуск, были инструменты функционального программирования. лямбда, карта, фильтр и уменьшать. Ван Россум заявил, что «Python приобрел лямбда-выражения, reduce (), filter () и map () благодаря Лисп хакер, который их пропустил и прислал рабочие патчи ".[12]

Последней версией, выпущенной, когда Ван Россум был на CWI, был Python 1.2. В 1995 году Ван Россум продолжил свою работу над Python в Корпорация национальных исследовательских инициатив (CNRI) в Отдыхай, Вирджиния откуда выпустил несколько версий.

К версии 1.4 Python получил несколько новых функций. Среди них выделяются модели Modula-3. аргументы ключевого слова (которые также похожи на Common Lisp аргументы ключевого слова) и встроенная поддержка сложные числа. Также включена базовая форма сокрытие данных к искажение имени, хотя это легко обойти.[13]

Во время пребывания Ван Россума в CNRI он запустил Компьютерное программирование для всех (CP4E), направленная на то, чтобы сделать программирование более доступным для большего числа людей, с базовой «грамотностью» в языках программирования, аналогичной базовой английской грамотности и математическим навыкам, требуемым большинством работодателей. Python сыграл в этом центральную роль: из-за его ориентации на чистый синтаксис он уже был подходящим, а цели CP4E имели сходство с его предшественником, ABC. Проект финансировался DARPA.[14] По состоянию на 2007 годпроект CP4E неактивен, и хотя Python пытается быть легко обучаемым и не слишком запутанным в своем синтаксисе и семантике, отправка электронной почты непрограммистам не является активной проблемой.[15]

Быть открытым

В 2000 году команда разработчиков ядра Python переехала в BeOpen.com[16] сформировать BeOpen PythonLabs команда под руководством одного из первых выпускников Google Доменик Меренда.[17][18] CNRI попросила выпустить версию 1.6, в которой будут обобщены результаты разработки Python до момента, когда команда разработчиков покинула CNRI. Следовательно, графики выпуска 1.6 и 2.0 в значительной степени совпадали.[8] Python 2.0 был единственным выпуском от BeOpen.com. После того, как на BeOpen.com был выпущен Python 2.0, к ним присоединились Гвидо ван Россум и другие разработчики PythonLabs. Цифровые творения.

Версия Python 1.6 включала новую лицензию CNRI, которая была значительно длиннее, чем лицензия CWI, которая использовалась для более ранних версий. В новую лицензию был включен пункт о том, что лицензия регулируется законами Штат Вирджиния. В Фонд свободного программного обеспечения утверждал, что оговорка о выборе закона несовместима с Стандартная общественная лицензия GNU. BeOpen, CNRI и FSF договорились об изменении Python лицензия на бесплатное программное обеспечение это сделало бы его совместимым с GPL. Python 1.6.1 по сути такой же, как Python 1.6, с небольшими исправлениями ошибок и с новой лицензией, совместимой с GPL.[19]

Версия 2

Python 2.0, выпущенный в октябре 2000 г.,[8] представил составить список, функция, заимствованная из функциональное программирование языки SETL и Haskell. Синтаксис Python для этой конструкции очень похож на синтаксис Haskell, за исключением того, что Haskell предпочитает символы пунктуации и Python предпочитает алфавитные ключевые слова. Python 2.0 также представил вывоз мусора система, способная собирать эталонные циклы.[8]

Python 2.1 был близок к Python 1.6.1, а также к Python 2.0. Лицензия была переименована Лицензия Python Software Foundation. Весь код, документация и спецификации, добавленные с момента альфа-версии Python 2.1, принадлежат Фонд программного обеспечения Python (PSF), некоммерческая организация, созданная в 2001 году по образцу Фонд программного обеспечения Apache.[19] Релиз включал изменение в спецификацию языка для поддержки вложенных областей, как и другие статическая область видимости языков.[20] (Эта функция была отключена по умолчанию и не требовалась до Python 2.2.)

Python 2.2 был выпущен в декабре 2001 г .;[21] Основным нововведением было объединение типов Python (типов, написанных на C) и классов (типов, написанных на Python) в одну иерархию. Это единственное объединение сделало объектную модель Python чисто и последовательно объектно-ориентированной.[22] Также добавлены были генераторы которые были вдохновлены Значок.[23]

Python 2.5 был выпущен в сентябре 2006 г. [24] и представил с оператор, который включает блок кода в диспетчере контекста (например, получение замок перед запуском блока кода и снятием блокировки после этого или открытием файл а затем закрывая его), позволяя Приобретение ресурсов - это инициализация (RAII) -подобное поведение и замена общей идиомы try / finally. [25]

Python 2.6 был выпущен одновременно с Python 3.0 и включал некоторые функции из этого выпуска, а также режим «предупреждений», который подчеркивал использование функций, которые были удалены в Python 3.0.[26][10] Точно так же Python 2.7 совпал и включал функции из Python 3.1,[27] который был выпущен 26 июня 2009 г. Параллельные выпуски 2.x и 3.x были прекращены, и Python 2.7 стал последним выпуском в серии 2.x.[28] В ноябре 2014 года было объявлено, что Python 2.7 будет поддерживаться до 2020 года, но пользователям было рекомендовано как можно скорее перейти на Python 3.[29] Поддержка Python 2.7 закончилась 1 января 2020 г. вместе с замораживание кода 2.7 ветка разработки. Последний выпуск 2.7.18 вышел 20 апреля 2020 г. и включал исправления критических ошибок и средства блокировки выпуска.[30] Это знаменует собой конец жизни из Python 2.[31]

Версия 3

Python 3.0 (также называемый «Python 3000» или «Py3K») был выпущен 3 декабря 2008 года.[9] Он был разработан для исправления фундаментальных недостатков дизайна языка - требуемые изменения не могли быть реализованы при сохранении полной обратной совместимости с серией 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 оказался довольно успешным, хотя в раннем обзоре было отмечено, что есть аспекты перевода, с которыми такой инструмент никогда не справится.[32] До развертывания Python 3 для проектов, требующих совместимости с сериями 2.x и 3.x, рекомендовалось иметь один источник (для серии 2.x), а выпускать выпуски для платформы Python 3.x с использованием 2to3. Редактировать код Python 3.x не рекомендуется до тех пор, пока код должен работать на Python 2.x.[10] Это больше не рекомендуется; с 2012 года предпочтительным подходом было создание единой базы кода, которая может работать как под Python 2, так и под Python 3 с использованием модулей совместимости.[33]

Функции

Некоторые из основных изменений, внесенных в Python 3.0:

  • Изменение Распечатать так что это встроенная функция, а не инструкция. Это упростило изменение модуля для использования другой функции печати, а также упорядочило синтаксис. В Python 2.6 и 2.7 Распечатать() доступен как встроенный, но маскируется синтаксисом оператора печати, который можно отключить, введя from __future__ import print_function вверху файла[34]
  • Удаление Python 2 Вход функция и переименование сырой ввод функция для Вход. Python 3 Вход функция ведет себя как Python 2 сырой ввод функция, в которой ввод всегда возвращается как строка, а не оценивается как выражение
  • Движущийся уменьшать (но нет карта или же фильтр) из встроенного пространства имен в functools (обоснование - это код, который использует уменьшать менее читабелен, чем код, использующий цикл for и переменную аккумулятора)[35][36]
  • Добавление поддержки дополнительных аннотаций функций, которые можно использовать для неформальные объявления типов или другие цели[37]
  • Объединение ул/юникод типы, представляющие текст, и вводящие отдельный неизменяемый байты тип; и в основном соответствующий изменяемый bytearray тип, оба из которых представляют собой массивы байты[38]
  • Удаление функций обратной совместимости, включая классы старого стиля, строковые исключения и неявный относительный импорт
  • Изменение в целочисленное деление функциональность: в Python 2, 5 / 2 является 2; в Python 3, 5 / 2 является 2.5. (Как в Python 2 (начиная с версии 2.2), так и в Python 3 существует отдельный оператор для обеспечения старого поведения: 5 // 2 является 2)

Последующие выпуски серии Python 3.x включали дополнительные существенные новые функции; все текущее развитие языка осуществляется в серии 3.x.

Таблица версий

Выпуски до нумерованных версий:

ВерсияПоследняя микро-версияДата выходаОкончание полной поддержкиКонец исправлений безопасности
0.90.9.9[2]1991-02-20[2]Старая версия, больше не поддерживается: 1993-07-29[а][2]
1.01.0.4[2]1994-01-26[2]Старая версия, больше не поддерживается: 1994-02-15[а][2]
1.11.1.1[2]1994-10-11[2]Старая версия, больше не поддерживается: 1994-11-10[а][2]
1.21995-04-13[2]Старая версия, больше не поддерживается: Не поддерживается
1.31995-10-13[2]Старая версия, больше не поддерживается: Не поддерживается
1.41996-10-25[2]Старая версия, больше не поддерживается: Не поддерживается
1.51.5.2[39]1998-01-03[2]Старая версия, больше не поддерживается: 1999-04-13[а][2]
1.61.6.1[39]2000-09-05[40]Старая версия, больше не поддерживается: 2000-09[а][39]
2.02.0.1[41]2000-10-16[42]Старая версия, больше не поддерживается: 2001-06-22[а][41]
2.12.1.3[41]2001-04-15[43]Старая версия, больше не поддерживается: 2002-04-09[а][41]
2.22.2.3[41]2001-12-21[44]Старая версия, больше не поддерживается: 2003-05-30[а][41]
2.32.3.7[41]2003-06-29[45]Старая версия, больше не поддерживается: 2008-03-11[а][41]
2.42.4.6[41]2004-11-30[46]Старая версия, больше не поддерживается: 2008-12-19[а][41]
2.52.5.6[41]2006-09-19[47]Старая версия, больше не поддерживается: 2011-05-26[а][41]
2.62.6.9[26]2008-10-01[26]Старая версия, больше не поддерживается: 2010-08-24[b][26]Старая версия, больше не поддерживается: 2013-10-29[26]
2.72.7.18[31]2010-07-03[31]Старая версия, больше не поддерживается: 2020-01-01[c][31]
3.03.0.1[41]2008-12-03[26]Старая версия, больше не поддерживается: 2009-06-27[48]
3.13.1.5[49]2009-06-27[49]Старая версия, больше не поддерживается: 2011-06-12[50]Старая версия, больше не поддерживается: 2012-06[49]
3.23.2.6[51]2011-02-20[51]Старая версия, больше не поддерживается: 2013-05-13[b][51]Старая версия, больше не поддерживается: 2016-02-20[51]
3.33.3.7[52]2012-09-29[52]Старая версия, больше не поддерживается: 2014-03-08[b][52]Старая версия, больше не поддерживается: 2017-09-29[52]
3.43.4.10[53]2014-03-16[53]Старая версия, больше не поддерживается: 2017-08-09[54]Старая версия, больше не поддерживается: 2019-03-18[а][53]
3.53.5.10[55]2015-09-13[55]Старая версия, больше не поддерживается: 2017-08-08[56]Старая версия, больше не поддерживается: 2020-09-30[55]
3.63.6.12[57]2016-12-23[57]Старая версия, больше не поддерживается: 2018-12-24[b][57]Старая версия, но все еще поддерживается: 2021-12[57]
3.73.7.9[58]2018-06-27[58]Старая версия, больше не поддерживается: 2020-06-27[b][58]Старая версия, но все еще поддерживается: 2023-06[58]
3.83.8.6[59]2019-10-14[59]Старая версия, но все еще поддерживается: 2021-04[59]Старая версия, но все еще поддерживается: 2024-10[59]
3.93.9.0[60]2020-10-05[60]Текущая стабильная версия: 2022-05[61]Текущая стабильная версия: 2025-10[60][61]
3.102021-10-25[62]Будущий выпуск: 2023-05[62]Будущий выпуск: 2026-10[62]
Легенда:
Старая версия
Старая версия, все еще поддерживается
Последняя версия
Последняя предварительная версия
Будущий выпуск
Курсив это последняя микроверсия поддерживаемых в настоящее время версий по состоянию на 2020-10-03.

Примечания к таблице:

  1. ^ а б c d е ж грамм час я j k л Дата последнего микро-релиза.
  2. ^ а б c d е Дата последнего выпуска, не связанного с безопасностью.
  3. ^ Официальная поддержка закончилась 01.01.2020, но окончательный выпуск кода, который появился 01.01.2020, 2.7.18, произошел 20.04.2020.[31]

Поддерживать

Смотрите также

Рекомендации

  1. ^ а б c «Создание Python». Разработчик Artima. Получено 22 марта, 2007.
  2. ^ а б c d е ж грамм час я j k л м п о п q ван Россум, Гвидо (20 января 2009 г.). "Краткая хронология Python". Получено 29 ноября, 2019.
  3. ^ а б «Почему вообще был создан Python?». Python FAQ. Получено 22 марта, 2007.
  4. ^ ван Россум, Гвидо (31 июля 2008 г.). «Происхождение БДФЛ». Получено 1 августа, 2008.
  5. ^ "Сценарии разработчика Python в Google". www.eweek.com. Получено 13 мая, 2008.
  6. ^ Фэирчайлд, Карли (12 июля 2018 г.). "Гвидо ван Россум уходит с должности доброжелательного диктатора Python на всю жизнь". Linux журнал. Получено 12 июля, 2018.
  7. ^ «Общие вопросы по Python - документация по Python 3.8.3». docs.python.org.
  8. ^ а б c d Kuchling, Andrew M .; Задка, Моше. «Что нового в Python 2.0». Архивировано из оригинал 14 декабря 2009 г.. Получено 22 марта, 2007.
  9. ^ а б «Добро пожаловать на Python.org». python.org. Получено 27 декабря, 2016.
  10. ^ а б c ван Россум, Гвидо (5 апреля 2006 г.). «PEP 3000 - Python 3000». Получено 27 декабря, 2016.
  11. ^ "ИСТОРИЯ". Распространение исходного кода Python. Фонд Python. Получено 23 ноября, 2017.
  12. ^ ван Россум, Гвидо. «Судьба reduce () в Python 3000». Разработчик Artima. Получено 22 марта, 2007.
  13. ^ "LJ # 37: Обновление Python 1.4". Архивировано из оригинал 1 мая 2007 г.. Получено 29 апреля, 2007.
  14. ^ ван Россум, Гвидо. «Компьютерное программирование для всех». Получено 22 марта, 2007.
  15. ^ «Компьютерное программирование для всех». Фонд программного обеспечения Python. Архивировано из оригинал 29 марта 2007 г.. Получено 22 марта, 2007.
  16. ^ https://slashdot.org/story/00/05/30/1931239/python-development-team-moves-to-beopencom
  17. ^ https://web.archive.org/web/20000815095541/http://www.beopen.com/company/team.html
  18. ^ http://joeellsworth.com/resume/references/pybiz_beopen_partnership.pdf
  19. ^ а б «История программного обеспечения». Справочник по библиотеке Python. Архивировано из оригинал 29 марта 2007 г.. Получено 22 марта, 2007.
  20. ^ Хилтон, Джереми (1 ноября 2000 г.). «PEP 227 - Статически вложенные области». Получено 22 марта, 2007.
  21. ^ <https://www.python.org/download/releases/2.2/
  22. ^ Кучлинг, Эндрю М. (21 декабря 2001 г.). «PEP 252 и 253: изменение типа и класса». Что нового в Python 2.2. Python Foundation. Архивировано из оригинал 17 сентября 2008 г.. Получено 5 сентября, 2008.
  23. ^ Шеменауэр, Нил; Питерс, Тим; Хетланд, Магнус (21 декабря 2001 г.). «PEP 255 - Простые генераторы». Получено 5 сентября, 2008.
  24. ^ «Версия Python 2.5». Python.org.
  25. ^ «Основные моменты: Python 2.5». Python.org.
  26. ^ а б c d е ж Норвиц, Нил; Варшава, Барри (29 июня 2006 г.). «PEP 361 - график выпуска Python 2.6 и 3.0». Получено 29 ноября, 2019.
  27. ^ Кучлинг, Эндрю М. (3 июля 2010 г.). «Что нового в Python 2.7». Получено 7 октября, 2012. Подобно тому, как Python 2.6 включает функции Python 3.0, версия 2.7 включает некоторые из новых функций Python 3.1. Серия 2.x продолжает предоставлять инструменты для перехода на серию 3.x.
  28. ^ Варшава, Барри (9 ноября 2011 г.). «PEP 404 - Расписание выхода Python 2.8». Получено 7 октября, 2012.
  29. ^ Джи, Сью (14 апреля 2014 г.). «Python 2.7 будет поддерживаться до 2020 года». i-programmer.info. Получено 27 декабря, 2016.
  30. ^ «Фиксирует · python / cpython на 2.7».
  31. ^ а б c d е Петерсон, Бенджамин (3 ноября 2008 г.). «PEP 373 - график выпуска Python 2.7». Получено 20 апреля, 2020.
  32. ^ Руби, Сэм; 2to3, 1 сентября 2007 г.
  33. ^ Коглан, Ник; Python 3: вопросы и ответы, 29 июня 2012 г.
  34. ^ Брандл, Георг (19 ноября 2007 г.). «PEP 3105 - Сделать печать функцией». Получено 27 декабря, 2016.
  35. ^ ван Россум, Гвидо. "Python 3000 FAQ". artima.com. Получено 27 декабря, 2016.
  36. ^ «Судьба reduce () в Python 3000». www.artima.com. Получено 31 декабря, 2019.
  37. ^ Уинтер, Коллин; Лоундс, Тони (2 декабря 2006 г.). «PEP 3107 - Функциональные аннотации». Получено 27 декабря, 2016.
  38. ^ ван Россум, Гвидо (26 сентября 2007 г.). «PEP 3137 - Неизменяемые байты и изменяемый буфер».
  39. ^ а б c "Релизы | Python.org". Получено 29 ноября, 2019.
  40. ^ Дрейк, Фред Л. младший (25 июля 2000 г.). «PEP 160 - график выпуска Python 1.6». Получено 29 ноября, 2019.
  41. ^ а б c d е ж грамм час я j k л м "Загрузить Python | Python.org". Получено 29 ноября, 2019.
  42. ^ Хилтон, Джереми. «PEP 200 - график выпуска Python 2.0». Получено 29 ноября, 2019.
  43. ^ Хилтон, Джереми (16 октября 2000 г.). «PEP 226 - график выпуска Python 2.1». Получено 29 ноября, 2019.
  44. ^ Варшава, Барри; ван Россум, Гвидо (17 апреля 2001 г.). «PEP 251 - график выпуска Python 2.2». Получено 29 ноября, 2019.
  45. ^ ван Россум, Гвидо (27 февраля 2002 г.). «PEP 283 - график выпуска Python 2.3». Получено 29 ноября, 2019.
  46. ^ Варшава, Барри; Хеттингер, Раймонд; Бакстер, Энтони (29 июля 2003 г.). «PEP 320 - график выпуска Python 2.4». Получено 29 ноября, 2019.
  47. ^ Норвиц, Нил; ван Россум, Гвидо; Бакстер, Энтони (7 февраля 2006 г.). «PEP 356 - график выпуска Python 2.5». Получено 29 ноября, 2019.
  48. ^ «17. Цикл разработки - Руководство разработчика Python». Получено 29 ноября, 2019.
  49. ^ а б c Петерсон, Бенджамин (8 февраля 2009 г.). «PEP 375 - график выпуска Python 3.1». Получено 29 ноября, 2019.
  50. ^ Петерсон, Бенджамин (12 июня 2011 г.). "[ВЫПУСКАЕТСЯ] Python 3.1.4". python-анонс (Список рассылки). Получено 29 ноября, 2019.
  51. ^ а б c d Брандл, Георг (30 декабря 2009 г.). «PEP 392 - график выпуска Python 3.2». Получено 29 ноября, 2019.
  52. ^ а б c d Брандл, Георг (23 марта 2011 г.). «PEP 398 - график выпуска Python 3.3». Получено 29 ноября, 2019.
  53. ^ а б c Гастингс, Ларри (17 октября 2012 г.). «PEP 429 - график выпуска Python 3.4». Получено 29 ноября, 2019.
  54. ^ Гастингс, Ларри (9 августа 2017 г.). «[ВЫПУСКНО] Python 3.4.7 теперь доступен». python-анонс (Список рассылки). Получено 29 ноября, 2019.
  55. ^ а б c Гастингс, Ларри (22 сентября 2014 г.). «PEP 478 - график выпуска Python 3.5». Получено 17 марта, 2020.
  56. ^ Гастингс, Ларри (8 августа 2017 г.). «[ВЫПУЩЕН] Python 3.5.4 теперь доступен». python-анонс (Список рассылки). Получено 29 ноября, 2019.
  57. ^ а б c d Дейли, Нед (30 мая 2015 г.). «PEP 494 - график выпуска Python 3.6». Получено 20 апреля, 2020.
  58. ^ а б c d Дейли, Нед (23 декабря 2016 г.). «PEP 537 - график выпуска Python 3.7». Получено 20 апреля, 2020.
  59. ^ а б c d Ланга, Лукаш (27 января 2018 г.). «PEP 569 - график выпуска Python 3.8». Получено 20 апреля, 2020.
  60. ^ а б c Ланга, Лукаш (13 октября 2020 г.). «PEP 596 - график выпуска Python 3.9». Получено 13 октября, 2020.
  61. ^ а б Ланга, Лукаш (4 июня 2019 г.). «PEP 602 - Годовой цикл выпуска для Python». Получено 29 ноября, 2019.
  62. ^ а б c Пабло, Пабло (25 мая 2020 г.). «PEP 619 - график выпуска Python 3.10». Получено 25 мая, 2020.

внешняя ссылка