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

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

Язык программирования Python был задуман в конце 1980 - х годов, [1] и его реализация была начата в декабре 1989 года [2] на Гвидо ван Россум в CWI в Нидерландах в качестве преемника ABC , способной обработки исключений и взаимодействующего с операционной системой Amoeba . [3] Ван Россум - главный автор Python, и его неизменная центральная роль в определении направления развития Python отражена в титуле, присвоенном ему сообществом Python, « Доброжелательный диктатор на всю жизнь» (BDFL) . [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] Уже присутствует на данном этапе развития были классы с наследованием , обработка исключений, функции и основные типы данных из list, dict, strи так далее. Также в этом первоначальном выпуске была модульная система, заимствованная из Modula-3 ; Ван Россум описывает модуль как «одну из основных программных единиц Python». [1] Модель исключений Python также похожа на модель Modula-3 с добавлением elseпредложения. [3] В 1994 году comp.lang.pythonбыл сформирован основной дискуссионный форум Python, что стало важной вехой в росте пользовательской базы Python. [1]

Версия 1 [ править ]

Python достигла версии 1.0 в январе 1994 года основные новые функции , включенные в этот релиз были функциональные инструменты программирования lambda, map, filterи reduce. Ван Россум заявил, что «Python приобрел lambda, reduce (), filter () и map () благодаря любезности хакера Lisp, который пропустил их и представил рабочие патчи». [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]

BeOpen [ править ]

В 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 присоединились к Digital Creations .

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

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

Python 2.5 был выпущен в сентябре 2006 г. [24] и представил withоператор, который включает блок кода в диспетчер контекста (например, получение блокировки перед запуском блока кода и снятие блокировки после этого или открытие файла, а затем закрывая его), позволяя получить доступ к ресурсам как инициализацию (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:

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

Таблица версий [ править ]

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

  • Начало реализации - декабрь 1989 г. [2]
  • Внутренние релизы в Centrum Wiskunde & Informatica - 1990 [2]

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

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

Поддержка [ править ]

См. Также [ править ]

  • История программной инженерии

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

  1. ^ a b c «Создание Python» . Разработчик Artima . Проверено 22 марта 2007 года .
  2. ^ a b c d e f g h i j k l m n o p q ван Россум, Гвидо (20 января 2009 г.). «Краткая хронология Python» . Проверено 29 ноября 2019 года .
  3. ^ a b "Почему вообще был создан Python?" . Python FAQ . Проверено 22 марта 2007 года .
  4. Ван Россум, Гвидо (31 июля 2008 г.). «Происхождение БДФЛ» . Проверено 1 августа 2008 года .
  5. ^ "Сценарии Python Creator Inside Google" . www.eweek.com . Проверено 13 мая 2008 года .
  6. Fairchild, Карли (12 июля 2018 г.). «Гвидо ван Россум уходит с роли великодушного диктатора Пифона на всю жизнь» . Linux Journal . Проверено 12 июля 2018 года .
  7. ^ «Общие вопросы по Python - документация по Python 3.8.3» . docs.python.org .
  8. ^ a b c d Кучлинг, Эндрю М .; Задка, Моше. «Что нового в Python 2.0» . Архивировано из оригинального 14 декабря 2009 года . Проверено 22 марта 2007 года .
  9. ^ a b «Добро пожаловать на Python.org» . python.org . Проверено 27 декабря 2016 года .
  10. ^ a b 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. ^ a b «История программного обеспечения» . Справочник по библиотеке Python . Архивировано из оригинального 29 марта 2007 года . Проверено 22 марта 2007 года .
  20. ^ Хилтона, Джереми (1 ноября 2000). «PEP 227 - Статически вложенные области видимости» . Проверено 22 марта 2007 года .
  21. ^ < https://www.python.org/download/releases/2.2/
  22. ^ Kuchling, Эндрю М. (21 декабря 2001). «PEP 252 и 253: изменение типа и класса» . Что нового в Python 2.2 . Фонд Python. Архивировано из оригинального 17 сентября 2008 года . Проверено 5 сентября 2008 года .
  23. ^ Шеменауэр, Нил; Питерс, Тим; Хетланд, Магнус (21 декабря 2001 г.). «PEP 255 - Простые генераторы» . Проверено 5 сентября 2008 года .
  24. ^ "Python 2.5 Release" . Python.org .
  25. ^ «Основные моменты: Python 2.5» . Python.org .
  26. ^ a b c d e f Норвиц, Нил; Варшава, Барри (29 июня 2006 г.). «PEP 361 - график выпуска Python 2.6 и 3.0» . Проверено 29 ноября 2019 года .
  27. ^ Kuchling, Эндрю М. (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. ^ a b c d e Петерсон, Бенджамин (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. ^ a b c "Релизы | Python.org" . Проверено 29 ноября 2019 года .
  40. Перейти ↑ Drake, Fred L., Jr. (25 июля 2000 г.). «PEP 160 - график выпуска Python 1.6» . Проверено 29 ноября 2019 года .
  41. ^ a b c d e f g h i j k l m "Загрузить 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. ^ a b c Петерсон, Бенджамин (8 февраля 2009 г.). «PEP 375 - график выпуска Python 3.1» . Проверено 29 ноября 2019 года .
  50. Петерсон, Бенджамин (12 июня 2011 г.). "[ВЫПУЩЕН] Python 3.1.4" . python-announce (Список рассылки) . Проверено 29 ноября 2019 года .
  51. ^ a b c d Брандл, Георг (30 декабря 2009 г.). «PEP 392 - график выпуска Python 3.2» . Проверено 29 ноября 2019 года .
  52. ^ a b c d Брандл, Георг (23 марта 2011 г.). «PEP 398 - график выпуска Python 3.3» . Проверено 29 ноября 2019 года .
  53. ^ a b c Гастингс, Ларри (17 октября 2012 г.). «PEP 429 - график выпуска Python 3.4» . Проверено 29 ноября 2019 года .
  54. Гастингс, Ларри (9 августа 2017 г.). «[ВЫПУСКНО] Python 3.4.7 теперь доступен» . python-announce (Список рассылки) . Проверено 29 ноября 2019 года .
  55. ^ a b c Гастингс, Ларри (22 сентября 2014 г.). «PEP 478 - график выпуска Python 3.5» . Проверено 17 марта 2020 года .
  56. Гастингс, Ларри (8 августа 2017 г.). «[ВЫПУЩЕН] Python 3.5.4 теперь доступен» . python-announce (Список рассылки) . Проверено 29 ноября 2019 года .
  57. ^ a b c d Дейли, Нед (30 мая 2015 г.). «PEP 494 - график выпуска Python 3.6» . Проверено 20 апреля 2020 года .
  58. ^ a b c d Дейли, Нед (23 декабря 2016 г.). «PEP 537 - график выпуска Python 3.7» . Проверено 20 апреля 2020 года .
  59. ^ a b c d Ланга, Лукаш (27 января 2018 г.). «PEP 569 - график выпуска Python 3.8» . Проверено 20 апреля 2020 года .
  60. ^ a b c Ланга, Лукаш (13 октября 2020 г.). «PEP 596 - график выпуска Python 3.9» . Проверено 13 октября 2020 года .
  61. ^ a b Ланга, Лукаш (4 июня 2019 г.). «PEP 602 - Годовой цикл выпуска для Python» . Проверено 29 ноября 2019 года .
  62. ^ a b c Пабло, Пабло (25 мая 2020 г.). «PEP 619 - график выпуска Python 3.10» . Проверено 25 мая 2020 года .

Внешние ссылки [ править ]

  • Блог Гвидо Ван Россума об истории Python