изначальный выпуск | середина 2007 г . |
---|---|
Стабильный выпуск | 7.3.3 / 21 ноября 2020 г . [1] |
Репозиторий | |
Написано в | RPython |
Операционная система | Кроссплатформенность |
Тип | Python интерпретатор и компилятор набор инструментов |
Лицензия | Массачусетский технологический институт |
Интернет сайт | pypy |
PyPy ( / р aɪ р aɪ / ) является альтернативной реализацией Python языка программирования [2] к CPython (который является стандарт реализации). PyPy часто работает быстрее, чем CPython, потому что PyPy - это своевременный компилятор, а CPython - интерпретатор . [3] Большая часть кода Python хорошо работает на PyPy, за исключением кода, который зависит от расширений CPython, которые либо не работают, либо вызывают некоторые накладные расходы при запуске в PyPy. Внутри PyPy использует технику, известную как мета-трассировка, которая преобразует интерпретатор в оперативный компилятор трассировки.. Поскольку интерпретаторы обычно легче писать, чем компиляторы, но работают медленнее, этот метод может облегчить создание эффективных реализаций языков программирования. Цепочка инструментов мета-трассировки PyPy называется RPython .
PyPy не имеет полной совместимости с экосистемой Python (по крайней мере, с его более поздними версиями): он заявляет только о совместимости с синтаксисом Python 2.7 и 3.6 и 3.7 (бета-качество, с «несколькими» [4] отсутствующими функциями); он проигрывает более новому синтаксису в Python 3.8, [5] 3.9 [6] и т. д., например, выражениям присваивания [7] и позиционным параметрам; [8] и предстоящий синтаксис Python 3.10, такой как сопоставление с образцом . [9]
Детали и мотивация [ править ]
PyPy задумывался как реализация Python, написанная на языке программирования, похожем на Python. Это упрощает определение областей, в которых его можно улучшить, и делает PyPy более гибким и легким для экспериментов, чем CPython . [ необходима цитата ]
PyPy стремится предоставить общую платформу перевода и поддержки для создания реализаций динамических языков , подчеркивая четкое разделение между спецификацией языка и аспектами реализации. Он также направлен на обеспечение совместимой, гибкой и быстрой реализации языка программирования Python с использованием вышеуказанной структуры, чтобы включить новые расширенные функции без необходимости кодировать в нее детали низкого уровня. [10] [11]
RPython [ править ]
Сам интерпретатор PyPy написан на ограниченном подмножестве Python под названием RPython (Restricted Python). [12] RPython накладывает определенные ограничения на языке Python , например , что тип переменной может быть выведенного во время компиляции. [13]
Проект PyPy разработал инструментальную цепочку, которая анализирует код RPython и переводит его в форму байтового кода, который может быть преобразован в C. Раньше были и другие серверные модули в дополнение к C: Java, CSharp и Javascript, но те, которые пострадали от битрота и были удалены. Таким образом, рекурсивный логотип PyPy - это змея, заглатывающая сама себя, поскольку RPython переводится интерпретатором Python. Код также можно запускать без перевода для тестирования и анализа, что обеспечивает хорошую тестовую площадку для исследования динамических языков.
Он позволяет использовать подключаемые сборщики мусора , а также дополнительно включать функции Stackless Python . Наконец, он включает JIT-генератор, который встраивает JIT-компилятор в интерпретатор с учетом нескольких аннотаций в исходном коде интерпретатора. Сгенерированный JIT-компилятор - это отслеживающий JIT- компилятор . [14]
RPython теперь также используется для написания реализаций на языках, отличных от Python, таких как Pixie . [15]
Статус проекта [ править ]
PyPy версии 7.3.3 совместим с тремя версиями CPython : 2.7.18, 3.6.12 и 3.7.9 (поддержка бета-качества для Python 3.7) [16] [4] Первой версией PyPy, совместимой с CPython v3, является PyPy v2. .3.1 (2014). [17] Интерпретатор PyPy, совместимый с CPython v3, также известен как PyPy3.
PyPy поддерживает JIT-компиляцию на 32-битных / 64-битных x86 и 32-битных / 64-битных процессорах ARM . [18] Он тестируется каждую ночь в Windows, Linux, OpenBSD и Mac OS X. PyPy может запускать программное обеспечение на чистом Python, которое не зависит от функций, специфичных для реализации. [19]
Для расширений 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 , [20] Pyglet , [21] Nevow [22] и Django . [23]
- 12 марта 2010 года был выпущен PyPy 1.2, ориентированный на скорость. Он включал в себя работающий, хотя и не стабильный, своевременный компилятор. [24]
- 30 апреля 2011 года была выпущена версия 1.5 PyPy, которая достигла совместимости с CPython 2.7. [25]
- 9 мая 2013 года был выпущен PyPy 2.0, который представил поддержку альфа-качества для JIT-компиляции на ARMv6 и ARMv7 JIT и включил CFFI в стандартную библиотеку. [26] [27]
- 20 июня 2014 года PyPy3 был объявлен стабильным [17] и обеспечил совместимость с более современным Python 3. Он был выпущен вместе с PyPy 2.3.1 и имеет тот же номер версии.
- 21 марта 2017 года проект PyPy выпустил версию 5.7 как PyPy, так и PyPy3, причем последняя представляет поддержку бета-качества для Python 3.5. [28]
- 26 апреля 2018 года была выпущена версия 6.0 с поддержкой Python 2.7 и 3.5 (все еще бета-качество в Windows). [29]
- 11 февраля 2019 года была выпущена версия 7.0 с поддержкой Python 2.7 и 3.5. [30]
- 14 октября 2019 года была выпущена версия 7.2 с поддержкой Python 3.6.9. [31]
- 24 декабря 2019 года была выпущена версия 7.3 с поддержкой Python 3.6.9. [32]
Финансирование [ править ]
PyPy финансировался Европейским союзом в качестве целевого исследовательского проекта [33] в период с декабря 2004 года по март 2007 года. В июне 2008 года PyPy объявила о финансировании как часть программ Google с открытым исходным кодом и согласилась сосредоточиться на обеспечении большей совместимости PyPy с CPython. . В 2009 году Eurostars, финансирующим Европейского союза , специально ориентированных на МСП , [34] принял предложение от участников проекта PyPy титулованных «PYJIT - быстрый и гибкий инструментарий для динамических языков программирования на основе PyPy». Финансирование Eurostars длилось до августа 2011 года. [35] На PyCon US 2011, Python Software Foundationпредоставил грант в размере 10 000 долларов для PyPy, чтобы продолжить работу над производительностью и совместимостью с новыми версиями языка. [36] Перенос на архитектуру ARM частично спонсировался Raspberry Pi Foundation . [26]
Проект PyPy также принимает пожертвования через страницы своего статуса в блоге. [37] По состоянию на 2013 г. финансирование осуществлялось для различных подпроектов: совместимость с версией Python 3, встроенная оптимизированная поддержка NumPy для численных вычислений и поддержка программной транзакционной памяти для лучшего параллелизма. [26]
См. Также [ править ]
- Начальная загрузка (компиляторы)
- Cython
- GraalVM
- Частичная оценка
- Psyco
- Самостоятельный хостинг
- Самостоятельный переводчик
- Незагруженная ласточка
Заметки [ править ]
- ^ "Блог статуса PyPy" . Проверено 23 ноября 2020 года .
- ^ "Интервью Maciej Fijalkowski PyPy" .
- ^ "Скорость PyPy" . speed.pypy.org . Проверено 1 декабря 2019 .
- ^ a b «Тройной выпуск PyPy 7.3.3: python 3.7, 3.6 и 2.7» . pypy.org . Проверено 15 декабря 2020 .
- ^ «Что нового в Python 3.8 - документация по Python 3.9.1» . docs.python.org . Проверено 15 февраля 2021 .
- ^ «Что нового в Python 3.8 - документация по Python 3.9.1» . docs.python.org . Проверено 15 февраля 2021 .
- ^ «PEP 572 - Выражения присваивания» . Python.org . Проверено 15 февраля 2021 .
- ^ «PEP 570 - Параметры Python только для позиционирования» . Python.org . Проверено 15 февраля 2021 .
- ^ «PEP 634 - Сопоставление структурного образца: Спецификация» . Python.org . Проверено 15 февраля 2021 .
- ^ Samuele Педрони (март 2007). «PyPy - Обзор целей и архитектуры» . Архивировано из оригинала на 2012-06-30.
- ^ «PyPy - Обзор целей и архитектуры - Заявление о миссии» . Проверено 11 октября 2013 года .
- ^ Нашим интерпретатором времени выполнения является «RPython» , Руководство по кодированию - документация PyPy.
- ^ «Это правильное подмножество Python, ограниченное способом, позволяющим легко анализировать и эффективно генерировать код», Анкона и др., 2007.
- ^ Больц, Карл; Куни, Антонио; Фиялковски, Мацей; Риго, Армин. Трассировка мета-уровня: JIT-компилятор трассировки PyPy . ICOOOLPS '09. DOI : 10.1145 / 1565824.1565827 .
- ^ Тимоти Balridge интервью .
- ^ «PyPy - совместимость с Python» . pypy.org . Проверено 15 декабря 2020 .
- ^ a b команда PyPy (20 июня 2014 г.). «PyPy3 2.3.1 - точка опоры» . Блог PyPy.
- ^ «PyPy v7.2.0: выпуск 2.7 и 3.6» . pypy.org . 16 октября 2019.
- ^ «PyPy - совместимость с Python» .
- ^ "Запуск пилонов поверх PyPy" .
- ^ "Запуск Pyglet поверх PyPy" .
- ^ "Запуск Nevow поверх PyPy" .
- ^ "PyPy запускает немодифицированную бета-версию django 1.0" .
- ^ «Представляем выпуск PyPy 1.2» .
- ^ «Выпущен PyPy 1.5: догоняя» .
- ^ a b c Джейк Эдж (15 мая 2013 г.). «Взгляните на выпуск PyPy 2.0» . LWN.net .
- ^ "PyPy 2.0 - сэндвич Эйнштейна" .
- ^ «PyPy2.7 и PyPy3.5 v5.7 - два в одном выпуске» .
- ^ "Двойной выпуск PyPy2.7 и PyPy3.5 v6.0" .
- ^ Куни, Антонио (2019-02-11). «Блог статуса PyPy: PyPy v7.0.0: тройной выпуск 2.7, 3.5 и 3.6-альфа» . Блог статуса PyPy . Проверено 17 августа 2020 .
- ^ Маттип (2019-10-14). «Блог статуса PyPy: выпущен PyPy v7.2» . Блог статуса PyPy . Проверено 17 августа 2020 .
- ^ Маттип (2019-12-24). «Блог статуса PyPy: выпущен PyPy v7.3.0» . Блог статуса PyPy .
- ^ "Вход в информационную службу исследований и разработок Сообщества ЕС" .
- ^ "Eurostars - цель выше" .
- ^ "Страница проекта в сети Eureka" .
- ^ "Спасибо PSF" .
- ^ «Блог статуса PyPy: Да, и между прочим: PyPy получает финансирование через« Eurostars » » .
Ссылки [ править ]
- Давиде Анкона, Массимо Анкона, Антонио Куни, Николас Д. Мацакис, 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.
Внешние ссылки [ править ]
- Официальный веб-сайт