PyPy - PyPy
Первый выпуск | середина 2007 г . |
---|---|
Стабильный выпуск | 7.3.5 / 23 мая 2021 г .
|
Репозиторий | |
Написано в | RPython |
Операционная система | Кроссплатформенность |
Тип | Python интерпретатор и компилятор набор инструментов |
Лицензия | Массачусетский технологический институт |
Веб-сайт |
pypy |
PyPy ( / р aɪ р aɪ / ) является альтернативной реализацией 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 для численных вычислений и поддержка программной транзакционной памяти для лучшего параллелизма.
Смотрите также
- Начальная загрузка (компиляторы)
- Cython
- GraalVM
- Частичная оценка
- Psyco
- Самостоятельный хостинг
- Самостоятельный переводчик
- Незагруженная ласточка
Примечания
использованная литература
- Давиде Анкона, Массимо Анкона, Антонио Куни, Николас Д. Мацакис, 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. 29 ноября 2015.