PyPy
| Стабільний випуск | 2.0 (9 травня 2013) |
|---|---|
| Написано на | Python |
| Операційна система | крос-платформовий |
| Стан розробки | активний |
| Тип | інтерпретатор та компілятор (як набір інструментів) Python |
| Ліцензія | MIT License |
| Сайт | pypy.org |
PyPy — реалізація мови програмування Python, інтерпретатор та JIT-компілятор, написані на мові Python (використовується статично типізована підмножина RPython, Restricted Python). Проект має за мету швидкодію, ефективність та 100% сумісність з класичною реалізацією Python на мові Сі — CPython. Завдяки залученню JIT-компілятора, котрий на льоту транслює деякі елементи в машинний код, PyPy при виконанні деяких операцій в кілька разів обганяє у продуктивності оригінальний інтерпретатор CPython.
Зміст |
Історія проекту [ред.]
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[1]. Також розробники вважають, що ця версія готова для використання в production[2].
Цілі проекту [ред.]
PyPy був задуманий як реалізація Python написана на Python. Той факт, що PyPy реалізований на мові високого рівня робить його гнучкішим і дозволяє легше експериментувати з новими можливостями, ніж CPython, і легко визначити області, де він може бути поліпшений.
PyPy покликаний забезпечити єдиний механізм трансляції. Він підтримує фреймворк для реалізації динамічних мов програмування і здійснює чіткий поділ між специфікацією мови та її реалізацією.
Він також покликаний забезпечити сумісність, гнучкість і швидкість реалізації мови програмування Python і дозволяє реалізовувати нові можливості без необхідності програмування на мові низького рівня.[3]
Трансляція [ред.]
PyPy складається з стандартного інтерпретатора і транслятора.
Інтерпретатор повністю реалізує мову Python, використовуючи обмежену підмножину мови, звану RPython (Restricted Python). На відміну від стандартного Python, RPython є статично типизованим для ефективнішої компіляції[4].
Транслятор є набором інструментів, який аналізує код RPython і переводить його в мови нижчого рівня, такі як C, байт-код Java або CIL. Він також підтримує спільні збирачі сміття і дозволяє опціонально включати Stackless. Також він включає JIT-компілятор для трансляції коду в машинні інструкції під час виконання програми.
PyPy як засіб реалізації інтерпретаторів [ред.]
Компілятор мови RPython можна використовувати і для написання інтерпретаторів з інших мов програмування. Додавши в код такого інтерпретатора імпорт класу JitDriver і створення його примірник, а потім передавши в цей клас списки глобальних змінних, змінних і незмінних в ході виконання програми, а також зробивши ще кілька очевидних декларацій, ми, після трансляції з прапорцем -opt=jit:, отримуємо працюючий JIT-компілятор мови.[5]
Підтримувані бекенди [ред.]
- C - трансляція коду RPython в C і запуск як рідної програми; це стандартний режим роботи;
- CIL - Common Intermediate Language;
- JVM — віртуальна машина Java;
- Python — транслятор PyPy також може бути запущений в інтерпретаторі Python, хоча швидкість роботи буде вкрай низькою; ця можливість корисна для зневадження.
Станом на 2010, PyPy відмовився від JavaScript в якості бекенду.[6]
Сумісність з CPython [ред.]
Версія 1.4 сумісна з версією Python 2.5 і може працювати на 32-х і 64-х бітних платформах. PyPy повністю підтримує модулі написані на чистому Python. Для використання бінарних (.so і .pyd) розширень PyPy має початкову підтримку API CPython у вигляді окремого модуля cpyext. Для нормальної роботи цих розширень потрібно їх перекомпіляція.[7]
Відомо, що такі бібліотеки і фреймворки можуть працювати в PyPy[7]:
- ctypes
- django (бази даних не підтримуються, за винятком sqlite)
- twisted (без підтримки SSL )
- pylons
- nevow (en:nevow)
- pyglet (en:pyglet)
Виноски [ред.]
- ↑ PyPy Speed Center: Comparison
- ↑ PyPy Status Blog: PyPy 1.4: Ouroboros in practice
- ↑ Samuele Pedroni (March 2007). «PyPy - Goals and Architecture Overview».
- ↑ «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 - ↑ Re: [pypy-dev] pypy appears to have entirely removed all mention of javascript
- ↑ а б 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 (May 19, 2010). «PyPy: the other new compiler project». LWN.net.
- Corbet, Jonathan (May 11, 2011). «A brief experiment with PyPy». LWN.net.
- von Eitzen, Chris (November 21, 2011). «PyPy 1.7 widens the performance “sweet spot”». The H (Heinz Heise(англ.)укр.).
- Rose, John (December 02, 2011). «A Day with PyPy». Oracle Corporation.
- Gaynor, Alex (August 12, 2011). «Quora is now running on PyPy». Quora.
Посилання [ред.]
- Офіційний веб-сайт
- PyPy на Launchpad
- Official status blog
- PyPy nightly benchmark run
- Python in Python: The PyPy System - technical talk by the designer of PyPy (video archive)
