Кіріспе

Python бағдарламалау тілінің баламалы іске асырылуы

PyPy (/'//p//aɪ//p//aɪ/) – Python бағдарламалау тілінің іске асырылуы. PyPy көбінесе стандартты CPython іске асырылуынан жылдам жұмыс істейді, себебі PyPy уақытында компиляциялайтын құралды қолданады. CPython кеңейтімдеріне тәуелді кодты қоспағанда, көптеген Python кодтары PyPy-де жақсы жұмыс істейді, ал олар PyPy-де жұмыс істемей немесе қосымша жүктемелерге тап болуы мүмкін. PyPy өзі мета-іздер деп аталатын техниканы пайдаланып құрылған, бұл көбінесе автоматты түрлендіру болып табылады, ол интерпретаторды кіріс ретінде қабылдап, уақытында іздеу компиляторын шығарады. Интерпретаторларды жазу, әдетте, компиляторларға қарағанда оңайрақ, бірақ олар баяу жұмыс істейді. Сондықтан, бұл техника бағдарламалау тілдерінің тиімді іске асырылуын жасауды жеңілдетеді. PyPy-нің мета-іздер құралының жиынтығы RPython деп аталады. PyPy CPython экожүйесінің жаңа нұсқаларымен толық үйлесімді емес. Ол Python 2.7, 3.7, 3.8 және 3.9 нұсқаларымен ("CPython-ды ауыстыруға дайын") үйлесімді екенін мәлімдесе де, Python 3.10-дағы кейбір жаңа мүмкіндіктер мен синтаксис, мысалы, үлгілерді сәйкестендіру синтаксисі, оған жетіспейді.

Деректер мен мотивация

PyPy динамикалық тілдердің іске асырылуын жасау үшін ортақ аударма және қолдау аясын ұсынуды мақсат етеді, бұл ретте тілдің сипаттамасы мен іске асыру ерекшеліктерін анық бөлуге баса назар аударады. Сонымен қатар, бұл аяны пайдаланып, Python бағдарламалау тілінің сәйкес, икемді және жылдам нұсқасын жасауды көздейді, осы арқылы төменгі деңгейдегі егжей-тегжейлерді енгізбестен жаңа, жетілдірілген мүмкіндіктерді енгізуге мүмкіндік береді.

RPython-тың атауы

PyPy интерпретаторының өзі Python тілінің RPython (Restricted Python) деп аталатын шектеулі жиынтығында жазылған. RPython Python тіліне айнымалының түрін компиляция уақытында анықтауға мүмкіндік беретін бірнеше шектеулер қояды. PyPy жобасы RPython кодын талдап, оны байт-кодқа аударатын және оны C тіліне төмендетуге болатын құралдар жиынтығын жасады. Бұрын C-ден басқа (Java, C# және Javascript) да басқа да backend-тер болған, бірақ олар уақыт өте келе қолданудан шығып, алынып тасталды. Сондықтан PyPy-дың рекурсивті логотипі – RPython-ды Python интерпретаторы аударғандықтан, өзін-өзі жұтатын жылан бейнесін көрсетеді. Кодты тестілеу және талдау үшін аудармасыз да орындауға болады, бұл динамикалық тілдерді зерттеу үшін өте қолайлы сынақ алаңы болып табылады. Ол қосымша қоқыс жинағыштарды қолдауға мүмкіндік береді, сондай-ақ Stackless Python мүмкіндіктерін қосуға рұқсат етеді. Соңында, ол интерпретатордың бастапқы кодындағы белгілі бір түсіндірмелер негізінде интерпретаторға JIT (just-in-time) компиляторын құрауға арналған генераторды қамтиды. Құрылған JIT компиляторы – іздеу JIT компиляторы. RPython қазір Pixie сияқты Python емес тілдерді жүзеге асыру үшін де қолданылады.

Жобаның жағдайы

7.3.7 нұсқасынан бастап PyPy үш CPython нұсқасымен үйлесімді: 2.7, 3.7 және 3.8. CPython v3-мен үйлесімді алғашқы PyPy нұсқасы – PyPy v2.3.1 (2014). CPython v3-ке үйлесімді PyPy интерпретаторы PyPy3 деп те аталады. PyPy 32 бит/64 бит x86 және 32 бит/64 бит ARM процессорларында JIT компиляциясын қолдайды. Ол Windows, Linux, OpenBSD және Mac OS X жүйелерінде күнделікті сынақтан өтеді. PyPy таза Python бағдарламалық қамтамасын, орындалуына жүйеге қатысты ерекшеліктерге тәуелді болмайтын, іске қоса алады. CPyExt деп аталатын CPython C API кеңейтімдері үшін үйлесімділік қабаты бар, бірақ ол толық емес және тәжірибелік. C ортақ кітапханаларымен байланысудың басым жолы – C сыртқы функция интерфейсі (CFFI) немесе ctypes кітапханалары арқылы.

Қаржыландыру

PyPy 2004 жылдың желтоқсаны мен 2007 жылдың наурызы аралығында Еуропалық Одақтан арнайы мақсатты зерттеу жобасы ретінде қаржыландырылды. 2008 жылдың маусым айында PyPy Google Open Source бағдарламаларының аясында қаржыландырылатынын хабарлады және PyPy-ді CPython-мен үйлесімді етуге баса назар аударуға келісті. 2009 жылы Еуропалық Одақтың шағын және орта кәсіпорындарға бағытталған Eurostars қаржы агенттігі PyPy жобасының қатысушылары ұсынған "PYJIT – PyPy негізіндегі динамикалық бағдарламалау тілдері үшін жылдам және икемді құралдар жиынтығы" деген жобаны қабылдады. Eurostars қаржыландыруы 2011 жылдың тамызына дейін созылды. PyCon US 2011 конференциясында Python Software Foundation PyPy-ге тілдің жаңа нұсқаларымен жұмыс істеу және үйлесімділікті жақсарту үшін 10 000 доллар көлемінде грант берді. ARM архитектурасына порттауға Raspberry Pi Foundation да демеушілік етті. 2013 жылға қарай, бірнеше қосалқы жобалар қаржыландырылды: Python 3 нұсқасымен үйлесімділік, сандық есептеулер үшін оптимизацияланған NumPy қолдауы және жақсырақ параллелизмді қамтамасыз ету үшін бағдарламалық транзакциялық жад қолдауы.