WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте
PyPy
Тип Интерпретатор и компилятор Python
Написана на RPython
Операционная система Кроссплатформенный
Первый выпуск 2002
Последняя версия 7.0 [1] (11 февраля 2018)
Состояние Реализация Python 2.7.13 и 3.5.3
Лицензия Лицензии MIT
Сайт pypy.org

PyPy (латиницей) — интерпретатор языка программирования Python. PyPy в начале своего существования был интерпретатором Python, написанным на Python. Текущие версии PyPy транслируются из RPython в Си и компилируются. В PyPy встроен трассирующий[en] 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 и запуск как нативной программы; это стандартный режим работы;
  • Python — транслятор PyPy также может быть запущен в интерпретаторе Python или в самом интерпретаторе PyPy, хотя скорость работы будет крайне низкой; эта возможность полезна для отладки.

По состоянию на 2017 год, PyPy отказался от JVM, CIL, 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://www.phoronix.com/scan.php?page=news_item&px=PyPy-7.0-Released
  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.

Литература

Ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2024
WikiSort.ru - проект по пересортировке и дополнению контента Википедии