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.[4] Mittlerweile ist PyPy in einer überwiegenden Zahl von Benchmarks schneller als CPython,[5] – und in Sonderfällen sogar schneller als C.[6]
PyPy
| |
---|---|
![]() | |
Basisdaten
| |
Entwickler | Armin Rigo, Samuele Pedroni, Christian Tismer, Holger Krekel u. a. |
Erscheinungsjahr | 2007 |
Aktuelle Version | 7.3.19[1] (26. Februar 2025) |
Betriebssystem | Windows, macOS, Linux, FreeBSD[2], u. v. m. |
Programmiersprache | Python[3], RPython |
Kategorie | Just-in-time-Compiler |
Lizenz | MIT-Lizenz |
pypy.org |
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 entwickelte Programmbibliotheken unterstützt werden.
Komponenten
PyPy besteht aus zwei Hauptkomponenten:
- dem Standard Interpreter, einer Implementierung eines Python-Interpreters in einer beschränkten Untermenge von Python.
- 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.
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.[7]
PyPy wurde von der Europäischen Union in einem Forschungsrahmenprogramm gefördert.[8] 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.[9] Version 1.5 wiederum ist kompatibel zu Python 2.7.[10] Version 1.5 soll um 25 % schneller als die Vorgängerversion sein.[11]
Von der Version 2.1 an lässt sich die Software auf der ARM-Architektur ausführen.[12]
Ab Version 2.3 unterstützt PyPy das Betriebssystem OpenBSD[13], ab Version 2.3.1 unterstützt PyPy auch Python 3[14] und ab Version 2.4 wird Python 2.7.8 als Standardbibliothek unterstützt.[15][16]
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.[17]
Die aktuelle Version 6.0 ermöglicht es Entwicklern mithilfe von Hooks einen Einblick in die Rechenleistung der automatischen Speicherbereinigung zu bekommen.[18][19]
Siehe auch
- Jython
- IronPython
- Stackless Python
- nuitka, kompiliert Python-Programme nach C
- Numba (Softwarepaket), welches einzelne Python-Funktionen zu Maschinencode kompiliert
Weblinks
- Offizielle Website
- Interview mit Entwickler Holger Krekel über Python und PyPy in CRE (Podcast)
- PyPy – the new Python implementation on the block – Aufzeichnung eines Vortrags über PyPy vom Chaos Communication Congress
- PyPy Blog
Einzelnachweise
- ↑ PyPy v7.3.19 release. (abgerufen am 12. März 2025).
- ↑ FreshPorts -- lang/pypy. In: FreshPorts. Abgerufen am 8. März 2017.
- ↑ The pypy Open Source Project on Open Hub: Languages Page. In: Open Hub. (abgerufen am 26. September 2018).
- ↑ Maciej Fijalkowski: As fast as CPython (for carefully taken benchmarks). März 2008, abgerufen am 26. Februar 2017 (englisch).
- ↑ How fast is PyPy? Abgerufen am 26. Februar 2017 (englisch).
- ↑ 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.
- ↑ Speed Center
- ↑ PyPy EU project page. Abgerufen am 17. Oktober 2013.
- ↑ PyPy 1.1: Compatibility & Consolidation. Abgerufen am 26. Februar 2017 (englisch).
- ↑ PyPy 1.5 Released: Catching Up. Abgerufen am 26. Februar 2017 (englisch).
- ↑ PyPy 1.5 schließt zu CPython 2.7.1 auf. Abgerufen am 10. Mai 2011.
- ↑ PyPy 2.1 - Considered ARMful. 1. August 2013, abgerufen am 15. August 2018 (englisch).
- ↑ PyPy 2.3. Abgerufen am 15. August 2018 (englisch).
- ↑ PyPy kann nach Update auch Python 3. Abgerufen am 15. August 2018.
- ↑ PyPy 2.4. 23. Juni 2014, abgerufen am 15. August 2018 (englisch).
- ↑ Strukturelle Änderungen beschleunigen PyPy 2.4. 24. September 2014, abgerufen am 15. August 2018.
- ↑ CPython-Altenative PyPy 4.0.0 kann SIMD-Vektorisierung. 30. Oktober 2015, abgerufen am 15. August 2018.
- ↑ PyPy 6.0 setzt auf Performance und Kompatibilität. 27. April 2018, abgerufen am 15. August 2018.
- ↑ PyPy2.7 and PyPy3.5 v6.0 dual release. Abgerufen am 15. August 2018 (englisch).