PyPy

Поделись знанием:
Перейти к: навигация, поиск
PyPy
Тип

Интерпретатор и компилятор Python

Написана на

RPython

Операционная система

Кроссплатформенный

Последняя версия

5.5.0 [1] (12 октября 2016)

Состояние

Реализация Python 2.7.10 и 3.3.5

Лицензия

Лицензии MIT

Сайт

[pypy.org g]

К:Википедия:Статьи без изображений (тип: не указан)

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

Поддерживаемые бэкенды

  • C — трансляция кода RPython в C и запуск как родной программы; это стандартный режим работы;
  • CIL — Common Intermediate Language;
  • JVM — Java Virtual Machine;
  • Python — транслятор PyPy также может быть запущен в интерпретаторе Python, хотя скорость работы будет крайне низкой; эта возможность полезна для отладки.

По состоянию на 2010, PyPy отказался от JavaScript в качестве бэкенда[12].

Совместимость с CPython

Версия 5.4.1 совместима с версией Python 2.7 и может работать на 32-х и 64-х битных платформах. PyPy полностью поддерживает модули, написанные на чистом Python. Для использования бинарных (.so и .pyd) расширений PyPy имеет хорошую поддержку API CPython в виде отдельного модуля cpyext. Для нормальной работы этих расширений требуется их перекомпиляция[13].

Версия PyPy3 5.5 совместима с CPython 3.3.5[14].

Так же ведётся активная разработка PyPy 3.5, совместимой с CPython 3.5[15].

Известно, что следующие библиотеки и фреймворки могут работать в PyPy[13]:

См. также

Напишите отзыв о статье "PyPy"

