История языка программирования Python

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

История языка программирования Python началась в конце 1980-х. Гвидо ван Россум задумал Python в 1980-х годах[1], а приступил к его созданию в декабре 1989 года[2] в центре математики и информатики в Нидерландах. Язык Python был задуман как потомок языка программирования ABC, способный к обработке исключений и взаимодействию с операционной системой Амёба[3]. Ван Россум является основным автором Python и продолжал выполнять центральную роль в принятии решений относительно развития языка вплоть до 12 июля 2018 года[4].

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

Первая обратно-несовместимая версия Python 3.0 была выпущена 3 декабря 2008[6] года после длительного периода тестирования. Многие её функции были портированы и обратно совместимы с Python 2.6 и Python 2.7[7].

Первая публикация[править | править код]

В феврале 1991 года Гвидо ван Россум опубликовал код Python, помеченный версией 0.9.0, на alt.sources[8]. На этой стадии в нём уже присутствовали классы с наследованием, обработка исключений, функции и основные типы данных: list, dict, str и т. д.. Также в этом начальном релизе были модули, заимствованные из Modula-3. Ван Россум описывал модуль как «один из главных элементов в программировании на Python»[1]. Модель обработки исключений в Python тоже походила на Modula-3 с добавлением оператора else[3]. В 1994 году с ростом числа пользователей сформировалась группа comp.lang.python — основной форум Python[1].

Даты выпуска версий[править | править код]

Даты выпуска основных и промежуточных версий:[9][10]

  • Python 1.0 — январь 1994 года
    • Python 1.5 — 31 декабря 1997 года
    • Python 1.6 — 5 сентября 2000 года
  • Python 2.0 — 16 октября 2000 года
    • Python 2.1 — 17 апреля 2001 года
    • Python 2.2 — 21 декабря 2001 года
    • Python 2.3 — 29 июля 2003 года
    • Python 2.4 — 30 ноября 2004 года
    • Python 2.5 — 19 сентября 2006 года
    • Python 2.6 — 1 октября 2008 года
    • Python 2.7 — 3 июля 2010 года
  • Python 3.0 — 3 декабря 2008 года
    • Python 3.1 — 27 июня 2009 года
    • Python 3.2 — 20 февраля 2011 года
    • Python 3.3 — 29 сентября 2012 года
    • Python 3.4 — 16 марта 2014 года
    • Python 3.5 — 13 сентября 2015 года
    • Python 3.6 — 23 декабря 2016 года
    • Python 3.7 — 27 июня 2018 года
    • Python 3.8 — 14 октября 2019 года
    • Python 3.9 — 5 октября 2020 года
    • Python 3.10 — 4 октября 2021 года

Версия 1.0[править | править код]

Python 1.0 появился в январе 1994 года. Основными новыми возможностями, включёнными в этот релиз, были средства функционального программирования: лямбда-исчисление, map, filter и свёртка списка. Ван Россум утверждал, что «Python приобрёл lambda, reduce(), filter() и map() благодаря любителю Lisp, которому их не хватало, и он предоставил патчи, реализующие эти функции»[11].

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

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

Во время пребывания в CNRI Ван Россум запустил проект «Программирование для всех» (англ. Computer Programming for Everybody, CP4E), предназначенный сделать программирование доступным для большего числа людей, на основе получения базовой «компьютерной грамотности», подобной базовому знанию языка и математики, требуемых большинству работающих. Python играл центральную роль в этой инициативе, благодаря своей нацеленности на ясный синтаксис. Проект CP4E финансировался DARPA,[13] в данное время проект закрыт. И, хотя Python старается быть простым в изучении и не слишком магическим в синтаксисе и семантике, простота его использования не-программистами не является главной задачей[14].

Версия BeOpen[править | править код]

В 2000 году ядро команды разработчиков Python перешло в BeOpen.com, сформировав команду BeOpen PythonLab. CNRI потребовала выпустить версию 1.6, включающую всю разработку языка до момента ухода команды из корпорации. В результате графики выпуска версий 1.6 и 2.0 имели значительное перекрытие[5]. Python 2.0 был единственным релизом BeOpen.com. После него Ван Россум и остальные разработчики PythonLab присоединились к Digital Creations.

Релиз 1.6 включал новое лицензионное соглашение от CNRI, которое было значительно длиннее лицензии CWI, использовавшейся ранее. Новая лицензия включала статью, что лицензионное соглашение регулируется законами штата Вирджиния. Фонд свободного программного обеспечения (FSF) заявил, что статья о выборе правовой нормы противоречит GNU GPL. BeOpen, CNRI и FSF договорились изменить свободную лицензию Python, чтобы сделать её совместимой с GPL. Python 1.6.1 был по сути Python 1.6 с исправлением мелких ошибок и с новой GPL-совместимой лицензией[15].

Версия 2.0[править | править код]

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

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[15]. Релиз включал изменение в спецификацию языка, поддерживающее вложенные области видимости, как в языках со статической (лексической) областью видимости[16]. Эта возможность была выключена по умолчанию и не потребовалась до Python 2.2.

