PyPy – Python бағдарламалау тілінің жылдам әрі тиімді нұсқасы. JIT құрастырушысы арқасында CPython-нан озып шығады. Қолдау көрсетілмейтін модульдерге назар аударыңыз!
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Python бағдарламалау тілінің баламалы іске асырылуы
Alternative implementation of the Python programming language
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 (/'//p//aɪ//p//aɪ/) is an implementation of the Python programming language. PyPy often runs faster than the standard implementation CPython because PyPy uses a just in time compiler. Most Python code runs well on PyPy except for code that depends on CPython extensions, which either does not work or incurs some overhead when run in PyPy. PyPy itself is built using a technique known as meta tracing, which is a mostly automatic transformation that takes an interpreter as input and produces a tracing just in time compiler as output. Since interpreters are usually easier to write than compilers, but run slower, this technique can make it easier to produce efficient implementations of programming languages. PyPy's meta tracing toolchain is called RPython. PyPy does not have full compatibility with more recent versions of the CPython ecosystem. While it claims compatibility with Python 2.7, 3.7, 3.8 and 3.9 ("a drop in replacement for CPython"), it lacks some of the newer features and syntax in Python 3.10, such as syntax for pattern matching.
Деректер мен мотивация
PyPy динамикалық тілдердің іске асырылуын жасау үшін ортақ аударма және қолдау аясын ұсынуды мақсат етеді, бұл ретте тілдің сипаттамасы мен іске асыру ерекшеліктерін анық бөлуге баса назар аударады. Сонымен қатар, бұл аяны пайдаланып, Python бағдарламалау тілінің сәйкес, икемді және жылдам нұсқасын жасауды көздейді, осы арқылы төменгі деңгейдегі егжей-тегжейлерді енгізбестен жаңа, жетілдірілген мүмкіндіктерді енгізуге мүмкіндік береді.
PyPy aims to provide a common translation and support framework for producing implementations of dynamic languages, emphasizing a clean separation between language specification and implementation aspects. It also aims to provide a compliant, flexible and fast implementation of the Python programming language using the above framework to enable new advanced features without having to encode low level details into it.
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 емес тілдерді жүзеге асыру үшін де қолданылады.
The PyPy interpreter itself is written in a restricted subset of Python called RPython (Restricted Python). RPython puts some constraints on the Python language such that a variable's type can be inferred at compile time. The PyPy project has developed a toolchain that analyzes RPython code and translates it into a form of byte code, which can be lowered into C. There used to be other backends in addition to C (Java, C#, and Javascript), but those suffered from bitrot and have been removed. Thus, the recursive logo of PyPy is a snake swallowing itself since the RPython is translated by a Python interpreter. The code can also be run untranslated for testing and analysis, which provides a nice test bed for research into dynamic languages. It allows for pluggable garbage collectors, as well as optionally enabling Stackless Python features. Finally, it includes a just in time (JIT) generator that builds a just in time compiler into the interpreter, given a few annotations in the interpreter source code. The generated JIT compiler is a tracing JIT. RPython is now also used to write non Python language implementations, such as Pixie.
Жобаның жағдайы
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 as of version 7.3.7 is compatible with three CPython versions: 2.7, 3.7 and 3.8. The first PyPy version compatible with CPython v3 is PyPy v2.3.1 (2014). The PyPy interpreter compatible with CPython v3 is also known as PyPy3. PyPy has JIT compilation support on 32 bit/64 bit x86 and 32 bit/64 bit ARM processors. It is tested nightly on Windows, Linux, OpenBSD and Mac OS X. PyPy is able to run pure Python software that does not rely on implementation specific features. There is a compatibility layer for CPython C API extensions called CPyExt, but it is incomplete and experimental. The preferred way of interfacing with C shared libraries is through the built in C foreign function interface (CFFI) or ctypes libraries.
Қаржыландыру
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 қолдауы және жақсырақ параллелизмді қамтамасыз ету үшін бағдарламалық транзакциялық жад қолдауы.
PyPy was funded by the European Union being a Specific Targeted Research Project between December 2004 and March 2007. In June 2008, PyPy announced funding being part of the Google Open Source programs and has agreed to focus on making PyPy more compatible with CPython. In 2009 Eurostars, a European Union funding agency specially focused on SMEs, accepted a proposal from PyPy project members titled "PYJIT – a fast and flexible toolkit for dynamic programming languages based on PyPy". Eurostars funding lasted until August 2011. At PyCon US 2011, the Python Software Foundation provided a $10,000 grant for PyPy to continue work on performance and compatibility with newer versions of the language. The port to ARM architecture was sponsored in part by the Raspberry Pi Foundation. As of 2013, a variety of sub projects had funding: Python 3 version compatibility, built in optimized NumPy support for numerical calculations and software transactional memory support to allow better parallelism.