Примечания

  1. [morepypy.blogspot.ru/2016/10/pypy3-550-released.html PyPy Status Blog: PyPy3 5.5.0 released]
  2. Samuele Pedroni. [codespeak.net/pypy/dist/pypy/doc/architecture.html#mission-statement PyPy - Goals and Architecture Overview] (March 2007). [www.webcitation.org/68oX7r5q4 Архивировано из первоисточника 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, [morepypy.blogspot.com/2011/04/tutorial-writing-interpreter-with-pypy.html Tutorial: Writing an Interpreter with PyPy, Part 1], [morepypy.blogspot.com/2011/04/tutorial-part-2-adding-jit.html Part 2: Adding a JIT],
    [habrahabr.ru/post/124418/ Руководство: пишем интерпретатор с JIT на PyPy (перевод)],
    [bitbucket.org/brownan/pypy-tutorial/ Репозиторий исх. кода]
    В статье, описывается реализация Brainfuck на RPython
  5. [speed.pypy.org/comparison/?exe=2%2B35,1%2B172&ben=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20&env=1&hor=false&bas=2%2B35&chart=normal+bars PyPy Speed Center: Comparison]
  6. [morepypy.blogspot.com/2010/11/pypy-14-ouroboros-in-practice.html PyPy Status Blog: PyPy 1.4: Ouroboros in practice]
  7. [morepypy.blogspot.com/2011/06/global-interpreter-lock-or-how-to-kill.html PyPy Status Blog «Global Interpreter Lock, or how to kill it»]
  8. [www.opennet.ru/opennews/art.shtml?num=33817 Представлен pypy-stm]
  9. [opennet.ru/opennews/art.shtml?num=36904 Выпуск PyPy 2.0, реализации Python, написанной на языке Python]. opennet.ru (10 мая 2013). Проверено 21 мая 2013. [www.webcitation.org/6GskggChf Архивировано из первоисточника 25 мая 2013].
  10. [morepypy.blogspot.ru/2016/03/pypy-50-released.html PyPy Status Blog: PyPy 5.0 released]. morepypy.blogspot.ru. Проверено 18 августа 2016.
  11. [morepypy.blogspot.ru/2016/08/pypy-gets-funding-from-mozilla-for.html PyPy Status Blog: PyPy gets funding from Mozilla for Python 3.5 support]. morepypy.blogspot.ru. Проверено 18 августа 2016.
  12. [www.mail-archive.com/pypy-dev@codespeak.net/msg03946.html Re: [pypy-dev] pypy appears to have entirely removed all mention of javascript]
  13. 1 2 [pypy.org/compat.html PyPy :: Python compatibility]
  14. [morepypy.blogspot.ru/2016/10/pypy3-550-released.html PyPy3 v5.5 released]. doc.pypy.org. Проверено 25 августа 2016.
  15. [buildbot.pypy.org/summary?branch=py3.5 Buildbot]. buildbot.pypy.org. Проверено 25 августа 2016.
  16. [buildbot.pypy.org/numpy-status/latest.html NumPyPy Status]. buildbot.pypy.org. Проверено 25 августа 2016.

Литература

  • 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. [codespeak.net/svn/pypy/extradoc/talk/icooolps2009/bolz-tracing-jit-final.pdf Tracing the meta-level: PyPy’s Tracing JIT Compiler]. In Proc. ICOOOLPS, 2009. ACM Press.
  • Corbet, Jonathan [lwn.net/Articles/388160/ PyPy: the other new compiler project]. LWN.net (May 19, 2010). [www.webcitation.org/67wcQtmAR Архивировано из первоисточника 26 мая 2012].
  • Corbet, Jonathan [lwn.net/Articles/442268/ A brief experiment with PyPy]. LWN.net (May 11, 2011). [www.webcitation.org/67wcRSAqs Архивировано из первоисточника 26 мая 2012].
  • von Eitzen, Chris. [www.h-online.com/open/news/item/PyPy-1-7-widens-the-performance-sweet-spot-1382249.html PyPy 1.7 widens the performance “sweet spot”], Heinz Heise (англ.) (November 21, 2011).
  • Rose, John [blogs.oracle.com/jrose/entry/a_day_with_pypy A Day with PyPy]. Oracle Corporation (December 02, 2011). [www.webcitation.org/67wcRyeiI Архивировано из первоисточника 26 мая 2012].
  • Gaynor, Alex [www.quora.com/Alex-Gaynor/Posts/Quora-is-now-running-on-PyPy Quora is now running on PyPy]. Quora (August 12, 2011). [www.webcitation.org/67wcSSBY1 Архивировано из первоисточника 26 мая 2012].

Ссылки

  • [pypy.org g] — официальный сайт PyPy
  • [launchpad.net/pypy PyPy] на Launchpad
  • [www.aosabook.org/en/pypy.html Benjamin Peterson — PyPy]

Отрывок, характеризующий PyPy

– Дронушка, – сказала княжна Марья, видевшая в нем несомненного друга, того самого Дронушку, который из своей ежегодной поездки на ярмарку в Вязьму привозил ей всякий раз и с улыбкой подавал свой особенный пряник. – Дронушка, теперь, после нашего несчастия, – начала она и замолчала, не в силах говорить дальше.
– Все под богом ходим, – со вздохом сказал он. Они помолчали.
– Дронушка, Алпатыч куда то уехал, мне не к кому обратиться. Правду ли мне говорят, что мне и уехать нельзя?
– Отчего же тебе не ехать, ваше сиятельство, ехать можно, – сказал Дрон.
– Мне сказали, что опасно от неприятеля. Голубчик, я ничего не могу, ничего не понимаю, со мной никого нет. Я непременно хочу ехать ночью или завтра рано утром. – Дрон молчал. Он исподлобья взглянул на княжну Марью.
– Лошадей нет, – сказал он, – я и Яков Алпатычу говорил.
– Отчего же нет? – сказала княжна.
– Все от божьего наказания, – сказал Дрон. – Какие лошади были, под войска разобрали, а какие подохли, нынче год какой. Не то лошадей кормить, а как бы самим с голоду не помереть! И так по три дня не емши сидят. Нет ничего, разорили вконец.
Княжна Марья внимательно слушала то, что он говорил ей.
– Мужики разорены? У них хлеба нет? – спросила она.
– Голодной смертью помирают, – сказал Дрон, – не то что подводы…
– Да отчего же ты не сказал, Дронушка? Разве нельзя помочь? Я все сделаю, что могу… – Княжне Марье странно было думать, что теперь, в такую минуту, когда такое горе наполняло ее душу, могли быть люди богатые и бедные и что могли богатые не помочь бедным. Она смутно знала и слышала, что бывает господский хлеб и что его дают мужикам. Она знала тоже, что ни брат, ни отец ее не отказали бы в нужде мужикам; она только боялась ошибиться как нибудь в словах насчет этой раздачи мужикам хлеба, которым она хотела распорядиться. Она была рада тому, что ей представился предлог заботы, такой, для которой ей не совестно забыть свое горе. Она стала расспрашивать Дронушку подробности о нуждах мужиков и о том, что есть господского в Богучарове.
– Ведь у нас есть хлеб господский, братнин? – спросила она.
– Господский хлеб весь цел, – с гордостью сказал Дрон, – наш князь не приказывал продавать.
– Выдай его мужикам, выдай все, что им нужно: я тебе именем брата разрешаю, – сказала княжна Марья.
Дрон ничего не ответил и глубоко вздохнул.
– Ты раздай им этот хлеб, ежели его довольно будет для них. Все раздай. Я тебе приказываю именем брата, и скажи им: что, что наше, то и ихнее. Мы ничего не пожалеем для них. Так ты скажи.
Дрон пристально смотрел на княжну, в то время как она говорила.
– Уволь ты меня, матушка, ради бога, вели от меня ключи принять, – сказал он. – Служил двадцать три года, худого не делал; уволь, ради бога.
Княжна Марья не понимала, чего он хотел от нее и от чего он просил уволить себя. Она отвечала ему, что она никогда не сомневалась в его преданности и что она все готова сделать для него и для мужиков.


Через час после этого Дуняша пришла к княжне с известием, что пришел Дрон и все мужики, по приказанию княжны, собрались у амбара, желая переговорить с госпожою.
– Да я никогда не звала их, – сказала княжна Марья, – я только сказала Дронушке, чтобы раздать им хлеба.
– Только ради бога, княжна матушка, прикажите их прогнать и не ходите к ним. Все обман один, – говорила Дуняша, – а Яков Алпатыч приедут, и поедем… и вы не извольте…
– Какой же обман? – удивленно спросила княжна
– Да уж я знаю, только послушайте меня, ради бога. Вот и няню хоть спросите. Говорят, не согласны уезжать по вашему приказанию.
– Ты что нибудь не то говоришь. Да я никогда не приказывала уезжать… – сказала княжна Марья. – Позови Дронушку.
Пришедший Дрон подтвердил слова Дуняши: мужики пришли по приказанию княжны.
– Да я никогда не звала их, – сказала княжна. – Ты, верно, не так передал им. Я только сказала, чтобы ты им отдал хлеб.
Дрон, не отвечая, вздохнул.
– Если прикажете, они уйдут, – сказал он.
– Нет, нет, я пойду к ним, – сказала княжна Марья
Несмотря на отговариванье Дуняши и няни, княжна Марья вышла на крыльцо. Дрон, Дуняша, няня и Михаил Иваныч шли за нею. «Они, вероятно, думают, что я предлагаю им хлеб с тем, чтобы они остались на своих местах, и сама уеду, бросив их на произвол французов, – думала княжна Марья. – Я им буду обещать месячину в подмосковной, квартиры; я уверена, что Andre еще больше бы сделав на моем месте», – думала она, подходя в сумерках к толпе, стоявшей на выгоне у амбара.
Толпа, скучиваясь, зашевелилась, и быстро снялись шляпы. Княжна Марья, опустив глаза и путаясь ногами в платье, близко подошла к ним. Столько разнообразных старых и молодых глаз было устремлено на нее и столько было разных лиц, что княжна Марья не видала ни одного лица и, чувствуя необходимость говорить вдруг со всеми, не знала, как быть. Но опять сознание того, что она – представительница отца и брата, придало ей силы, и она смело начала свою речь.
– Я очень рада, что вы пришли, – начала княжна Марья, не поднимая глаз и чувствуя, как быстро и сильно билось ее сердце. – Мне Дронушка сказал, что вас разорила война. Это наше общее горе, и я ничего не пожалею, чтобы помочь вам. Я сама еду, потому что уже опасно здесь и неприятель близко… потому что… Я вам отдаю все, мои друзья, и прошу вас взять все, весь хлеб наш, чтобы у вас не было нужды. А ежели вам сказали, что я отдаю вам хлеб с тем, чтобы вы остались здесь, то это неправда. Я, напротив, прошу вас уезжать со всем вашим имуществом в нашу подмосковную, и там я беру на себя и обещаю вам, что вы не будете нуждаться. Вам дадут и домы и хлеба. – Княжна остановилась. В толпе только слышались вздохи.
– Я не от себя делаю это, – продолжала княжна, – я это делаю именем покойного отца, который был вам хорошим барином, и за брата, и его сына.
Она опять остановилась. Никто не прерывал ее молчания.
– Горе наше общее, и будем делить всё пополам. Все, что мое, то ваше, – сказала она, оглядывая лица, стоявшие перед нею.
Все глаза смотрели на нее с одинаковым выражением, значения которого она не могла понять. Было ли это любопытство, преданность, благодарность, или испуг и недоверие, но выражение на всех лицах было одинаковое.
– Много довольны вашей милостью, только нам брать господский хлеб не приходится, – сказал голос сзади.
– Да отчего же? – сказала княжна.
Никто не ответил, и княжна Марья, оглядываясь по толпе, замечала, что теперь все глаза, с которыми она встречалась, тотчас же опускались.
– Отчего же вы не хотите? – спросила она опять.
Никто не отвечал.
Княжне Марье становилось тяжело от этого молчанья; она старалась уловить чей нибудь взгляд.
– Отчего вы не говорите? – обратилась княжна к старому старику, который, облокотившись на палку, стоял перед ней. – Скажи, ежели ты думаешь, что еще что нибудь нужно. Я все сделаю, – сказала она, уловив его взгляд. Но он, как бы рассердившись за это, опустил совсем голову и проговорил:
– Чего соглашаться то, не нужно нам хлеба.
– Что ж, нам все бросить то? Не согласны. Не согласны… Нет нашего согласия. Мы тебя жалеем, а нашего согласия нет. Поезжай сама, одна… – раздалось в толпе с разных сторон. И опять на всех лицах этой толпы показалось одно и то же выражение, и теперь это было уже наверное не выражение любопытства и благодарности, а выражение озлобленной решительности.
– Да вы не поняли, верно, – с грустной улыбкой сказала княжна Марья. – Отчего вы не хотите ехать? Я обещаю поселить вас, кормить. А здесь неприятель разорит вас…
Но голос ее заглушали голоса толпы.
– Нет нашего согласия, пускай разоряет! Не берем твоего хлеба, нет согласия нашего!
Княжна Марья старалась уловить опять чей нибудь взгляд из толпы, но ни один взгляд не был устремлен на нее; глаза, очевидно, избегали ее. Ей стало странно и неловко.
– Вишь, научила ловко, за ней в крепость иди! Дома разори да в кабалу и ступай. Как же! Я хлеб, мол, отдам! – слышались голоса в толпе.
Княжна Марья, опустив голову, вышла из круга и пошла в дом. Повторив Дрону приказание о том, чтобы завтра были лошади для отъезда, она ушла в свою комнату и осталась одна с своими мыслями.


Долго эту ночь княжна Марья сидела у открытого окна в своей комнате, прислушиваясь к звукам говора мужиков, доносившегося с деревни, но она не думала о них. Она чувствовала, что, сколько бы она ни думала о них, она не могла бы понять их. Она думала все об одном – о своем горе, которое теперь, после перерыва, произведенного заботами о настоящем, уже сделалось для нее прошедшим. Она теперь уже могла вспоминать, могла плакать и могла молиться. С заходом солнца ветер затих. Ночь была тихая и свежая. В двенадцатом часу голоса стали затихать, пропел петух, из за лип стала выходить полная луна, поднялся свежий, белый туман роса, и над деревней и над домом воцарилась тишина.