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

PyPy ( / р р / ) является альтернативной реализацией Python языка программирования [2] к CPython (который является стандарт реализации). PyPy часто работает быстрее, чем CPython, потому что PyPy - это своевременный компилятор, а CPython - интерпретатор . [3] Большая часть кода Python хорошо работает на PyPy, за исключением кода, который зависит от расширений CPython, которые либо не работают, либо вызывают некоторые накладные расходы при запуске в PyPy. Внутри PyPy использует технику, известную как мета-трассировка, которая преобразует интерпретатор в оперативный компилятор трассировки.. Поскольку интерпретаторы обычно легче писать, чем компиляторы, но работают медленнее, этот метод может облегчить создание эффективных реализаций языков программирования. Цепочка инструментов мета-трассировки PyPy называется RPython .

PyPy не имеет полной совместимости с экосистемой Python (по крайней мере, с его более поздними версиями): он заявляет только о совместимости с синтаксисом Python 2.7 и 3.6 и 3.7 (бета-качество, с «несколькими» [4] отсутствующими функциями); он проигрывает более новому синтаксису в Python 3.8, [5] 3.9 [6] и т. д., например, выражениям присваивания [7] и позиционным параметрам; [8] и предстоящий синтаксис Python 3.10, такой как сопоставление с образцом . [9]

Детали и мотивация [ править ]

PyPy задумывался как реализация Python, написанная на языке программирования, похожем на Python. Это упрощает определение областей, в которых его можно улучшить, и делает PyPy более гибким и легким для экспериментов, чем CPython . [ необходима цитата ]

PyPy стремится предоставить общую платформу перевода и поддержки для создания реализаций динамических языков , подчеркивая четкое разделение между спецификацией языка и аспектами реализации. Он также направлен на обеспечение совместимой, гибкой и быстрой реализации языка программирования Python с использованием вышеуказанной структуры, чтобы включить новые расширенные функции без необходимости кодировать в нее детали низкого уровня. [10] [11]

RPython [ править ]

Сам интерпретатор PyPy написан на ограниченном подмножестве Python под названием RPython (Restricted Python). [12] RPython накладывает определенные ограничения на языке Python , например , что тип переменной может быть выведенного во время компиляции. [13]

Проект PyPy разработал инструментальную цепочку, которая анализирует код RPython и переводит его в форму байтового кода, который может быть преобразован в C. Раньше были и другие серверные модули в дополнение к C: Java, CSharp и Javascript, но те, которые пострадали от битрота и были удалены. Таким образом, рекурсивный логотип PyPy - это змея, заглатывающая сама себя, поскольку RPython переводится интерпретатором Python. Код также можно запускать без перевода для тестирования и анализа, что обеспечивает хорошую тестовую площадку для исследования динамических языков.

Он позволяет использовать подключаемые сборщики мусора , а также дополнительно включать функции Stackless Python . Наконец, он включает JIT-генератор, который встраивает JIT-компилятор в интерпретатор с учетом нескольких аннотаций в исходном коде интерпретатора. Сгенерированный JIT-компилятор - это отслеживающий JIT- компилятор . [14]

RPython теперь также используется для написания реализаций на языках, отличных от Python, таких как Pixie . [15]

Статус проекта [ править ]

PyPy версии 7.3.3 совместим с тремя версиями CPython : 2.7.18, 3.6.12 и 3.7.9 (поддержка бета-качества для Python 3.7) [16] [4] Первой версией PyPy, совместимой с CPython v3, является PyPy v2. .3.1 (2014). [17] Интерпретатор PyPy, совместимый с CPython v3, также известен как PyPy3.

PyPy поддерживает JIT-компиляцию на 32-битных / 64-битных x86 и 32-битных / 64-битных процессорах ARM . [18] Он тестируется каждую ночь в Windows, Linux, OpenBSD и Mac OS X. PyPy может запускать программное обеспечение на чистом Python, которое не зависит от функций, специфичных для реализации. [19]

Для расширений CPython C API существует уровень совместимости под названием CPyExt, но он неполный и экспериментальный. Предпочтительный способ взаимодействия с разделяемыми библиотеками C - через встроенный интерфейс внешних функций C (CFFI) или библиотеки ctypes .

История [ править ]

