PyPy - PyPy

PyPy
Pypy logo.png
изначальный выпусксередина 2007 г.; 13 лет назад (2007)
Стабильный выпуск
7.3.3 / 21 ноября 2020; 12 дней назад (2020-11-21)[1]
Репозиторий Отредактируйте это в Викиданных
Написано вRPython
Операционная системаКроссплатформенность
ТипPython интерпретатор и компилятор набор инструментов
ЛицензияМассачусетский технологический институт
Интернет сайтpypy.org Отредактируйте это в Викиданных

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

Детали и мотивация

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

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

RPython

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

Проект PyPy разработал набор инструментов который анализирует код RPython и переводит его в форму байтового кода вместе с интерпретатором, написанным на C язык программирования. Большая часть этого кода затем компилируется в машинный код, и байтовый код выполняется в скомпилированном интерпретаторе.

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

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

Статус проекта

PyPy совместим с CPython 2.7.13.[10] PyPy3, выпущенный начиная с версии 2.3.1,[11] совместим с CPython 3.6.9 начиная с версии 7.2.[10] Обе версии имеют JIT-компиляция поддержка 32-бит / 64-бит x86 и 32-бит / 64-бит РУКА процессоры.[12] Он тестируется каждую ночь в Windows, Linux, OpenBSD и Mac OS X. PyPy может запускать программное обеспечение на чистом Python, которое не зависит от функций, специфичных для реализации.[13]

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

История

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

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

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

Финансирование

PyPy финансировался Евросоюз быть Конкретный целевой исследовательский проект[27] с декабря 2004 г. по март 2007 г. В июне 2008 г. PyPy объявила о финансировании в рамках Google Программы с открытым исходным кодом и согласились сосредоточиться на обеспечении большей совместимости PyPy с CPython. В 2009 году Eurostars, финансовое агентство Европейского Союза, уделяло особое внимание МСП,[28] принял предложение участников проекта PyPy под названием «PYJIT - быстрый и гибкий набор инструментов для динамических языков программирования на основе PyPy». Финансирование Eurostars длилось до августа 2011 года.[29]В PyCon США 2011 г. Фонд программного обеспечения Python предоставил PyPy грант в размере 10 000 долларов на продолжение работы над производительностью и совместимостью с новыми версиями языка.[30]Перенос на архитектуру ARM был частично спонсирован Фонд Raspberry Pi.[20]

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

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

Примечания

  1. ^ "Блог статуса PyPy". Получено 23 ноября, 2020.
  2. ^ "Интервью Мацея Фиялковски PyPy".
  3. ^ "Скорость PyPy". speed.pypy.org. Получено 2019-12-01.
  4. ^ Самуэле Педрони (март 2007 г.). «PyPy - Обзор целей и архитектуры». Архивировано из оригинал на 30.06.2012.
  5. ^ «PyPy - Обзор целей и архитектуры - Заявление о миссии». Получено 11 октября 2013.
  6. ^ Наш интерпретатор времени выполнения - «RPython», Руководство по кодированию - документация PyPy
  7. ^ «Это подходящее подмножество Python, ограниченное способом, позволяющим легко анализировать и эффективно генерировать код», Анкона и др., 2007.
  8. ^ Больц, Карл; Куни, Антонио; Фиялковски, Мацей; Риго, Армин. Трассировка мета-уровня: JIT-компилятор трассировки PyPy. ICOOOLPS '09. Дои:10.1145/1565824.1565827.
  9. ^ Тимоти Бэлридж, интервью.
  10. ^ а б «PyPy - совместимость с Python». pypy.org. Получено 2016-04-21.
  11. ^ а б команда PyPy (20 июня 2014 г.). "PyPy3 2.3.1 - точка опоры". Блог PyPy.
  12. ^ "PyPy v7.2.0: выпуск 2.7 и 3.6". pypy.org. 16 октября 2019.
  13. ^ «PyPy - совместимость с Python».
  14. ^ «Ходовые пилоны поверх PyPy».
  15. ^ "Запуск Pyglet поверх PyPy".
  16. ^ "Запуск Nevow поверх PyPy".
  17. ^ "PyPy запускает немодифицированную бета-версию django 1.0".
  18. ^ «Представляем выпуск PyPy 1.2».
  19. ^ «Выпущен PyPy 1.5: догоняет».
  20. ^ а б c Джейк Эдж (15 мая 2013 г.). "Взгляните на выпуск PyPy 2.0". LWN.net.
  21. ^ «PyPy 2.0 - сэндвич Эйнштейна».
  22. ^ «PyPy2.7 и PyPy3.5 v5.7 - два в одном выпуске».
  23. ^ "Двойной выпуск PyPy2.7 и PyPy3.5 v6.0".
  24. ^ Куни, Антонио (11.02.2019). "Блог статуса PyPy: PyPy v7.0.0: тройной выпуск 2.7, 3.5 и 3.6-альфа". Блог статуса PyPy. Получено 2020-08-17.
  25. ^ Маттип (2019-10-14). «Блог статуса PyPy: выпущен PyPy v7.2». Блог статуса PyPy. Получено 2020-08-17.
  26. ^ Маттип (24 декабря 2019). «Блог статуса PyPy: выпущен PyPy v7.3.0». Блог статуса PyPy.
  27. ^ «Вход в информационную службу Сообщества ЕС по исследованиям и разработкам».
  28. ^ "Eurostars - цель выше".
  29. ^ "Страница проекта в сети Eureka Network".
  30. ^ "Спасибо PSF".
  31. ^ «Блог статуса PyPy: Да, кстати, PyPy получает финансирование через» Eurostars"".

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

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