Главным нововведением в Python 2.2 было объединение базовых типов Python и классов, создаваемых пользователем, в одной иерархии. Это сделало Python полностью объектно-ориентированным языком[17]. Тогда же были добавлены генераторы, идея которых заимствована из Icon[18].

В ноябре 2014 было объявлено, что Python 2.7 будет поддерживаться до 2020 года, и подтверждено, что релиза 2.8 не будет, так как предполагается, что пользователи должны переходить на версию 3.4+ при первой же возможности[19].

Версия 3.0[править | править код]

Python 3.0 (называемый также «Python 3000» или «Py3K») разрабатывался с целью устранения фундаментальных изъянов в языке. Эти изменения не могли быть сделаны при условии сохранения полной обратной совместимости с 2.x версией, поэтому потребовалось изменение главного номера версии. Ведущим принципом разработки Python 3 было: «уменьшение дублирующейся функциональности устранением устаревших способов сделать это».

Возможности[править | править код]

Основные изменения, внесённые в версии 3.0[20][21][22][23]:

  • Синтаксическая возможность для аннотации параметров и результата функций (например, для передачи информации о типе или документирования).
  • Полный переход на unicode для строк.
  • Введение нового типа «неизменяемые байты» и типа «изменяемый буфер». Оба необходимы для представления бинарных данных.
  • Новая подсистема ввода-вывода (модуль io), имеющая отдельные представления для бинарных и текстовых данных.
  • Абстрактные классы, абстрактные методы (доступно уже в 2.6).
  • Иерархия типов для чисел.
  • Выражения для словарей и множеств {k: v for k, v in a_dict} и {el1, el2, el3} (по аналогии со списковыми выражениями). Эта возможность была также добавлена в Python 2.7
  • Изменения print из встроенного выражения во встроенную функцию. Это позволит модулям делать изменения, подстраиваясь под разное использование функции, а также упростит код. В Python 2.7 эта возможность активируется вводом from __future__ import print_function.
  • Перемещение reduce (но не map или filter) из встроенного пространства в модуль functools (использование reduce существенно менее читабельно по сравнению с циклом).
  • Удаление некоторых устаревших возможностей, поддерживаемых в ветке 2.x для совместимости, в частности: классы старого стиля, целочисленное деление с обрезанием результата как поведение по умолчанию, строковые исключения, неявный относительный импорт, оператор exec и т. п.
  • Реорганизация стандартной библиотеки.
  • Новый синтаксис для метаклассов.
  • Изменён синтаксис присваиваний. Стало возможным, например, присваивание a, *rest, b = range(5). С другой стороны, формальные параметры функций вроде def foo(a, (b, c)) более недопустимы.

Философия[править | править код]

Python 3.0 разрабатывался с той же философией, что и предыдущие версии. Однако, поскольку в Python скопились новые и, ставшие избыточными, старые способы решения одних и тех же задач, в Python 3.0 был сделан упор на удалении дублирующихся конструкций и модулей, следуя принципу: «должен существовать один и, желательно, только один очевидный способ сделать это».

Тем не менее, Python оставался «мультипарадигменным» языком. Программист всё ещё мог выбирать между объектно-ориентированным, структурным, функциональным программированием и другими парадигмами. Но, при таком широком выборе, особенности каждого подхода в Python 3.0 должны были быть более очевидны, чем в Python 2.x.

График выхода и совместимость[править | править код]

Python 3.0 был выпущен 3 декабря 2008 года[6]. Планировалось, что версии Python 2.x и Python 3.x будут сосуществовать параллельно на протяжении нескольких релизов. Версия 2.x, главным образом, для совместимости с существующими приложениями, и c портированием в неё некоторых возможностей 3.x[7]. Python 2.6 был выпущен как соответствующий Python 3.0 и включал ряд его возможностей, а также режим «предупреждения», в котором подсвечивалась функциональность, удалённая в 3.x[24]. Подобным же образом, Python 2.7 соответствовал и включал функциональность Python 3.1,[25] выпущенного 26 июня 2009 года. Python 2.7 был последним релизом 2.x:[26] параллельные релизы прекратились на Python 3.2.

Python 3.0 нарушил обратную совместимость. Не требовалось, чтобы код на Python 2.x выполнялся под Python 3.0 без изменений. Было сделано много принципиальных изменений, таких как превращение оператора print в функцию (так что прежнее использование оператора print будет приводить к невозможности запустить программу) и переход на Unicode для любых строк. Динамическая типизация языка вместе с планами изменить семантику некоторых методов (например, словарей) сделали очень трудной полную автоматическую трансляцию Python 2.x в Python 3.x. Однако, инструмент, названный «2to3», может выполнить основную работу по переводу с указанием мест с неоднозначностью, используя комментарии и диагностические сообщения. Даже в альфа-версии инструмент «2to3» выполнял трансляцию довольно успешно[27]. Для проектов, требующих совместимости как с 2.x, так и 3.x, разработчики Python рекомендуют поддерживать исходный текст в Python 2.x и выпускать релизы для 3.x с помощью «2to3»[7].

Изменения[править | править код]

Языки, повлиявшие на Python[править | править код]