PyPy является Followup к Psyco проекта, только по времени , специализирующегося компилятор для Python, разработанный Армин Риго между 2002 и 2010 Цель PyPy является иметь только по времени , специализирующуюся компилятор с областью, которая не была доступна для Psyco. [ требуется пояснение ] Изначально RPython также можно было скомпилировать в байт-код Java , CIL и JavaScript , но эти бэкенды были удалены из-за отсутствия интереса.

PyPy изначально был проектом, ориентированным на исследования и разработки. Достигнув зрелой стадии разработки и официального выпуска 1.0 в середине 2007 года, его следующим направлением было выпустить готовую к производству версию с большей совместимостью с CPython. Многие изменения PyPy были внесены во время спринтов кодирования .

  • В августе 2008 года PyPy смог запустить некоторые популярные библиотеки Python, такие как Pylons , [20] Pyglet , [21] Nevow [22] и Django . [23]
  • 12 марта 2010 года был выпущен PyPy 1.2, ориентированный на скорость. Он включал в себя работающий, хотя и не стабильный, своевременный компилятор. [24]
  • 30 апреля 2011 года была выпущена версия 1.5 PyPy, которая достигла совместимости с CPython 2.7. [25]
  • 9 мая 2013 года был выпущен PyPy 2.0, который представил поддержку альфа-качества для JIT-компиляции на ARMv6 и ARMv7 JIT и включил CFFI в стандартную библиотеку. [26] [27]
  • 20 июня 2014 года PyPy3 был объявлен стабильным [17] и обеспечил совместимость с более современным Python 3. Он был выпущен вместе с PyPy 2.3.1 и имеет тот же номер версии.
  • 21 марта 2017 года проект PyPy выпустил версию 5.7 как PyPy, так и PyPy3, причем последняя представляет поддержку бета-качества для Python 3.5. [28]
  • 26 апреля 2018 года была выпущена версия 6.0 с поддержкой Python 2.7 и 3.5 (все еще бета-качество в Windows). [29]
  • 11 февраля 2019 года была выпущена версия 7.0 с поддержкой Python 2.7 и 3.5. [30]
  • 14 октября 2019 года была выпущена версия 7.2 с поддержкой Python 3.6.9. [31]
  • 24 декабря 2019 года была выпущена версия 7.3 с поддержкой Python 3.6.9. [32]

Финансирование [ править ]

PyPy финансировался Европейским союзом в качестве целевого исследовательского проекта [33] в период с декабря 2004 года по март 2007 года. В июне 2008 года PyPy объявила о финансировании как часть программ Google с открытым исходным кодом и согласилась сосредоточиться на обеспечении большей совместимости PyPy с CPython. . В 2009 году Eurostars, финансирующим Европейского союза , специально ориентированных на МСП , [34] принял предложение от участников проекта PyPy титулованных «PYJIT - быстрый и гибкий инструментарий для динамических языков программирования на основе PyPy». Финансирование Eurostars длилось до августа 2011 года. [35] На PyCon US 2011, Python Software Foundationпредоставил грант в размере 10 000 долларов для PyPy, чтобы продолжить работу над производительностью и совместимостью с новыми версиями языка. [36] Перенос на архитектуру ARM частично спонсировался Raspberry Pi Foundation . [26]

Проект PyPy также принимает пожертвования через страницы своего статуса в блоге. [37] По состоянию на 2013 г. финансирование осуществлялось для различных подпроектов: совместимость с версией Python 3, встроенная оптимизированная поддержка NumPy для численных вычислений и поддержка программной транзакционной памяти для лучшего параллелизма. [26]

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

  • Начальная загрузка (компиляторы)
  • Cython
  • GraalVM
  • Частичная оценка
  • Psyco
  • Самостоятельный хостинг
  • Самостоятельный переводчик
  • Незагруженная ласточка

