- PyPy
-
PyPy Тип Интерпретатор и компилятор Python
Написана на Операционная система Кроссплатформенный
Последняя версия Состояние Имплементация Python 2.7.2
Лицензия Сайт PyPy — это интерпретатор языка программирования Python, который написан на Python и может компилировать сам себя.
Содержание
Цели проекта
PyPy был задуман как реализация Python написанная на Python. Тот факт, что PyPy реализован на языке высокого уровня делает его более гибким и позволяет легче экспериментировать с новыми возможностями чем CPython и легко определить области, где он может быть улучшен.
PyPy призван обеспечить единый механизм трансляции. Он поддерживает фреймворк для реализации динамических языков программирования и осуществляет четкое разделение между спецификацией языка и его реализацией.
Он также призван обеспечить совместимость, гибкость и быстроту реализации языка программирования Python и позволяет реализовывать новые возможности без необходимости программирования на языке низкого уровня.[1]
Трансляция
PyPy состоит из стандартного интерпретатора и транслятора.
Интерпретатор полностью реализует язык Python, используя ограниченное подмножество языка, называемого RPython (Restricted Python). В отличие от стандартного Python, RPython является статически типизированным для более эффективной компиляции[2].
Транслятор является набором инструментов, который анализирует код RPython и переводит его в языки более низкого уровня, такие как C, байт-код Java или CIL. Он также поддерживает подключаемые сборщики мусора и позволяет опционально включать Stackless. Также он включает JIT-компилятор для трансляции кода в машинные инструкции во время исполнения программы.
PyPy как средство реализации интерпретаторов
Компилятор языка RPython можно использовать и для написания интерпретаторов с других языков программирования. Добавив в код такого интерпретатора импорт класса JitDriver и создание его экземпляра, а затем передав в этот класс списки глобальных переменных, изменяемых и неизменяемых в ходе выполнения программы, а также сделав ещё несколько очевидных деклараций, мы, после трансляции с флагом --opt=jit:, получаем работающий JIT-компилятор языка.[3]
История проекта
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[4]. Также разработчики считают, что эта версия готова для использования в production[5].
В рамках PyPy разрабатывается специальная версия интерпретатора pypy-stm, в которой реализована программная транзакционная память[6][7]. Использование транзакционной памяти позволит избавится от GIL и упростит распараллеливание Python приложений на многоядерных системах.
Поддерживаемые бэкенды
- C — трансляция кода RPython в C и запуск как родной программы; это стандартный режим работы;
- CIL — Common Intermediate Language;
- JVM — Java Virtual Machine;
- Python — транслятор PyPy также может быть запущен в интерпретаторе Python, хотя скорость работы будет крайне низкой; эта возможность полезна для отладки.
По состоянию на 2010, PyPy отказался от JavaScript в качестве бэкенда.[8]
Совместимость с CPython
Версия 1.4 совместима с версией Python 2.5 и может работать на 32-х и 64-х битных платформах. PyPy полностью поддерживает модули написанные на чистом Python. Для использования бинарных (.so и .pyd) расширений PyPy имеет начальную поддержку API CPython в виде отдельного модуля cpyext. Для нормальной работы этих расширений требуется их перекомпиляция.[9]
Известно, что следующие библиотеки и фреймворки могут работать в PyPy[9]:
- ctypes
- django (базы данных не поддерживаются, за исключением sqlite)
- twisted (без поддержки SSL)
- pylons
- nevow (en:nevow)
- pyglet (en:pyglet)
См. также
- Раскрутка компилятора
- Cython
- Shedskin, транслятор Python в код C++
- Psyco
- Rubinius, реализация Ruby на Ruby
Примечания
- ↑ Samuele Pedroni PyPy - Goals and Architecture Overview (March 2007). Архивировано из первоисточника 30 июня 2012.
- ↑ «It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation», Ancona et al., 2007.
- ↑ Andrew Brown, Tutorial: Writing an Interpreter with PyPy, Part 1, Part 2: Adding a JIT,
Руководство: пишем интерпретатор с JIT на PyPy (перевод),
Репозиторий исх. кода
В статье, описывается реализация Brainfuck на RPython - ↑ PyPy Speed Center: Comparison
- ↑ PyPy Status Blog: PyPy 1.4: Ouroboros in practice
- ↑ PyPy Status Blog «Global Interpreter Lock, or how to kill it»
- ↑ Представлен pypy-stm
- ↑ Re: [pypy-dev] pypy appears to have entirely removed all mention of javascript
- ↑ 1 2 PyPy :: Python compatibility
Литература
- Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: a Step Towards Reconciling Dynamically and Statically Typed OO Languages. In Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.
- Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. Tracing the meta-level: PyPy’s Tracing JIT Compiler. In Proc. ICOOOLPS, 2009. ACM Press.
- Corbet, Jonathan PyPy: the other new compiler project. LWN.net (May 19, 2010). Архивировано из первоисточника 26 мая 2012.
- Corbet, Jonathan A brief experiment with PyPy. LWN.net (May 11, 2011). Архивировано из первоисточника 26 мая 2012.
- von Eitzen, Chris. PyPy 1.7 widens the performance “sweet spot”, Heinz Heise (англ.)русск. (November 21, 2011).
- Rose, John A Day with PyPy. Oracle Corporation (December 02, 2011). Архивировано из первоисточника 26 мая 2012.
- Gaynor, Alex Quora is now running on PyPy. Quora (August 12, 2011). Архивировано из первоисточника 26 мая 2012.
Ссылки
- pypy.org — официальный сайт PyPy
- PyPy на Launchpad
- Benjamin Peterson — PyPy
Python Люди Реализации ChinesePython • CLPython • CPython • JPype • Jython • IronPython • PyPy • Python for S60 • Psyco • Stackless Python • Unladen Swallow
Фреймворки CherryPy • Django • Flask • GAE framework • Pylons • Pyramid • Quixote • TurboGears • Twisted • Web2py • Zope
IDE Библиотеки Другое Категории:- Программное обеспечение по алфавиту
- Реализации Python
- Свободное программное обеспечение, написанное на Python
- Программное обеспечение с лицензией MIT
Wikimedia Foundation. 2010.