PyPy
Первоначальный выпуск | середина 2007 года |
---|---|
Стабильная версия | 7.3.16 [1] (23 апреля 2024 г ) |
Репозиторий | |
Написано в | RPython |
Операционная система | Кросс-платформенный |
Тип | Python интерпретатора и компилятора Набор инструментов |
Лицензия | С |
Веб-сайт | пипи |
PyPy ( / ˈp aɪ ) p aɪ / — это реализация 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]
RPython
[ редактировать ]Сам интерпретатор 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]
См. также
[ редактировать ]- Начальная загрузка (компиляторы)
- Китон
- ГраальВМ
- Частичная оценка
- Психо
- Самостоятельный хостинг
- Самопереводчик
- Ненагруженная ласточка
Примечания
[ редактировать ]- ^ «Выпуск PyPy v7.3.16» .
- ^ «Интервью Мацея Фиялковского PyPy» . 29 ноября 2015 г.
- ^ «Скорость PyPy» . Speed.pypy.org . Проверено 1 декабря 2019 г.
- ^ «PEP 634 — Соответствие структурному шаблону: Спецификация» . Python.org . Проверено 15 февраля 2021 г.
- ^ Самуэле Педрони (март 2007 г.). «PyPy — обзор целей и архитектуры» . Архивировано из оригинала 14 июня 2012 г.
- ^ «PyPy – Обзор целей и архитектуры – Заявление о миссии» . Проверено 11 октября 2013 г.
- ^ Наш интерпретатор времени выполнения — «RPython» , Руководство по кодированию — документация PyPy.
- ^ «Это правильное подмножество Python, ограниченное таким образом, чтобы обеспечить простой анализ и эффективную генерацию кода», Анкона и др., 2007.
- ^ Больц, Карл; Куни, Антонио; Фиялковски, Мацей; Риго, Армин. Отслеживание метауровня: трассирующий JIT-компилятор PyPy . ICOOOLPS '09. дои : 10.1145/1565824.1565827 .
- ^ Интервью Тимоти Балриджа .
- ^ «PyPy — совместимость с Python» . pypy.org . 28 декабря 2019 года . Проверено 15 декабря 2020 г.
- ^ «PyPy v7.3.7: исправление ошибок в версиях 3.7, 3.8» . pypy.org . 25 октября 2021 г. Проверено 10 ноября 2021 г.
- ^ Jump up to: а б команда PyPy (20 июня 2014 г.). «PyPy3 2.3.1 — Точка опоры» . Блог PyPy.
- ^ «PyPy v7.2.0: выпуск 2.7 и 3.6» . pypy.org . 16 октября 2019 г.
- ^ «PyPy — совместимость с Python» . 28 декабря 2019 г.
- ^ «Запуск пилонов поверх PyPy» . 10 июня 2008 г.
- ^ «Запуск Pyglet поверх PyPy» . 20 февраля 2008 г.
- ^ «Запуск Nevow поверх PyPy» . 20 июня 2008 г.
- ^ «PyPy запускает немодифицированную бета-версию django 1.0» . 19 августа 2008 г.
- ^ «Представляем версию PyPy 1.2» . 30 апреля 2011 г.
- ^ «Выпуск PyPy 1.5: догоняем» . 12 марта 2010 г.
- ^ Jump up to: а б с Джейк Эдж (15 мая 2013 г.). «Взгляд на выпуск PyPy 2.0» . LWN.net .
- ^ «PyPy 2.0 — сэндвич Эйнштейна» . 9 мая 2013 г.
- ^ «PyPy2.7 и PyPy3.5 v5.7 — два в одном выпуске» . 21 марта 2017 г.
- ^ «Двойной выпуск PyPy2.7 и PyPy3.5 v6.0» . 26 апреля 2018 г.
- ^ Куни, Антонио (11 февраля 2019 г.). «Блог о состоянии PyPy: PyPy v7.0.0: тройной выпуск 2.7, 3.5 и 3.6-альфа» . Блог о статусе PyPy . Проверено 17 августа 2020 г.
- ^ Маттип (14 октября 2019 г.). «Блог о статусе PyPy: выпущен PyPy v7.2» . Блог о статусе PyPy . Проверено 17 августа 2020 г.
- ^ Маттип (24 декабря 2019 г.). «Блог о статусе PyPy: выпущен PyPy v7.3.0» . Блог о статусе PyPy .
- ^ «PyPy и CFFI переехали на Heptapod» . 16 февраля 2020 г.
- ^ «PyPy переехал на Git, GitHub» . 29 декабря 2023 г.
- ^ «Вход в информационную службу Сообщества ЕС по исследованиям и разработкам» .
- ^ «Евростарс – Цель выше» .
- ^ «Страница проекта в сети Eureka» . Архивировано из оригинала 3 апреля 2012 г. Проверено 17 октября 2011 г.
- ^ «Спасибо PSF» . 22 марта 2011 г.
- ^ «Блог о статусе PyPy: Да, и кстати: PyPy получает финансирование через Eurostars » . 10 декабря 2010 г.
Ссылки
[ редактировать ]- Давиде Анкона, Массимо Анкона, Антонио Куни, Николас Д. Мацакис, 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 расширяет «золотую середину» производительности » . Х. Хайнц Хайзе .
- Роуз, Джон (2 декабря 2011 г.). «День с PyPy» . Блог разработчиков Oracle .
- «Интервью Мацея Фиялковского пыпы» . Блог Decisionstats. 29 ноября 2015 г.