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

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

Язык программирования 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.7 print()доступен как встроенный, но маскируется синтаксисом оператора печати, который можно отключить, введя from __future__ import print_functionв верхней части файла
  • Удаление функции Python 2 inputи переименование raw_inputфункции в input. inputФункция Python 3 ведет себя так же, как функция Python 2 raw_input, в том смысле, что ввод всегда возвращается в виде строки, а не оценивается как выражение.
  • Перемещение reduce(но не mapили filter) из встроенного пространства имен в functools(обоснование - код, который использует reduce, менее читабелен, чем код, который использует цикл for и переменную аккумулятора)
  • Добавление поддержки дополнительных аннотаций функций, которые можно использовать для неформальных объявлений типов или других целей.
  • Объединение типов str/ unicode, представление текста и введение отдельного неизменяемого bytesтипа; и в основном соответствующий изменяемый bytearrayтип, оба из которых представляют собой массивы байтов
  • Удаление функций обратной совместимости, включая классы старого стиля, строковые исключения и неявный относительный импорт
  • Изменение функциональности целочисленного деления : в Python 2 5 / 2это 2; в Python 3 5 / 2есть 2.5. (Как в Python 2 (начиная с версии 2.2), так и в Python 3 существует отдельный оператор для обеспечения старого поведения: 5 // 2is 2)

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

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

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

Версия Последняя микро-версия Дата выхода Окончание полной поддержки Конец исправлений безопасности
Старая версия, больше не поддерживается: 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.

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

Служба поддержки

Image

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

использованная литература

внешние ссылки