PyPy - PyPy

PyPy
Pypy logo.png
Первый выпуск середина 2007 г . ; 14 лет назад ( 2007 )
Стабильный выпуск
7.3.5 / 23 мая 2021 г . ; 4 месяца назад ( 2021-05-23 )
Репозиторий
Написано в RPython
Операционная система Кроссплатформенность
Тип Python интерпретатор и компилятор набор инструментов
Лицензия Массачусетский технологический институт
Веб-сайт pypy .org Отредактируйте это в Викиданных

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

PyPy не имеет полной совместимости с более поздними версиями экосистемы CPython. При этом заявлена ​​совместимость только с синтаксисом Python 2.7 и 3.6, а также 3.7 (бета-качество, с "несколькими" отсутствующими функциями); он проигрывает новому синтаксису в Python 3.8, 3.9 и т. д., например выражениям присваивания и позиционным параметрам; и предстоящий синтаксис Python 3.10, такой как сопоставление с образцом .

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

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

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

RPython

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

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

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

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

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

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

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

Для расширений 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 , Pyglet , Nevow и Django .
  • 12 марта 2010 года был выпущен PyPy 1.2, ориентированный на скорость. Он включал в себя работающий, хотя и не стабильный, своевременный компилятор.
  • 30 апреля 2011 года была выпущена PyPy версии 1.5, которая достигла совместимости с CPython 2.7.
  • 9 мая 2013 года был выпущен PyPy 2.0, который представил поддержку альфа-качества для JIT-компиляции на ARMv6 и ARMv7 JIT и включил CFFI в стандартную библиотеку.
  • 20 июня 2014 года PyPy3 был объявлен стабильным и обеспечил совместимость с более современным Python 3. Он был выпущен вместе с PyPy 2.3.1 и имеет тот же номер версии.
  • 21 марта 2017 года проект PyPy выпустил версию 5.7 как PyPy, так и PyPy3, причем последняя представляет поддержку бета-качества для Python 3.5.
  • 26 апреля 2018 года была выпущена версия 6.0 с поддержкой Python 2.7 и 3.5 (все еще бета-качество в Windows).
  • 11 февраля 2019 года была выпущена версия 7.0 с поддержкой Python 2.7 и 3.5.
  • 14 октября 2019 года была выпущена версия 7.2 с поддержкой Python 3.6.9.
  • 24 декабря 2019 года была выпущена версия 7.3 с поддержкой Python 3.6.9.
  • 16 февраля 2020 года команда PyPy объявила о переносе хостинга исходного кода с Bitbucket на heptapod.net с репозиториями проекта CFFI (C Foreign Function Interface ). Также публикуются новый логотип и дизайн сайта. Однако автор и лицензия нового логотипа неизвестны.

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

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

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

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

Примечания

использованная литература

внешние ссылки