PyPy — реалізація мови програмування Python, інтерпретатор та JIT-компілятор, написані на мові Python (використовується статично типізована підмножина RPython, Restricted Python). Проект має за мету швидкодію, ефективність та 100 % сумісність з класичною реалізацією Python на мові Сі — CPython.
Тип | інтерпретатор та компілятор (як набір інструментів) Python |
---|---|
Стабільний випуск | 5.9 (5 жовтня, 2017 ) |
Операційна система | крос-платформовий |
Мова програмування | Python |
Стан розробки | активний |
Ліцензія | MIT License |
Репозиторій | github.com/pypy/pypy |
Вебсайт | pypy.org |
Завдяки залученню 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. Також розробники вважають, що ця версія готова для використання в production.
У червні 2014 вийшла перша стабільна версія з підтримкою Python 3, гілка PyPy3 розвивається синхронно з PyPy і відрізняється підтримкою Python 3.
Цілі проекту
PyPy був задуманий як реалізація Python написана на Python. Той факт, що PyPy реалізований на мові високого рівня робить його гнучкішим і дозволяє легше експериментувати з новими можливостями, ніж CPython, і легко визначити області, де він може бути поліпшений.
PyPy покликаний забезпечити єдиний механізм трансляції. Він підтримує фреймворк для реалізації динамічних мов програмування і здійснює чіткий поділ між специфікацією мови та її реалізацією.
Він також покликаний забезпечити сумісність, гнучкість і швидкість реалізації мови програмування Python і дозволяє реалізовувати нові можливості без необхідності програмування на мові низького рівня.
Трансляція
PyPy складається з стандартного інтерпретатора і транслятора.
Інтерпретатор повністю реалізує мову Python, використовуючи обмежену підмножину мови, звану RPython (Restricted Python). На відміну від стандартного Python, RPython є статично типізованим для ефективнішої компіляції.
Транслятор є набором інструментів, який аналізує код RPython і переводить його в мови нижчого рівня, такі як C, байт-код Java або CIL. Він також підтримує спільні збирачі сміття і дозволяє опціонально включати Stackless. Також він включає JIT-компілятор для трансляції коду в машинні інструкції під час виконання програми.
RPython
Сам інтерпретатор PyPy написаний у обмеженій підмножині Python під назвою RPython (обмежений Python). RPython накладає деякі обмеження на мову Python, так що тип змінної можна визначити під час компіляції.
Проект PyPy розробив ланцюжок інструментів, який аналізує код RPython і перетворює його у форму байтового коду, який можна опустити в C. Раніше крім C існували інші бекенди: Java, та Javascript, але ті, що постраждали від бітротів і були видалені. Таким чином, рекурсивний логотип PyPy — це змія, яка ковтає себе, оскільки RPython перекладається інтерпретатором Python. Код також можна запускати в неперекладеному вигляді для тестування та аналізу, що забезпечує хороший тестовий майданчик для дослідження динамічних мов.
Він дозволяє підключати збирачі сміття, а також додатково включати функції Stackless Python. Нарешті, він включає генератор JIT (just-in-time), який вбудовує компілятор just-in-time в інтерпретатор з огляду на кілька анотацій у вихідному коді інтерпретатора. Згенерований компілятор JIT є трасуванням JIT.
Тепер RPython також використовується для написання не-Python мовних реалізацій, таких як Pixie.
PyPy як засіб реалізації інтерпретаторів
Компілятор мови RPython можна використовувати і для написання інтерпретаторів з інших мов програмування. Додавши в код такого інтерпретатора імпорт класу JitDriver і створення його примірник, а потім передавши в цей клас списки глобальних змінних, змінних і незмінних в ході виконання програми, а також зробивши ще кілька очевидних декларацій, ми, після трансляції з прапорцем -opt=jit:, отримуємо працюючий JIT-компілятор мови.
Підтримувані бекенди
- C — трансляція коду RPython в C і запуск як рідної програми; це стандартний режим роботи;
- CIL — Common Intermediate Language;
- JVM — віртуальна машина Java;
- Python — транслятор PyPy також може бути запущений в інтерпретаторі Python, хоча швидкість роботи буде вкрай низькою; ця можливість корисна для зневадження.
Станом на 2010, PyPy відмовився від JavaScript як бекенду.
Сумісність з CPython
Версія 1.4 сумісна з версією Python 2.5 і може працювати на 32-х і 64-х бітних платформах. PyPy повністю підтримує модулі написані на чистому Python. Для використання бінарних (.so і .pyd) розширень PyPy має початкову підтримку API CPython у вигляді окремого модуля cpyext. Для нормальної роботи цих розширень потрібно їх перекомпіляція.
Відомо, що такі бібліотеки і фреймворки можуть працювати в PyPy:
Виноски
- . Архів оригіналу за 2 квітня 2012. Процитовано 11 лютого 2012.
- . Архів оригіналу за 9 березня 2012. Процитовано 11 лютого 2012.
- Первый стабильный выпуск PyPy3 с поддержкой Python 3 [ 23 червня 2014 у Wayback Machine.] // opennet.ru 21.06.2014
- Samuele Pedroni (March 2007). PyPy - Goals and Architecture Overview. Архів оригіналу за 30 червня 2012. Процитовано 11 лютого 2012.
- «It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation», Ancona et al., 2007
- Cory Althoff (2016). . Triangle Connection. Архів оригіналу за 6 вересня 2021. Процитовано 21 вересня 2021.
- «It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation», Ancona et al., 2007.
- Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. Tracing the Meta-Level: PyPy's Tracing JIT Compiler. ICOOOLPS '09. doi:10.1145/1565824.1565827.
- Timothy Balridge interview [ 3 березня 2016 у Wayback Machine.].
- Andrew Brown, Tutorial: Writing an Interpreter with PyPy, Part 1 [ 3 березня 2012 у Wayback Machine.], Part 2: Adding a JIT [ 3 березня 2012 у Wayback Machine.],
Керівництво: пишемо інтерпретатор з JIT на PyPy (переклад) [ 8 лютого 2012 у Wayback Machine.],
Репозиторій сирцевого коду [ 26 січня 2012 у Wayback Machine.]
У статті описується реалізація Brainfuck на - [[https://web.archive.org/web/20121009143354/http://www.mail-archive.com/pypy-dev@codespeak.net/msg03946.html Архівовано 9 жовтня 2012 у Wayback Machine.] Re: [pypy-dev] pypy appears to have entirely removed all mention of javascript]
- . Архів оригіналу за 7 червня 2021. Процитовано 11 лютого 2012.
Література
- Davide Ancona, Massimo Ancona, Antonio Cuni, Nicholas D. Matsakis, 2007. RPython: a Step Towards Reconciling Dynamically and Statically Typed OO Languages[недоступне посилання з лютого 2019]. In Proc. Dynamic Language Symposium (DLS), 2007. ACM Press.
- Carl Friedrich Bolz, Antonio Cuni, Maciej Fijalkowski, 2009. . In Proc. ICOOOLPS, 2009. ACM Press.
- Corbet, Jonathan (19 травня 2010). PyPy: the other new compiler project. . Архів оригіналу за 26 травня 2012. Процитовано 11 лютого 2012.
- Corbet, Jonathan (11 травня 2011). A brief experiment with PyPy. . Архів оригіналу за 26 травня 2012. Процитовано 11 лютого 2012.
- von Eitzen, Chris (21 листопада 2011). . The H. Heinz Heise. Архів оригіналу за 17 лютого 2018. Процитовано 11 лютого 2012.
- Rose, John (2 грудня 2011). A Day with PyPy. Oracle Corporation. Архів оригіналу за 26 травня 2012. Процитовано 11 лютого 2012.
- Gaynor, Alex (12 серпня 2011). Quora is now running on PyPy. Quora. Архів оригіналу за 26 травня 2012. Процитовано 11 лютого 2012.
Посилання
- Офіційний сайт
- PyPy на Launchpad
- Official status blog [ 11 лютого 2012 у Wayback Machine.]
- PyPy nightly benchmark run [ 1 червня 2020 у Wayback Machine.]
- Python in Python: The PyPy System [ 11 травня 2011 у Wayback Machine.] — technical talk by the designer of PyPy (video archive)
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
PyPy realizaciya movi programuvannya Python interpretator ta JIT kompilyator napisani na movi Python vikoristovuyetsya statichno tipizovana pidmnozhina RPython Restricted Python Proekt maye za metu shvidkodiyu efektivnist ta 100 sumisnist z klasichnoyu realizaciyeyu Python na movi Si CPython PyPyTip interpretator ta kompilyator yak nabir instrumentiv PythonStabilnij vipusk 5 9 5 zhovtnya 2017 6 rokiv tomu 2017 10 05 Operacijna sistema kros platformovijMova programuvannya PythonStan rozrobki aktivnijLicenziya MIT LicenseRepozitorij github com pypy pypyVebsajt pypy org Zavdyaki zaluchennyu JIT kompilyatora kotrij na lotu translyuye deyaki elementi v mashinnij kod PyPy pri vikonanni deyakih operacij v kilka raziv obganyaye u produktivnosti originalnij interpretator CPython Cinoyu visokoyi produktivnosti ta vikoristannya JIT kompilyaciyi ye bilshe spozhivannya pam yati zagalne spozhivannya pam yati v skladnih i trivalo pracyuyuchih procesah napriklad pri translyaciyi PyPy silami samogo PyPy perevishuye spozhivannya CPython v pivtora dva razi Istoriya proektuPyPy ye prodovzhennyam proektu Psyco JIT kompilyatora dlya Python rozroblenogo Arminom Rigo Armin Rigo Meta PyPy v tomu shob mati JIT kompilyator z ohoplennyam yake ne bulo dostupne dlya Psyco PyPy pochavsya yak doslidnickij proekt dlya rozrobnikiv Zrila stadiya rozvitku i oficijna versiya 1 0 bula dosyagnuta v seredini 2007 roku nastupnij akcent buv zroblenij na vipusku production ready versiyi z bilshoyu sumisnistyu z CPython Versiyu 1 1 bula vipusheno 28 kvitnya 2009 roku U berezni 2010 roku vijshla versiya 1 2 v yakij osoblivu uvagu bulo pridileno shvidkosti Cya versiya vklyuchaye v sebe JIT kompilyator yakij pracyuye ale ne rekomendovanij dlya vikoristannya v production 26 listopada 2010 bula vipushena versiya 1 4 Cya versiya vpershe v rezhimi JIT kompilyatora po shvidkosti perevershuye CPython Takozh rozrobniki vvazhayut sho cya versiya gotova dlya vikoristannya v production U chervni 2014 vijshla persha stabilna versiya z pidtrimkoyu Python 3 gilka PyPy3 rozvivayetsya sinhronno z PyPy i vidriznyayetsya pidtrimkoyu Python 3 Cili proektuPyPy buv zadumanij yak realizaciya Python napisana na Python Toj fakt sho PyPy realizovanij na movi visokogo rivnya robit jogo gnuchkishim i dozvolyaye legshe eksperimentuvati z novimi mozhlivostyami nizh CPython i legko viznachiti oblasti de vin mozhe buti polipshenij PyPy poklikanij zabezpechiti yedinij mehanizm translyaciyi Vin pidtrimuye frejmvork dlya realizaciyi dinamichnih mov programuvannya i zdijsnyuye chitkij podil mizh specifikaciyeyu movi ta yiyi realizaciyeyu Vin takozh poklikanij zabezpechiti sumisnist gnuchkist i shvidkist realizaciyi movi programuvannya Python i dozvolyaye realizovuvati novi mozhlivosti bez neobhidnosti programuvannya na movi nizkogo rivnya TranslyaciyaPyPy skladayetsya z standartnogo interpretatora i translyatora Interpretator povnistyu realizuye movu Python vikoristovuyuchi obmezhenu pidmnozhinu movi zvanu RPython Restricted Python Na vidminu vid standartnogo Python RPython ye statichno tipizovanim dlya efektivnishoyi kompilyaciyi Translyator ye naborom instrumentiv yakij analizuye kod RPython i perevodit jogo v movi nizhchogo rivnya taki yak C bajt kod Java abo CIL Vin takozh pidtrimuye spilni zbirachi smittya i dozvolyaye opcionalno vklyuchati Stackless Takozh vin vklyuchaye JIT kompilyator dlya translyaciyi kodu v mashinni instrukciyi pid chas vikonannya programi RPython Sam interpretator PyPy napisanij u obmezhenij pidmnozhini Python pid nazvoyu RPython obmezhenij Python RPython nakladaye deyaki obmezhennya na movu Python tak sho tip zminnoyi mozhna viznachiti pid chas kompilyaciyi Proekt PyPy rozrobiv lancyuzhok instrumentiv yakij analizuye kod RPython i peretvoryuye jogo u formu bajtovogo kodu yakij mozhna opustiti v C Ranishe krim C isnuvali inshi bekendi Java ta Javascript ale ti sho postrazhdali vid bitrotiv i buli vidaleni Takim chinom rekursivnij logotip PyPy ce zmiya yaka kovtaye sebe oskilki RPython perekladayetsya interpretatorom Python Kod takozh mozhna zapuskati v neperekladenomu viglyadi dlya testuvannya ta analizu sho zabezpechuye horoshij testovij majdanchik dlya doslidzhennya dinamichnih mov Vin dozvolyaye pidklyuchati zbirachi smittya a takozh dodatkovo vklyuchati funkciyi Stackless Python Nareshti vin vklyuchaye generator JIT just in time yakij vbudovuye kompilyator just in time v interpretator z oglyadu na kilka anotacij u vihidnomu kodi interpretatora Zgenerovanij kompilyator JIT ye trasuvannyam JIT Teper RPython takozh vikoristovuyetsya dlya napisannya ne Python movnih realizacij takih yak Pixie PyPy yak zasib realizaciyi interpretatorivKompilyator movi RPython mozhna vikoristovuvati i dlya napisannya interpretatoriv z inshih mov programuvannya Dodavshi v kod takogo interpretatora import klasu JitDriver i stvorennya jogo primirnik a potim peredavshi v cej klas spiski globalnih zminnih zminnih i nezminnih v hodi vikonannya programi a takozh zrobivshi she kilka ochevidnih deklaracij mi pislya translyaciyi z praporcem opt jit otrimuyemo pracyuyuchij JIT kompilyator movi Pidtrimuvani bekendiC translyaciya kodu RPython v C i zapusk yak ridnoyi programi ce standartnij rezhim roboti CIL Common Intermediate Language JVM virtualna mashina Java Python translyator PyPy takozh mozhe buti zapushenij v interpretatori Python hocha shvidkist roboti bude vkraj nizkoyu cya mozhlivist korisna dlya znevadzhennya Stanom na 2010 PyPy vidmovivsya vid JavaScript yak bekendu Sumisnist z CPythonVersiya 1 4 sumisna z versiyeyu Python 2 5 i mozhe pracyuvati na 32 h i 64 h bitnih platformah PyPy povnistyu pidtrimuye moduli napisani na chistomu Python Dlya vikoristannya binarnih so i pyd rozshiren PyPy maye pochatkovu pidtrimku API CPython u viglyadi okremogo modulya cpyext Dlya normalnoyi roboti cih rozshiren potribno yih perekompilyaciya Vidomo sho taki biblioteki i frejmvorki mozhut pracyuvati v PyPy ctypes django bazi danih ne pidtrimuyutsya za vinyatkom sqlite bez pidtrimki SSL pylons en pygletVinoski Arhiv originalu za 2 kvitnya 2012 Procitovano 11 lyutogo 2012 Arhiv originalu za 9 bereznya 2012 Procitovano 11 lyutogo 2012 Pervyj stabilnyj vypusk PyPy3 s podderzhkoj Python 3 23 chervnya 2014 u Wayback Machine opennet ru 21 06 2014 Samuele Pedroni March 2007 PyPy Goals and Architecture Overview Arhiv originalu za 30 chervnya 2012 Procitovano 11 lyutogo 2012 It is a proper subset of Python restricted in a way that enables easy analysis and efficient code generation Ancona et al 2007 Cory Althoff 2016 Triangle Connection Arhiv originalu za 6 veresnya 2021 Procitovano 21 veresnya 2021 It is a proper subset of Python restricted in a way that enables easy analysis and efficient code generation Ancona et al 2007 Bolz Carl Cuni Antonio Fijalkowski Maciej Rigo Armin Tracing the Meta Level PyPy s Tracing JIT Compiler ICOOOLPS 09 doi 10 1145 1565824 1565827 Timothy Balridge interview 3 bereznya 2016 u Wayback Machine Andrew Brown Tutorial Writing an Interpreter with PyPy Part 1 3 bereznya 2012 u Wayback Machine Part 2 Adding a JIT 3 bereznya 2012 u Wayback Machine Kerivnictvo pishemo interpretator z JIT na PyPy pereklad 8 lyutogo 2012 u Wayback Machine Repozitorij sircevogo kodu 26 sichnya 2012 u Wayback Machine U statti opisuyetsya realizaciya Brainfuck na https web archive org web 20121009143354 http www mail archive com pypy dev codespeak net msg03946 html Arhivovano9 zhovtnya 2012 u Wayback Machine Re pypy dev pypy appears to have entirely removed all mention of javascript Arhiv originalu za 7 chervnya 2021 Procitovano 11 lyutogo 2012 LiteraturaDavide Ancona Massimo Ancona Antonio Cuni Nicholas D Matsakis 2007 RPython a Step Towards Reconciling Dynamically and Statically Typed OO Languages nedostupne posilannya z lyutogo 2019 In Proc Dynamic Language Symposium DLS 2007 ACM Press Carl Friedrich Bolz Antonio Cuni Maciej Fijalkowski 2009 In Proc ICOOOLPS 2009 ACM Press Corbet Jonathan 19 travnya 2010 PyPy the other new compiler project Arhiv originalu za 26 travnya 2012 Procitovano 11 lyutogo 2012 Corbet Jonathan 11 travnya 2011 A brief experiment with PyPy Arhiv originalu za 26 travnya 2012 Procitovano 11 lyutogo 2012 von Eitzen Chris 21 listopada 2011 The H Heinz Heise Arhiv originalu za 17 lyutogo 2018 Procitovano 11 lyutogo 2012 Rose John 2 grudnya 2011 A Day with PyPy Oracle Corporation Arhiv originalu za 26 travnya 2012 Procitovano 11 lyutogo 2012 Gaynor Alex 12 serpnya 2011 Quora is now running on PyPy Quora Arhiv originalu za 26 travnya 2012 Procitovano 11 lyutogo 2012 PosilannyaOficijnij sajt PyPy na Launchpad Official status blog 11 lyutogo 2012 u Wayback Machine PyPy nightly benchmark run 1 chervnya 2020 u Wayback Machine Python in Python The PyPy System 11 travnya 2011 u Wayback Machine technical talk by the designer of PyPy video archive