ABC — язык программирования, разрабатываемый в Центре математики и информатики в Нидерландах при участии Гвидо Ван Россума. При разработке Python Гвидо использовал свой опыт разработки ABC.

  • Ядро Python было спроектировано так, чтобы быть легко расширяемым, ABC придерживался противоположного подхода. Гвидо говорил: «ABC была очень монолитной конструкцией <…> расширить ABC было непросто <…> У ABC не было концепции стандартной библиотеки. У него были встроенные команды, но парсер знал о них. У него были встроенные функции, которые были очень сильно интегрированы в среду выполнения. Добавить к стандартной функциональности языка было очень сложно»[1].
  • Из ABC взята идея системы отступов для группировки операторов[28][29].
  • Из ABC взята идея высокоуровневых структур данных (map)[28][29].

Также Гвидо писал, что на Python также сильно повлияла Модула-3, и назвал её «ещё одним языком с удивительной элегантностью и силой»[28].

Из C и C++ взяты некоторые синтаксические конструкции (как пишет сам Гвидо ван Россум — он использовал наиболее непротиворечивые конструкции из C, чтобы не вызвать неприязнь у C-программистов к Python)[28][29].

Ссылки[править | править код]

  1. 1 2 3 4 The Making of Python. Artima Developer. Дата обращения: 22 марта 2007.
  2. A Brief Timeline of Python. Guido van Rossum. Дата обращения: 20 января 2009.
  3. 1 2 Why was Python created in the first place?. Python FAQ. Дата обращения: 22 марта 2007.
  4. Guido van Rossum. [python-committers Transfer of power] (Thu Jul 12 10:57:35 EDT 2018). Дата обращения: 13 июля 2018.
  5. 1 2 3 A.M. Kuchling and Moshe Zadka. What's New in Python 2.0. Дата обращения: 22 марта 2007. Архивировано 14 декабря 2009 года.
  6. 1 2 Python 3.0 release
  7. 1 2 3 PEP 3000 (недоступная ссылка). Дата обращения: 28 января 2016. Архивировано 3 марта 2016 года.
  8. HISTORY (недоступная ссылка). Python source distribution. Python Foundation. Дата обращения: 21 марта 2007. Архивировано 17 февраля 2016 года.
  9. Releases | Python.org (недоступная ссылка). Дата обращения: 21 декабря 2015. Архивировано 22 декабря 2015 года.
  10. Python releases by version number
  11. Guido van Rossum. The fate of reduce() in Python 3000. Artima Developer. Дата обращения: 22 марта 2007.
  12. LJ #37: Python 1.4 Update (недоступная ссылка). Дата обращения: 29 апреля 2007. Архивировано 1 мая 2007 года.
  13. Guido van Rossum. Computer Programming for Everybody. Дата обращения: 22 марта 2007.
  14. Computer Programming for Everybody (недоступная ссылка). Python Software Foundation. Дата обращения: 22 марта 2007. Архивировано 29 марта 2007 года.
  15. 1 2 History of the software (недоступная ссылка). Python Library Reference. Дата обращения: 22 марта 2007. Архивировано 29 марта 2007 года.
  16. Jeremy Hylton. Statically Nested Scopes. Дата обращения: 22 марта 2007.
  17. A.M. Kuchling. PEPs 252 and 253: Type and Class Changes (недоступная ссылка). What's New in Python 2.2. Python Foundation (21 декабря 2001). Дата обращения: 5 сентября 2008. Архивировано 17 сентября 2008 года.
  18. A.M. Kuchling. PEP 255: Simple Generators. What's New in Python 2.2. Python Foundation (21 декабря 2001). Дата обращения: 5 сентября 2008.
  19. Python 2.7 To Be Maintained Until 2020
  20. What’s New In Python 3.0 — Python v3.0.1 documentation Архивировано 15 августа 2014 года.
  21. The Python 3.6 Tutorial
  22. Python 3 Cookbook (недоступная ссылка). Дата обращения: 2 ноября 2017. Архивировано 2 ноября 2017 года.
  23. Dive Into Python 3 (англ.). http://www.diveintopython3.net. Apress.
  24. Neal Norwitz; Barry Warsaw. PEP 361 -- Python 2.6 and 3.0 Release Schedule (29 июня 2006). Дата обращения: 7 октября 2012.
  25. A.M. Kuchling. What’s New in Python 2.7 (3 июля 2010). — «Much as Python 2.6 incorporated features from Python 3.0, version 2.7 incorporates some of the new features in Python 3.1. The 2.x series continues to provide tools for migrating to the 3.x series.». Дата обращения: 7 октября 2012.
  26. Barry Warsaw. PEP 404 -- Python 2.8 Un-release Schedule (9 ноября 2011). Дата обращения: 7 октября 2012.
  27. Sam Ruby, 2to3, September 1, 2007
  28. 1 2 3 4 Foreword for «Programming Python» (1st ed.) (англ.). Дата обращения: 7 марта 2021. Архивировано 20 января 2021 года.
  29. 1 2 3 The Making of Python (англ.) (13 января 2003). Дата обращения: 7 марта 2021. Архивировано 14 июня 2018 года.