PyPy explained

PyPy
Released:mid
Programming Language:RPython
Operating System:Cross-platform
Genre:Python interpreter and compiler toolchain
License:MIT

PyPy is an implementation of the Python programming language.[1] PyPy often runs faster than the standard implementation CPython because PyPy uses a just-in-time compiler.[2] 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.[3]

Details and motivation

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.[4] [5]

RPython

The PyPy interpreter itself is written in a restricted subset of Python called RPython (Restricted Python).[6] RPython puts some constraints on the Python language such that a variable's type can be inferred at compile time.[7]

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.[8]

RPython is now also used to write non-Python language implementations, such as Pixie.[9]

Project status

PyPy as of version 7.3.7 is compatible with three CPython versions: 2.7, 3.7 and 3.8.[10] [11] The first PyPy version compatible with CPython v3 is PyPy v2.3.1 (2014).[12] 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.[13] 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.[14]

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.

History

PyPy is a followup to the Psyco project, a just-in-time specializing compiler for Python, developed by Armin Rigo between 2002 and 2010. PyPy's aim is to have a just-in-time specializing compiler with scope, which was not available for Psyco. Initially, the RPython could also be compiled into Java bytecode, CIL and JavaScript, but these backends were removed due to lack of interest.

PyPy was initially a research and development-oriented project. Reaching a mature state of development and an official 1.0 release in mid-2007, its next focus was on releasing a production-ready version with more CPython compatibility. Many of PyPy's changes have been made during coding sprints.

Funding

PyPy was funded by the European Union being a Specific Targeted Research Project[30] 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,[31] 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.[32] 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.[33] The port to ARM architecture was sponsored in part by the Raspberry Pi Foundation.

The PyPy project also accepts donations through its status blog pages.[34] 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.

See also

References

Notes and References

  1. Web site: Interview Maciej Fijalkowski PyPy. 29 November 2015 .
  2. Web site: PyPy Speed. speed.pypy.org. 2019-12-01.
  3. Web site: PEP 634 -- Structural Pattern Matching: Specification. 2021-02-15. Python.org. en.
  4. Web site: Samuele Pedroni . March 2007 . PyPy – Goals and Architecture Overview . https://web.archive.org/web/20120614024217/http://doc.pypy.org/en/latest/architecture.html#mission-statement . dead . 2012-06-14 .
  5. Web site: 11 October 2013 . PyPy – Goals and Architecture Overview – Mission Statement .
  6. https://doc.pypy.org/en/latest/coding-guide.html#our-runtime-interpreter-is-rpython Our runtime interpreter is “RPython”
  7. "It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation", Ancona et al., 2007.
  8. Tracing the Meta-Level: PyPy's Tracing JIT Compiler . 10.1145/1565824.1565827 . Bolz . Carl . Cuni . Antonio . Fijalkowski . Maciej . Rigo . Armin . ICOOOLPS '09.
  9. https://medium.com/this-is-not-a-monad-tutorial/indie-languages-interview-pixie-and-timothy-baldridge-cadbc36418dc Timothy Balridge interview
  10. Web site: PyPy – Python compatibility . 2020-12-15 . pypy.org. 28 December 2019 .
  11. Web site: PyPy v7.3.7: bug-fix release of 3.7, 3.8 . 2021-11-10 . pypy.org. 25 October 2021 .
  12. News: 20 June 2014 . the PyPy team . PyPy3 2.3.1 – Fulcrum . PyPy blog .
  13. News: 16 October 2019 . PyPy v7.2.0: release of 2.7, and 3.6 . .
  14. Web site: PyPy – Python compatibility . 28 December 2019.
  15. Web site: Running pylons on top of PyPy . 10 June 2008.
  16. Web site: Running Pyglet on top of PyPy . 20 February 2008.
  17. Web site: Running Nevow on top of PyPy. 20 June 2008.
  18. Web site: PyPy runs unmodified django 1.0 beta . 19 August 2008.
  19. Web site: Introducing the PyPy 1.2 release . 30 April 2011.
  20. Web site: PyPy 1.5 Released: Catching Up . 12 March 2010.
  21. News: 15 May 2013 . Jake Edge . A look at the PyPy 2.0 release . .
  22. Web site: PyPy 2.0 – Einstein Sandwich . 9 May 2013.
  23. Web site: PyPy2.7 and PyPy3.5 v5.7 – two in one release . 21 March 2017.
  24. Web site: PyPy2.7 and PyPy3.5 v6.0 dual release . 26 April 2018.
  25. Web site: Cuni. Antonio. 2019-02-11. PyPy Status Blog: PyPy v7.0.0: triple release of 2.7, 3.5 and 3.6-alpha. 2020-08-17. PyPy Status Blog.
  26. Web site: Mattip. 2019-10-14. PyPy Status Blog: PyPy v7.2 released. 2020-08-17. PyPy Status Blog.
  27. Web site: Mattip. 2019-12-24. PyPy Status Blog: PyPy v7.3.0 released. PyPy Status Blog.
  28. Web site: PyPy and CFFI have moved to Heptapod. 16 February 2020.
  29. Web site: PyPy has moved to Git, GitHub. 29 December 2023.
  30. Web site: EU Community Research and Development Information Service Entry .
  31. Web site: Eurostars – Aim Higher .
  32. Web site: Project Page on Eureka Network . 2011-10-17 . 2012-04-03 . https://web.archive.org/web/20120403075231/http://www.eurekanetwork.org/project/-/id/4791 . dead .
  33. Web site: A thank you to the PSF. 22 March 2011.
  34. Web site: PyPy Status Blog: Oh, and btw: PyPy gets funding through "Eurostars". 10 December 2010.