Jump to content

PyPy

(Перенаправлено с RPython )
Первоначальный выпуск середина 2007 года ; 17 лет назад ( 2007 )
Стабильная версия
7.3.16 [1]  Отредактируйте это в Викиданных (23 апреля 2024 г .; 3 месяца назад ( 23 апреля 2024 г. ) )
Репозиторий
Написано в RPython
Операционная система Кросс-платформенный
Тип Python интерпретатора и компилятора Набор инструментов
Лицензия С
Веб-сайт пипи .org  Edit this on Wikidata

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

Сам PyPy построен с использованием метода, известного как мета-трассировка, который представляет собой в основном автоматическое преобразование, которое принимает интерпретатор в качестве входных данных и создает компилятор трассировки «точно в срок» в качестве выходных данных. Поскольку интерпретаторы обычно легче писать, чем компиляторы , но они работают медленнее, этот метод может облегчить создание эффективных реализаций языков программирования. мета-трассировки PyPy Инструментальная цепочка называется RPython .

PyPy не имеет полной совместимости с более поздними версиями экосистемы CPython. Хотя он заявляет о совместимости с Python 2.7, 3.7, 3.8 и 3.9 («замена CPython»), в нем отсутствуют некоторые новые функции и синтаксис Python 3.10, такие как синтаксис для сопоставления с образцом . [4]

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

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

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

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

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

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

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

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

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

PyPy версии 7.3.7 совместим с тремя версиями CPython : 2.7, 3.7 и 3.8. [11] [12] Первой версией PyPy, совместимой с CPython v3, является PyPy v2.3.1 (2014 г.). [13] Интерпретатор PyPy, совместимый с CPython v3, также известен как PyPy3.

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

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

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

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

  • В августе 2008 года PyPy смог запустить некоторые популярные библиотеки Python, такие как Pylons , [16] Пиглет , [17] Невов [18] и Джанго . [19]
  • 12 марта 2010 года был выпущен PyPy 1.2, ориентированный на скорость. Он включал работающий, хотя и не стабильный, компилятор «точно в срок». [20]
  • 30 апреля 2011 года была выпущена версия PyPy 1.5, которая достигла совместимости с CPython 2.7. [21]
  • 9 мая 2013 года был выпущен PyPy 2.0, в котором появилась поддержка альфа-качества для JIT-компиляции на ARMv6 и ARMv7 JIT, а также включен CFFI в стандартную библиотеку. [22] [23]
  • 20 июня 2014 года PyPy3 был объявлен стабильным. [13] и введена совместимость с более современным Python 3. Он был выпущен вместе с PyPy 2.3.1 и имеет тот же номер версии.
  • 21 марта 2017 года проект PyPy выпустил версии 5.7 как PyPy, так и PyPy3, причем последняя представила поддержку бета-качества для Python 3.5. [24]
  • 26 апреля 2018 года была выпущена версия 6.0 с поддержкой Python 2.7 и 3.5 (все еще бета-версия для Windows). [25]
  • 11 февраля 2019 года была выпущена версия 7.0 с поддержкой Python 2.7 и 3.5. [26]
  • 14 октября 2019 года была выпущена версия 7.2 с поддержкой Python 3.6.9. [27]
  • 24 декабря 2019 года была выпущена версия 7.3 с поддержкой Python 3.6.9. [28]
  • 16 февраля 2020 года команда PyPy объявила о переносе хостинга исходного кода с Bitbucket на heptapod.net с репозиториями проекта CFFI (C Foreign Function Interface ). Также опубликованы новый логотип и дизайн сайта. Однако автор и лицензия нового логотипа неизвестны. [29]
  • 29 декабря 2023 года PyPy объявил, что хостинг перешел на GitHub , и теперь разработка будет отслеживаться с помощью git . [30]

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

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

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

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

См. также

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

Примечания

