Interested Article - PyPy

PyPy интерпретатор языка программирования Python . PyPy в начале своего существования был интерпретатором Python, написанным на Python. Текущие версии PyPy транслируются из RPython в Си и компилируются. В PyPy встроен JIT-компилятор , который может превращать код на Python в машинный код во время выполнения программы.

Цели проекта

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

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

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

Трансляция

PyPy состоит из стандартного интерпретатора и транслятора.

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

Транслятор является набором инструментов, который анализирует код RPython и переводит его в языки более низкого уровня, такие как C , байт-код Java или CIL . Он также поддерживает подключаемые сборщики мусора и позволяет опционально включать Stackless . Также он включает JIT -компилятор для трансляции кода в машинные инструкции во время исполнения программы.

PyPy как средство реализации интерпретаторов

Компилятор языка RPython можно использовать и для написания интерпретаторов с других языков программирования. Добавив в код такого интерпретатора импорт класса JitDriver и создание его экземпляра, а затем передав в этот класс списки глобальных переменных , изменяемых и неизменяемых в ходе выполнения программы, а также сделав ещё несколько очевидных деклараций, мы, после трансляции с флагом --opt=jit: , получаем работающий JIT -компилятор языка .

История проекта

PyPy является продолжением проекта Psyco , JIT-компилятора для Python, разработанный Армином Риго (Armin Rigo). Цель PyPy в том, чтобы иметь JIT-компилятор с охватом, который не был доступен для Psyco. PyPy начался как исследовательский проект для разработчиков.

Когда проект достиг зрелой стадии развития и официальной версии 1.0 в середине 2007 года, следующий акцент был сделан на выпуск production-ready версии с большей совместимостью с CPython.

Версия 1.1 была выпущена 28 апреля 2009 года.

В марте 2010 года вышла версия 1.2, в которой особое внимание было уделено скорости. Эта версия включает в себя JIT-компилятор, который работает, но не рекомендуется для использования в production.

26 ноября 2010 года была выпущена версия 1.4. Эта версия впервые в режиме JIT-компилятора по скорости превосходит CPython . Также разработчики считают, что эта версия готова для использования в production .

В рамках PyPy разрабатывается специальная версия интерпретатора pypy-stm, в которой реализована программная транзакционная память . Использование транзакционной памяти позволит избавиться от GIL и упростит распараллеливание Python приложений на многоядерных системах.

9 мая 2013 года вышла вторая версия PyPy, в число новшеств которой входит бесстековый режим и новый интерфейс работы с внешними функциями на языке Си — cffi .

10 марта 2016 года вышла пятая версия PyPy, в которой была улучшена производительность, и API CPython получило множество улучшений .

9 августа 2016 года PyPy получил финансирование в размере $200,000 от Mozilla для поддержки Python 3.5 .

12 ноября 2016 года вышла версия PyPy2 v5.6, самое главное изменение — стандартная библиотека Python 2.7.12

Поддерживаемые бэкенды

  • C — трансляция кода RPython в C и запуск как нативной программы; это стандартный режим работы;
  • Python — транслятор PyPy также может быть запущен в интерпретаторе Python или в самом интерпретаторе PyPy, хотя скорость работы будет крайне низкой; эта возможность полезна для отладки.

По состоянию на 2017 год, PyPy отказался от JVM , CIL , JavaScript в качестве бэкендов.

Совместимость с CPython

Версия 5.6.0 совместима с версией Python 2.7.12 и может работать на 32- и 64-битных платформах (кроме Windows, где поддерживается только 32-битная версия ). PyPy полностью поддерживает модули, написанные на чистом Python. Для использования двоичных расширений (.so и .pyd) PyPy имеет хорошую поддержку API CPython в виде отдельного модуля cpyext. Для нормальной работы этих расширений требуется их перекомпиляция .

Версия PyPy3 5.5 совместима с CPython 3.3.5 .

Также ведётся активная разработка PyPy3.5, реализующей Python 3.5.

Известно, что следующие библиотеки и фреймворки могут работать в PyPy :

См. также

Примечания

  1. Samuele Pedroni. (March 2007). Архивировано из 30 июня 2012 года.
  2. «It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation», Ancona et al., 2007.
  3. Andrew Brown, от 3 марта 2012 на Wayback Machine , от 3 марта 2012 на Wayback Machine ,
    от 20 августа 2016 на Wayback Machine ,
    от 26 января 2012 на Wayback Machine
    В статье, описывается реализация Brainfuck на RPython
  4. . Дата обращения: 28 ноября 2010. 2 апреля 2012 года.
  5. . Дата обращения: 28 ноября 2010. 9 марта 2012 года.
  6. . Дата обращения: 19 мая 2012. 22 мая 2012 года.
  7. . Дата обращения: 19 мая 2012. 13 мая 2012 года.
  8. . opennet.ru (10 мая 2013). Дата обращения: 21 мая 2013. Архивировано из 7 июня 2013 года.
  9. . morepypy.blogspot.ru. Дата обращения: 18 августа 2016. 13 марта 2016 года.
  10. . morepypy.blogspot.ru. Дата обращения: 18 августа 2016. 18 марта 2017 года.
  11. от 9 октября 2012 на Wayback Machine Re: [pypy-dev] pypy appears to have entirely removed all mention of javascript]
  12. . doc.pypy.org. Дата обращения: 12 ноября 2016. 13 ноября 2016 года.
  13. . Дата обращения: 30 ноября 2010. 7 июня 2021 года.
  14. . doc.pypy.org. Дата обращения: 25 августа 2016. 18 октября 2016 года.
  15. . buildbot.pypy.org. Дата обращения: 25 августа 2016. 16 октября 2013 года.

Литература

  • Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. (недоступная ссылка) . In Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.
  • Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. . In Proc. ICOOOLPS, 2009. ACM Press.
  • Corbet, Jonathan . LWN.net (19 мая 2010). Архивировано из 26 мая 2012 года.
  • Corbet, Jonathan . LWN.net (11 мая 2011). Архивировано из 26 мая 2012 года.
  • von Eitzen, Chris (2011-11-21). . . (англ.) .
  • Rose, John . Oracle Corporation (2 декабря 2011). Архивировано из 26 мая 2012 года.
  • Gaynor, Alex . Quora (12 августа 2011). Архивировано из 26 мая 2012 года.

Ссылки

  • — официальный сайт PyPy
  • на Launchpad
Источник —

Same as PyPy