PyPy

Матеріал з Вікіпедії — вільної енциклопедії.
Версія від 01:07, 18 жовтня 2017, створена Nifl99 (обговореннявнесок) (оновлення версії)
Jump to navigation Jump to search
PyPy
Official PyPy logo
Тип інтерпретатор та компілятор (як набір інструментів) Python
Стабільний випуск 5.9 (5 жовтня 2017; 262 дні тому)
Версії 6.0[1]
Репозиторій bitbucket.org/pypy/pypy
Операційна система крос-платформовий
Написано на Python
Стан розробки активний
Ліцензія MIT License
pypy.org

PyPy — реалізація мови програмування Python, інтерпретатор та JIT-компілятор, написані на мові Python (використовується статично типізована підмножина RPython, Restricted Python). Проект має за мету швидкодію, ефективність та 100% сумісність з класичною реалізацією Python на мові СіCPython.

Завдяки залученню JIT-компілятора, котрий на льоту транслює деякі елементи в машинний код, PyPy при виконанні деяких операцій в кілька разів обганяє у продуктивності оригінальний інтерпретатор CPython. Ціною високої продуктивності та використання JIT-компіляції є більше споживання пам'яті — загальне споживання пам'яті в складних і тривало працюючих процесах (наприклад, при трансляції PyPy силами самого 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[2]. Також розробники вважають, що ця версія готова для використання в production[3].

У червні 2014 вийшла перша[4] стабільна версія з підтримкою Python 3, гілка PyPy3 розвивається синхронно з PyPy і відрізняється підтримкою Python 3.

Цілі проекту

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

PyPy покликаний забезпечити єдиний механізм трансляції. Він підтримує фреймворк для реалізації динамічних мов програмування і здійснює чіткий поділ між специфікацією мови та її реалізацією.

Він також покликаний забезпечити сумісність, гнучкість і швидкість реалізації мови програмування Python і дозволяє реалізовувати нові можливості без необхідності програмування на мові низького рівня.[5]

Трансляція

PyPy складається з стандартного інтерпретатора і транслятора.

Інтерпретатор повністю реалізує мову Python, використовуючи обмежену підмножину мови, звану RPython (Restricted Python). На відміну від стандартного Python, RPython є статично типізованим для ефективнішої компіляції[6].

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

PyPy як засіб реалізації інтерпретаторів

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

Підтримувані бекенди

  • C - трансляція коду RPython в C і запуск як рідної програми; це стандартний режим роботи;
  • CIL - Common Intermediate Language;
  • JVMвіртуальна машина Java;
  • 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]:

Виноски

Література

Посилання