PyPy

aus Wikipedia, der freien Enzyklopädie
PyPy

Pypy logo (2011).png
Basisdaten

Entwickler Armin Rigo, Samuele Pedroni, Christian Tismer, Holger Krekel u. a.
Betriebssystem Windows, macOS, Linux, FreeBSD[1], u. v. m.
Kategorie Just-in-time-Compiler
Lizenz MIT-Lizenz
pypy.org

PyPy ist ein Just-in-time-Compiler für die Programmiersprache Python, der selbst in Python geschrieben ist. Da die Programmierer mit einer Python-Implementierung in Python selbst (und nicht in C, wie dies bei der Referenzimplementierung CPython der Fall ist) experimentieren können, macht PyPy es einfacher, Bereiche zu finden, in denen die Python-Implementierung verbessert werden kann. Darüber hinaus erlaubt PyPy den Entwicklern durch seine Flexibilität, mit mehreren Implementierungen eines speziellen Features zu experimentieren. Eines der Ziele des Projektes war es, einen Python-Interpreter zu entwickeln, der schneller als CPython ist, was im März 2008 erstmals gelang.[2] Mittlerweile ist PyPy in einer überwiegenden Zahl von Benchmarks schneller als CPython[3] – und in Sonderfällen sogar schneller als C.[4]

Streng genommen akzeptiert PyPy keine Programme in Python, sondern eine reduzierte Sprache namens RPython. Während alle RPython-Programme ohne Umwandlungen als Python-Programme lauffähig sind, ist dies umgekehrt nicht immer der Fall. Die Reduktion auf RPython wurde notwendig, damit PyPy eine statische Typisierung von Python-Objekten durchführen kann. PyPy ist von Vorteil, wenn die Laufzeit von Python-Programmen reduziert werden soll. Nachteilig ist, dass nicht alle für Python entwickelten Programmbibliotheken unterstützt werden. So gibt es etwa von NumPy eine RPython-Variante, die etwa 80 % der Geschwindigkeit des in C implementierten Originals erreicht, aber nicht voll kompatibel ist, und die Alternative, das Original über eine Zwischenschicht zu nutzen, was aber sehr langsam ist.[5]

Komponenten

PyPy besteht aus zwei Hauptkomponenten:

  1. dem Standard Interpreter, einer Implementierung eines Python-Interpreters in einer beschränkten Untermenge von Python.
  2. einer RPython-Toolchain, die in der Lage ist, die oben erwähnte Untermenge von Python in Assembler-Code zu übersetzen. Dieser Code wird dann direkt auf dem Prozessor ausgeführt, anstelle in einer Software.

RPython

Der PyPy-Interpreter selbst ist in einer eingeschränkten Teilmenge von Python namens RPython (Restricted Python) geschrieben. RPython erlegt der Python-Sprache einige Einschränkungen auf, sodass der Typ einer Variablen zur Kompilierzeit abgeleitet werden kann.[6]

Das PyPy-Projekt hat eine Toolchain entwickelt, die RPython-Code analysiert und in eine Form von Byte-Code übersetzt, der in C abgesenkt werden kann. Früher gab es neben C noch andere Backends: Java, CSharp und JavaScript, aber diese litten unter bit rot und wurden entfernt. Somit ist das rekursive Logo von PyPy eine Schlange, die sich selbst verschluckt, da das RPython von einem Python-Interpreter übersetzt wird. Der Code kann zu Test- und Analysezwecken auch unübersetzt ausgeführt werden, was eine gute Testumgebung für die Erforschung dynamischer Sprachen bietet.[7]

Entwicklungsgeschichte

Von Version 1.2 an gibt es einen JIT-Compiler, der hauptsächlich aus Integerarithmetik bestehenden Code teilweise deutlich schneller ausführt als Psyco.[8]

PyPy wurde von der Europäischen Union in einem Forschungsrahmenprogramm gefördert.[9] Die Förderung lief im ersten Quartal 2007 nach 28 Monaten aus.