Заметки [ править ]

  1. ^ "Блог статуса PyPy" . Проверено 23 ноября 2020 года .
  2. ^ "Интервью Maciej Fijalkowski PyPy" .
  3. ^ "Скорость PyPy" . speed.pypy.org . Проверено 1 декабря 2019 .
  4. ^ a b «Тройной выпуск PyPy 7.3.3: python 3.7, 3.6 и 2.7» . pypy.org . Проверено 15 декабря 2020 .
  5. ^ «Что нового в Python 3.8 - документация по Python 3.9.1» . docs.python.org . Проверено 15 февраля 2021 .
  6. ^ «Что нового в Python 3.8 - документация по Python 3.9.1» . docs.python.org . Проверено 15 февраля 2021 .
  7. ^ «PEP 572 - Выражения присваивания» . Python.org . Проверено 15 февраля 2021 .
  8. ^ «PEP 570 - Параметры Python только для позиционирования» . Python.org . Проверено 15 февраля 2021 .
  9. ^ «PEP 634 - Сопоставление структурного образца: Спецификация» . Python.org . Проверено 15 февраля 2021 .
  10. ^ Samuele Педрони (март 2007). «PyPy - Обзор целей и архитектуры» . Архивировано из оригинала на 2012-06-30.
  11. ^ «PyPy - Обзор целей и архитектуры - Заявление о миссии» . Проверено 11 октября 2013 года .
  12. ^ Нашим интерпретатором времени выполнения является «RPython» , Руководство по кодированию - документация PyPy.
  13. ^ «Это правильное подмножество Python, ограниченное способом, позволяющим легко анализировать и эффективно генерировать код», Анкона и др., 2007.
  14. ^ Больц, Карл; Куни, Антонио; Фиялковски, Мацей; Риго, Армин. Трассировка мета-уровня: JIT-компилятор трассировки PyPy . ICOOOLPS '09. DOI : 10.1145 / 1565824.1565827 .
  15. ^ Тимоти Balridge интервью .
  16. ^ «PyPy - совместимость с Python» . pypy.org . Проверено 15 декабря 2020 .
  17. ^ a b команда PyPy (20 июня 2014 г.). «PyPy3 2.3.1 - точка опоры» . Блог PyPy.
  18. ^ «PyPy v7.2.0: выпуск 2.7 и 3.6» . pypy.org . 16 октября 2019.
  19. ^ «PyPy - совместимость с Python» .
  20. ^ "Запуск пилонов поверх PyPy" .
  21. ^ "Запуск Pyglet поверх PyPy" .
  22. ^ "Запуск Nevow поверх PyPy" .
  23. ^ "PyPy запускает немодифицированную бета-версию django 1.0" .
  24. ^ «Представляем выпуск PyPy 1.2» .
  25. ^ «Выпущен PyPy 1.5: догоняя» .
  26. ^ a b c Джейк Эдж (15 мая 2013 г.). «Взгляните на выпуск PyPy 2.0» . LWN.net .
  27. ^ "PyPy 2.0 - сэндвич Эйнштейна" .
  28. ^ «PyPy2.7 и PyPy3.5 v5.7 - два в одном выпуске» .
  29. ^ "Двойной выпуск PyPy2.7 и PyPy3.5 v6.0" .
  30. ^ Куни, Антонио (2019-02-11). «Блог статуса PyPy: PyPy v7.0.0: тройной выпуск 2.7, 3.5 и 3.6-альфа» . Блог статуса PyPy . Проверено 17 августа 2020 .
  31. ^ Маттип (2019-10-14). «Блог статуса PyPy: выпущен PyPy v7.2» . Блог статуса PyPy . Проверено 17 августа 2020 .
  32. ^ Маттип (2019-12-24). «Блог статуса PyPy: выпущен PyPy v7.3.0» . Блог статуса PyPy .
  33. ^ "Вход в информационную службу исследований и разработок Сообщества ЕС" .
  34. ^ "Eurostars - цель выше" .
  35. ^ "Страница проекта в сети Eureka" .
  36. ^ "Спасибо PSF" .
  37. ^ «Блог статуса PyPy: Да, и между прочим: PyPy получает финансирование через« Eurostars » » .

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

  • Давиде Анкона, Массимо Анкона, Антонио Куни, Николас Д. Мацакис, 2007. RPython: шаг к согласованию динамически и статически типизированных ОО-языков [ постоянная мертвая ссылка ] . В Proc. Симпозиум динамического языка (DLS), 2007. ACM Press.
  • Карл Фридрих Больц, Антонио Куни, Мацей Фиялковски, 2009. Трассировка мета-уровня: JIT-компилятор трассировки PyPy . В Proc. ICOOOLPS, 2009. ACM Press.
  • Корбет, Джонатан (11 мая 2011 г.). «Краткий эксперимент с PyPy» . LWN.net .
  • фон Эйцен, Крис (21 ноября 2011 г.). «PyPy 1.7 расширяет« золотую середину »производительности » . Н . Heinz Heise .
  • Роуз, Джон (2 декабря 2011 г.). «День с PyPy» . Блог разработчиков Oracle .
  • "Интервью Мацея Фиялковского пыпы" . Блог Decisionstats.

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

  • Официальный веб-сайт