PyPy - PyPy
изначальный выпуск | середина 2007 г. |
---|---|
Стабильный выпуск | 7.3.3 / 21 ноября 2020[1] |
Репозиторий | |
Написано в | RPython |
Операционная система | Кроссплатформенность |
Тип | Python интерпретатор и компилятор набор инструментов |
Лицензия | Массачусетский технологический институт |
Интернет сайт | pypy |
PyPy альтернативная реализация Python язык программирования[2] к CPython (это стандартная реализация). PyPy часто работает быстрее, чем CPython, потому что PyPy - это своевременный компилятор а CPython - это устный переводчик.[3] Большая часть кода Python хорошо работает на PyPy, за исключением кода, который зависит от расширений CPython, которые либо не работают, либо вызывают некоторые накладные расходы при запуске в PyPy. Внутри PyPy использует метод, известный как мета-трассировка, который преобразует интерпретатор в отслеживание своевременного компилятора. Поскольку интерпретаторы обычно легче писать, чем компиляторы, но работают медленнее, этот метод может облегчить создание эффективных реализаций языков программирования. Цепочка инструментов мета-трассировки PyPy называется RPython.
Детали и мотивация
PyPy задумывался как реализация Python, написанная на языке программирования, похожем на Python. Это упрощает определение областей, в которых его можно улучшить, и делает PyPy более гибким и легким для экспериментов, чем CPython.[нужна цитата ]
PyPy стремится предоставить общую платформу перевода и поддержки для создания реализаций динамические языки, подчеркивая четкое разделение между спецификацией языка и аспектами реализации. Он также призван обеспечить совместимую, гибкую и быструю реализацию языка программирования Python с использованием вышеуказанной структуры, чтобы включить новые расширенные функции без необходимости кодировать в нее детали низкого уровня.[4][5]
RPython
Сам интерпретатор PyPy написан на ограниченном подмножестве Python под названием RPython (Restricted Python).[6] RPython накладывает некоторые ограничения на язык Python, так что тип переменной может быть предполагаемый во время компиляции.[7]
Проект PyPy разработал набор инструментов который анализирует код RPython и переводит его в форму байтового кода вместе с интерпретатором, написанным на C язык программирования. Большая часть этого кода затем компилируется в машинный код, и байтовый код выполняется в скомпилированном интерпретаторе.
Это позволяет подключать сборщики мусора, а также возможность включения Безстековый Python Особенности. Наконец, он включает JIT-генератор, который встраивает JIT-компилятор в интерпретатор с учетом нескольких аннотаций в исходном коде интерпретатора. Сгенерированный JIT-компилятор - это отслеживание JIT.[8]
RPython теперь также используется для написания реализаций на языках, отличных от Python, таких как Пикси.[9]
Статус проекта
PyPy совместим с CPython 2.7.13.[10] PyPy3, выпущенный начиная с версии 2.3.1,[11] совместим с CPython 3.6.9 начиная с версии 7.2.[10] Обе версии имеют JIT-компиляция поддержка 32-бит / 64-бит x86 и 32-бит / 64-бит РУКА процессоры.[12] Он тестируется каждую ночь в Windows, Linux, OpenBSD и Mac OS X. PyPy может запускать программное обеспечение на чистом Python, которое не зависит от функций, специфичных для реализации.[13]
Для расширений CPython C API существует уровень совместимости под названием CPyExt, но он неполный и экспериментальный. Предпочтительный способ взаимодействия с C общие библиотеки через встроенный C интерфейс внешней функции (CFFI) или ctypes библиотеки.
История
PyPy - это продолжение Psyco проект, вовремя специализированный компилятор для Python, разработанного Армином Риго в период с 2002 по 2010 год. Цель PyPy - получить своевременный специализированный компилятор с областью видимости, который не был доступен для Psyco.[требуется разъяснение ] Изначально RPython также можно было скомпилировать в Байт-код Java, CIL и JavaScript, но эти серверные ВМ были удалены из-за отсутствия интереса.
PyPy изначально был проектом, ориентированным на исследования и разработки. Достигнув зрелой стадии разработки и официального выпуска 1.0 в середине 2007 года, его следующим направлением было выпустить готовую к производству версию с большей совместимостью с CPython. Многие изменения PyPy были внесены во время кодирование спринтов.
- В августе 2008 года PyPy смог запустить некоторые популярные библиотеки Python, например Пилоны,[14] Пиглет,[15] Nevow[16] и Джанго.[17]
- 12 марта 2010 года был выпущен PyPy 1.2, ориентированный на скорость. Он включал в себя работающий, хотя и не стабильный, своевременный компилятор.[18]
- 30 апреля 2011 года была выпущена PyPy версии 1.5, которая достигла совместимости с CPython 2.7.[19]
- 9 мая 2013 года был выпущен PyPy 2.0, который представил поддержку альфа-качества для JIT-компиляции на ARMv6 и ARMv7 JIT и включил CFFI в стандартную библиотеку.[20][21]
- 20 июня 2014 года PyPy3 был объявлен стабильным.[11] и представила совместимость с более современным Python 3. Он был выпущен вместе с PyPy 2.3.1 и имеет тот же номер версии.
- 21 марта 2017 года проект PyPy выпустил версию 5.7 как PyPy, так и PyPy3, причем последняя представляет поддержку бета-качества для Python 3.5.[22]
- 26 апреля 2018 года была выпущена версия 6.0 с поддержкой Python 2.7 и 3.5 (все еще бета-качество в Windows).[23]
- 11 февраля 2019 года была выпущена версия 7.0 с поддержкой Python 2.7 и 3.5.[24]
- 14 октября 2019 года была выпущена версия 7.2 с поддержкой Python 3.6.9.[25]
- 24 декабря 2019 года была выпущена версия 7.3 с поддержкой Python 3.6.9.[26]
Финансирование
PyPy финансировался Евросоюз быть Конкретный целевой исследовательский проект[27] с декабря 2004 г. по март 2007 г. В июне 2008 г. PyPy объявила о финансировании в рамках Google Программы с открытым исходным кодом и согласились сосредоточиться на обеспечении большей совместимости PyPy с CPython. В 2009 году Eurostars, финансовое агентство Европейского Союза, уделяло особое внимание МСП,[28] принял предложение участников проекта PyPy под названием «PYJIT - быстрый и гибкий набор инструментов для динамических языков программирования на основе PyPy». Финансирование Eurostars длилось до августа 2011 года.[29]В PyCon США 2011 г. Фонд программного обеспечения Python предоставил PyPy грант в размере 10 000 долларов на продолжение работы над производительностью и совместимостью с новыми версиями языка.[30]Перенос на архитектуру ARM был частично спонсирован Фонд Raspberry Pi.[20]
Проект PyPy также принимает пожертвования через страницы своего статуса в блоге.[31] По состоянию на 2013 год финансирование было для различных подпроектов: совместимость с версией Python 3, встроенная оптимизация NumPy поддержка численных расчетов и программная транзакционная память поддержка для лучшего параллелизма.[20]
Смотрите также
- Начальная загрузка (компиляторы)
- Cython
- GraalVM
- Частичная оценка
- Psyco
- Самостоятельный хостинг
- Самостоятельный переводчик
- Незагруженная ласточка
Примечания
- ^ "Блог статуса PyPy". Получено 23 ноября, 2020.
- ^ "Интервью Мацея Фиялковски PyPy".
- ^ "Скорость PyPy". speed.pypy.org. Получено 2019-12-01.
- ^ Самуэле Педрони (март 2007 г.). «PyPy - Обзор целей и архитектуры». Архивировано из оригинал на 30.06.2012.
- ^ «PyPy - Обзор целей и архитектуры - Заявление о миссии». Получено 11 октября 2013.
- ^ Наш интерпретатор времени выполнения - «RPython», Руководство по кодированию - документация PyPy
- ^ «Это подходящее подмножество Python, ограниченное способом, позволяющим легко анализировать и эффективно генерировать код», Анкона и др., 2007.
- ^ Больц, Карл; Куни, Антонио; Фиялковски, Мацей; Риго, Армин. Трассировка мета-уровня: JIT-компилятор трассировки PyPy. ICOOOLPS '09. Дои:10.1145/1565824.1565827.
- ^ Тимоти Бэлридж, интервью.
- ^ а б «PyPy - совместимость с Python». pypy.org. Получено 2016-04-21.
- ^ а б команда PyPy (20 июня 2014 г.). "PyPy3 2.3.1 - точка опоры". Блог PyPy.
- ^ "PyPy v7.2.0: выпуск 2.7 и 3.6". pypy.org. 16 октября 2019.
- ^ «PyPy - совместимость с Python».
- ^ «Ходовые пилоны поверх PyPy».
- ^ "Запуск Pyglet поверх PyPy".
- ^ "Запуск Nevow поверх PyPy".
- ^ "PyPy запускает немодифицированную бета-версию django 1.0".
- ^ «Представляем выпуск PyPy 1.2».
- ^ «Выпущен PyPy 1.5: догоняет».
- ^ а б c Джейк Эдж (15 мая 2013 г.). "Взгляните на выпуск PyPy 2.0". LWN.net.
- ^ «PyPy 2.0 - сэндвич Эйнштейна».
- ^ «PyPy2.7 и PyPy3.5 v5.7 - два в одном выпуске».
- ^ "Двойной выпуск PyPy2.7 и PyPy3.5 v6.0".
- ^ Куни, Антонио (11.02.2019). "Блог статуса PyPy: PyPy v7.0.0: тройной выпуск 2.7, 3.5 и 3.6-альфа". Блог статуса PyPy. Получено 2020-08-17.
- ^ Маттип (2019-10-14). «Блог статуса PyPy: выпущен PyPy v7.2». Блог статуса PyPy. Получено 2020-08-17.
- ^ Маттип (24 декабря 2019). «Блог статуса PyPy: выпущен PyPy v7.3.0». Блог статуса PyPy.
- ^ «Вход в информационную службу Сообщества ЕС по исследованиям и разработкам».
- ^ "Eurostars - цель выше".
- ^ "Страница проекта в сети Eureka Network".
- ^ "Спасибо PSF".
- ^ «Блог статуса PyPy: Да, кстати, PyPy получает финансирование через» Eurostars"".
Рекомендации
- Давиде Анкона, Массимо Анкона, Антонио Куни, Николас Д. Мацакис, 2007. RPython: шаг к согласованию динамически и статически типизированных ОО-языков[постоянная мертвая ссылка ]. В Proc. Симпозиум динамического языка (DLS), 2007. ACM Press.
- Карл Фридрих Больц, Антонио Куни, Мацей Фиялковски, 2009. Трассировка мета-уровня: JIT-компилятор PyPy Tracing. В Proc. ICOOOLPS, 2009. ACM Press.
- Корбет, Джонатан (11 мая 2011 г.). «Краткий эксперимент с PyPy». LWN.net.
- фон Эйцен, Крис (21 ноября 2011 г.). "PyPy 1.7 расширяет производительность"."". H. Heinz Heise.
- Роуз, Джон (2 декабря 2011 г.). «День с PyPy». Oracle блог разработчика.
- "Интервью Мацея Фиялковского пыпы". Блог Decisionstats.