PyPy

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
PyPy
Pypy logo.png
Тип

Интерпретатор и компилятор Python

Написана на

RPython

Операционная система

Кроссплатформенный

Последняя версия

5.6.0 [1] (12 октября 2016)

Состояние

Реализация Python 2.7.12 и 3.3.5

Лицензия

Лицензии MIT

Сайт

pypy.org

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

Цели проекта[править | править вики-текст]

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

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

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

Трансляция[править | править вики-текст]

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

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

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

PyPy как средство реализации интерпретаторов[править | править вики-текст]

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

История проекта[править | править вики-текст]

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[5]. Также разработчики считают, что эта версия готова для использования в production[6].

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

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

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

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

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

Поддерживаемые бэкенды[править | править вики-текст]

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

По состоянию на 2010, PyPy отказался от JavaScript в качестве бэкенда[12].

Совместимость с CPython[править | править вики-текст]

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

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

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

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

См. также[править | править вики-текст]

Примечания[править | править вики-текст]

  1. https://morepypy.blogspot.ru/2016/11/pypy27-v56-released-stdlib-2712-support.html PyPy2.7 v5.6 released - stdlib 2.7.12 support, C-API improvements, and more
  2. Samuele Pedroni. PyPy - Goals and Architecture Overview (March 2007). Архивировано из первоисточника 30 июня 2012.
  3. «It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation», Ancona et al., 2007.
  4. Andrew Brown, Tutorial: Writing an Interpreter with PyPy, Part 1, Part 2: Adding a JIT,
    Руководство: пишем интерпретатор с JIT на PyPy (перевод),
    Репозиторий исх. кода
    В статье, описывается реализация Brainfuck на RPython
  5. PyPy Speed Center: Comparison
  6. PyPy Status Blog: PyPy 1.4: Ouroboros in practice
  7. PyPy Status Blog «Global Interpreter Lock, or how to kill it»
  8. Представлен pypy-stm
  9. Выпуск PyPy 2.0, реализации Python, написанной на языке Python. opennet.ru (10 мая 2013). Проверено 21 мая 2013. Архивировано из первоисточника 25 мая 2013.
  10. PyPy Status Blog: PyPy 5.0 released. morepypy.blogspot.ru. Проверено 18 августа 2016.
  11. PyPy Status Blog: PyPy gets funding from Mozilla for Python 3.5 support. morepypy.blogspot.ru. Проверено 18 августа 2016.
  12. Re: [pypy-dev] pypy appears to have entirely removed all mention of javascript
  13. Translating on Windows — PyPy documentation. doc.pypy.org. Проверено 12 ноября 2016.
  14. 1 2 PyPy :: Python compatibility
  15. PyPy3 v5.5 released. doc.pypy.org. Проверено 25 августа 2016.
  16. Buildbot. buildbot.pypy.org. Проверено 25 августа 2016.
  17. NumPyPy Status. buildbot.pypy.org. Проверено 25 августа 2016.

Литература[править | править вики-текст]

Ссылки[править | править вики-текст]