Während Version 1.0 hauptsächlich die Ergebnisse des EU-Forschungsprojektes bündelte, konzentriert sich Version 1.1 auf Kompatibilität mit CPython 2.5 sowie Stabilität und Fehlerfreiheit.[10] Version 1.5 wiederum ist kompatibel zu Python 2.7.[11] Version 1.5 soll um 25 % schneller als die Vorgängerversion sein.[12]

Von der Version 2.1 an lässt sich die Software auf der ARM-Architektur ausführen.[13]

Ab Version 2.3 unterstützt PyPy das Betriebssystem OpenBSD[14], ab Version 2.3.1 unterstützt PyPy auch Python 3[15] und ab Version 2.4 wird Python 2.7.8 als Standardbibliothek unterstützt.[16][17]

Um sich von den aktuellen Versionen des Python-Interpreters CPython besser zu unterscheiden, sprang PyPy nach dem Release der Version 2.4 auf die Version 4.0. Diese Version brachte als wichtigste Neuerung Unterstützung für SIMD mit sich.[18]

Version 6.0 lieferte 2018 zwei Versionen, die kompatibel sind mit CPython 2.7 bzw. 3.5, und ermöglichte es Entwicklern, mithilfe von Hooks einen Einblick in die Rechenleistung der automatischen Speicherbereinigung zu bekommen.[19][20]

Versionen 7.0.0, 7.3.2, 7.3.6 und 7.3.8 (2022) brachten Kompatibilität mit CPython 3.6, 3.7, 3.8 bzw. 3.9, und ab 7.3.4 wurde Windows-64 unterstützt.[21]

Siehe auch

Weblinks

Einzelnachweise

  1. FreshPorts -- lang/pypy. In: FreshPorts . Abgerufen am 8. März 2017.
  2. Maciej Fijalkowski: As fast as CPython (for carefully taken benchmarks). März 2008, abgerufen am 26. Februar 2017 (englisch).
  3. How fast is PyPy? Abgerufen am 26. Februar 2017 (englisch).
  4. Z. B., wenn PyPy Funktionen aus externen Dateien lädt; diese werden dann ins Hauptprogramm aufgenommen. Ein statischer Compiler wie C integriert jedoch in der Regel keine Funktionen aus externen Dateien. PyPy faster than C on a carefully crafted example. In: morepypy-Blog. 4. Februar 2011, abgerufen am 27. August 2018.
  5. FAQ – What about numpy, numpypy, micronumpy? Abgerufen am 27. September 2022.
  6. "It is a proper subset of Python, restricted in a way that enables easy analysis and efficient code generation", Ancona et al., 2007.
  7. Zed Shaw: Learn Python the hard way. Addison-Wesley, 2017, ISBN 978-0134692883.
  8. Speed Center
  9. PyPy EU project page. Abgerufen am 17. Oktober 2013.
  10. PyPy 1.1: Compatibility & Consolidation. Abgerufen am 26. Februar 2017 (englisch).
  11. PyPy 1.5 Released: Catching Up. Abgerufen am 26. Februar 2017 (englisch).
  12. PyPy 1.5 schließt zu CPython 2.7.1 auf. Abgerufen am 10. Mai 2011.
  13. PyPy 2.1 - Considered ARMful. 1. August 2013, abgerufen am 15. August 2018 (englisch).
  14. PyPy 2.3. Abgerufen am 15. August 2018 (englisch).
  15. PyPy kann nach Update auch Python 3. Abgerufen am 15. August 2018.
  16. PyPy 2.4. 23. Juni 2014, abgerufen am 15. August 2018 (englisch).
  17. Strukturelle Änderungen beschleunigen PyPy 2.4. 24. September 2014, abgerufen am 15. August 2018.
  18. CPython-Altenative PyPy 4.0.0 kann SIMD-Vektorisierung. 30. Oktober 2015, abgerufen am 15. August 2018.
  19. PyPy 6.0 setzt auf Performance und Kompatibilität. 27. April 2018, abgerufen am 15. August 2018.
  20. PyPy2.7 and PyPy3.5 v6.0 dual release. Abgerufen am 15. August 2018 (englisch).
  21. PyPy Releases. Abgerufen am 27. September 2022.