[ редактировать ]
  1. ^ «Выпуск PyPy v7.3.16» .
  2. ^ «Интервью Мацея Фиялковского PyPy» . 29 ноября 2015 г.
  3. ^ «Скорость PyPy» . Speed.pypy.org . Проверено 1 декабря 2019 г.
  4. ^ «PEP 634 — Соответствие структурному шаблону: Спецификация» . Python.org . Проверено 15 февраля 2021 г.
  5. ^ Самуэле Педрони (март 2007 г.). «PyPy — обзор целей и архитектуры» . Архивировано из оригинала 14 июня 2012 г.
  6. ^ «PyPy – Обзор целей и архитектуры – Заявление о миссии» . Проверено 11 октября 2013 г.
  7. ^ Наш интерпретатор времени выполнения — «RPython» , Руководство по кодированию — документация PyPy.
  8. ^ «Это правильное подмножество Python, ограниченное таким образом, чтобы обеспечить простой анализ и эффективную генерацию кода», Анкона и др., 2007.
  9. ^ Больц, Карл; Куни, Антонио; Фиялковски, Мацей; Риго, Армин. Отслеживание метауровня: трассирующий JIT-компилятор PyPy . ICOOOLPS '09. дои : 10.1145/1565824.1565827 .
  10. ^ Интервью Тимоти Балриджа .
  11. ^ «PyPy — совместимость с Python» . pypy.org . 28 декабря 2019 года . Проверено 15 декабря 2020 г.
  12. ^ «PyPy v7.3.7: исправление ошибок в версиях 3.7, 3.8» . pypy.org . 25 октября 2021 г. Проверено 10 ноября 2021 г.
  13. ^ Jump up to: а б команда PyPy (20 июня 2014 г.). «PyPy3 2.3.1 — Точка опоры» . Блог PyPy.
  14. ^ «PyPy v7.2.0: выпуск 2.7 и 3.6» . pypy.org . 16 октября 2019 г.
  15. ^ «PyPy — совместимость с Python» . 28 декабря 2019 г.
  16. ^ «Запуск пилонов поверх PyPy» . 10 июня 2008 г.
  17. ^ «Запуск Pyglet поверх PyPy» . 20 февраля 2008 г.
  18. ^ «Запуск Nevow поверх PyPy» . 20 июня 2008 г.
  19. ^ «PyPy запускает немодифицированную бета-версию django 1.0» . 19 августа 2008 г.
  20. ^ «Представляем версию PyPy 1.2» . 30 апреля 2011 г.
  21. ^ «Выпуск PyPy 1.5: догоняем» . 12 марта 2010 г.
  22. ^ Jump up to: а б с Джейк Эдж (15 мая 2013 г.). «Взгляд на выпуск PyPy 2.0» . LWN.net .
  23. ^ «PyPy 2.0 — сэндвич Эйнштейна» . 9 мая 2013 г.
  24. ^ «PyPy2.7 и PyPy3.5 v5.7 — два в одном выпуске» . 21 марта 2017 г.
  25. ^ «Двойной выпуск PyPy2.7 и PyPy3.5 v6.0» . 26 апреля 2018 г.
  26. ^ Куни, Антонио (11 февраля 2019 г.). «Блог о состоянии PyPy: PyPy v7.0.0: тройной выпуск 2.7, 3.5 и 3.6-альфа» . Блог о статусе PyPy . Проверено 17 августа 2020 г.
  27. ^ Маттип (14 октября 2019 г.). «Блог о статусе PyPy: выпущен PyPy v7.2» . Блог о статусе PyPy . Проверено 17 августа 2020 г.
  28. ^ Маттип (24 декабря 2019 г.). «Блог о статусе PyPy: выпущен PyPy v7.3.0» . Блог о статусе PyPy .
  29. ^ «PyPy и CFFI переехали на Heptapod» . 16 февраля 2020 г.
  30. ^ «PyPy переехал на Git, GitHub» . 29 декабря 2023 г.
  31. ^ «Вход в информационную службу Сообщества ЕС по исследованиям и разработкам» .
  32. ^ «Евростарс – Цель выше» .
  33. ^ «Страница проекта в сети Eureka» . Архивировано из оригинала 3 апреля 2012 г. Проверено 17 октября 2011 г.
  34. ^ «Спасибо PSF» . 22 марта 2011 г.
  35. ^ «Блог о статусе PyPy: Да, и кстати: PyPy получает финансирование через Eurostars » . 10 декабря 2010 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f99ca0e3ee7597d905d00cad2b654c24__1717765560
URL1:https://arc.ask3.ru/arc/aa/f9/24/f99ca0e3ee7597d905d00cad2b654c24.html
Заголовок, (Title) документа по адресу, URL1:
PyPy - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)