Warum war PyPy nicht in Standard-Python enthalten?

165

Ich habe mir PyPy angesehen und mich nur gefragt, warum es nicht in die Haupt-Python-Distributionen übernommen wurde. Würden Dinge wie die JIT-Kompilierung und der geringere Speicherbedarf nicht die Geschwindigkeit des gesamten Python-Codes erheblich verbessern?

Kurz gesagt, was sind die Hauptnachteile von PyPy, die dazu führen, dass es ein separates Projekt bleibt?

KLee1
quelle
4
Außerdem haben Pypy noch keine Unterstützung für Numpy. morepypy.blogspot.ch/2012/09/numpy-on-pypy-status-update.html
rthiago
Und die Numpy-Unterstützung kratzt nur die Oberfläche dessen, was wissenschaftliche Computeranwendungen benötigen würden, bevor sie zu PyPy wechseln. Hier sind einige überzeugende Gedanken des ursprünglichen Numpy-Autors: TechnicalDiscovery.blogspot.com/2011/10/…
Stuart Berg
3
Ich denke, diese Antworten und Kommentare sind veraltet
Marlon Abeykoon

Antworten:

249

PyPy ist keine Abzweigung von CPython, daher kann es niemals direkt in CPython zusammengeführt werden.

Theoretisch könnte die Python-Community PyPy universell übernehmen, PyPy könnte als Referenzimplementierung verwendet werden und CPython könnte eingestellt werden. PyPy hat jedoch seine eigenen Schwächen:

  • CPython lässt sich leicht in Python-Module integrieren, die in C geschrieben sind. Dies ist traditionell die Art und Weise, wie Python-Anwendungen CPU-intensive Aufgaben erledigt haben (siehe zum Beispiel das SciPy-Projekt).
  • Der PyPy JIT-Kompilierungsschritt selbst kostet CPU-Zeit - nur durch wiederholtes Ausführen von kompiliertem Code wird er insgesamt schneller. Dies bedeutet, dass die Startzeiten höher sein können und PyPy daher nicht unbedingt so effizient für die Ausführung von Klebercode oder einfachen Skripten ist.
  • Das Verhalten von PyPy und CPython ist nicht in jeder Hinsicht identisch, insbesondere wenn es um "Implementierungsdetails" geht (Verhalten, das nicht von der Sprache angegeben wird, aber auf praktischer Ebene immer noch wichtig ist).
  • CPython läuft auf mehr Architekturen als PyPy und wurde erfolgreich angepasst, um in eingebetteten Architekturen auf eine Weise ausgeführt zu werden, die für PyPy möglicherweise unpraktisch ist.
  • Das Referenzzählschema von CPython für die Speicherverwaltung hat wahrscheinlich vorhersehbarere Auswirkungen auf die Leistung als die verschiedenen GC-Systeme von PyPy, obwohl dies nicht unbedingt für alle "reinen GC" -Strategien gilt.
  • PyPy unterstützt Python 3.x noch nicht vollständig, obwohl dies ein aktives Arbeitselement ist.

PyPy ist ein großartiges Projekt, aber die Laufzeitgeschwindigkeit bei CPU-intensiven Aufgaben ist nicht alles und in vielen Anwendungen das geringste Problem. Zum Beispiel kann Django auf PyPy ausgeführt werden, was das Templating beschleunigt, aber die Datenbanktreiber von CPython sind schneller als die von PyPy. Welche Implementierung effizienter ist, hängt letztendlich davon ab, wo sich der Engpass in einer bestimmten Anwendung befindet.

Ein weiteres Beispiel: Sie würden denken, PyPy wäre großartig für Spiele, aber die meisten GC-Strategien, wie sie in PyPy verwendet werden, verursachen spürbaren Jitter. Für CPython wird der größte Teil des CPU-intensiven Spiels in die PyGame-Bibliothek verlagert, die PyPy nicht nutzen kann, da PyGame hauptsächlich als C-Erweiterung implementiert ist (siehe jedoch: pygame-cffi). Ich denke immer noch, dass PyPy eine großartige Plattform für Spiele sein kann, aber ich habe noch nie gesehen, dass es tatsächlich verwendet wird.

PyPy und CPython haben radikal unterschiedliche Ansätze für grundlegende Designfragen und machen unterschiedliche Kompromisse, sodass keiner in jedem Fall "besser" ist als der andere.

Andrew Gorcester
quelle
4
Es ist nicht wahr, dass PyPy nicht zum Ausführen von Skripten geeignet ist. Die Startzeit entspricht weitgehend der von CPython und die Interpretationsgeschwindigkeit ist ähnlich.
Lucian
6
Es ist erwähnenswert, dass PyPy jetzt mit einem inkrementellen GC geliefert wird und daher möglicherweise besser für Spiele geeignet ist.
Porgarmingduod
63

Zum einen ist es nicht 100% kompatibel mit Python 2.x und bietet nur vorläufige Unterstützung für 3.x.

Es ist auch nicht etwas, das zusammengeführt werden könnte - Die von PyPy bereitgestellte Python-Implementierung wird mit einem von ihnen erstellten Framework generiert, das extrem cool ist, aber auch völlig von der vorhandenen CPython-Implementierung abweicht. Es müsste ein vollständiger Ersatz sein.

Es gibt einige sehr konkrete Unterschiede zwischen PyPy und CPython. Ein großer Unterschied besteht darin , wie Erweiterungsmodule unterstützt werden - was eine große Sache ist, wenn Sie über die Standardbibliothek hinausgehen möchten.

Es ist auch erwähnenswert, dass PyPy nicht allgemein schneller ist.

Gareth Latty
quelle
54

Sehen Sie dieses Video von Guido van Rossum . Er spricht über dieselbe Frage, die Sie nach 12 Minuten und 33 Sekunden gestellt haben.

Highlights:

  • mangelnde Python 3-Kompatibilität
  • Mangel an Erweiterungsunterstützung
  • Nicht als Klebercode geeignet
  • Geschwindigkeit ist nicht alles

Immerhin ist er derjenige, der entscheidet ...

keiner
quelle
3
+1 für Link MIT direktem Link zum relevanten Teil des Videos! Auch +1 für die unglaublich wahrheitsgemäße informelle Umfrage von Guido van Rossum "Wie viele Leute verwenden PyPy in der Produktion? ... keine Hände? Husten Nun, ich denke, es gibt noch Hoffnung [für CPython]."
Trevor Boyd Smith
15

Ein Grund könnte sein, dass es laut PyPy- Site derzeit nur auf einer 32- und 64-Bit-Intel x86-Architektur ausgeführt wird, während CPython auch auf anderen Plattformen ausgeführt wird. Dies ist wahrscheinlich auf plattformspezifische Geschwindigkeitsverbesserungen in PyPy zurückzuführen. Während Geschwindigkeit eine gute Sache ist, möchten die Leute oft, dass Sprachimplementierungen so "plattformunabhängig" wie möglich sind.

Bitweise
quelle
6
Beachten Sie, dass ein ARM-Backend "fast da" und ein PowerPC-Backend WIP ist. Beachten Sie auch, dass sich dies nur auf den JIT-Compiler bezieht und das Portieren der JIT auf eine neue Architektur lediglich die Implementierung eines Codegenerators für eine relativ einfache IR auf niedriger Ebene erfordert, nicht mehr.
1
Ab 2018 läuft PyPy auf mehr x86- Architekturen (32/64 Bit unter Linunx, Windows, MacOS und BSDs), aber auch unter Linux mit neuerer ARM-Hardware (ARMv6 oder ARMv7 mit VFPv3), Big- und Little-Endian Varianten von PPC64 und s390x.
Frédéric Grosshans
7

Ich empfehle, diese Keynote von David Beazley für weitere Einblicke zu sehen. Es beantwortet Ihre Frage, indem es Klarheit über die Natur und die Feinheiten von PyPy gibt.

Abhishek Mishra
quelle
6

Zusätzlich zu allem, was hier gesagt wurde, ist PyPy in Bezug auf Fehler bei weitem nicht so solide wie CPython. Mit SymPy haben wir in den letzten Jahren etwa ein Dutzend Fehler in PyPy gefunden, sowohl in veröffentlichten Versionen als auch in den Nightlies.

Auf der anderen Seite haben wir in CPython immer nur einen Fehler gefunden, und das war in einer Vorabversion.

Diskontieren Sie außerdem nicht die mangelnde Python 3-Unterstützung. Niemand in der Kern-Python-Community kümmert sich mehr um Python 2. Sie arbeiten an den nächsten großen Dingen in Python 3.4, der fünften Hauptversion von Python 3. Die PyPy-Leute haben noch keine davon bekommen. Sie haben also Nachholbedarf, bevor sie anfangen können, Konkurrenten zu werden.

Versteh mich nicht falsch. PyPy ist großartig. Aber es ist noch weit davon entfernt, in vielerlei Hinsicht besser als CPython zu sein.

Übrigens, wenn Sie SymPy in PyPy verwenden, sehen Sie keinen geringeren Speicherbedarf (oder auch keine Beschleunigung). Siehe https://bitbucket.org/pypy/pypy/issues/1447/ .

asmeurer
quelle
2
Ab 2018 kann ich bestätigen, dass ich bei verschiedenen Sympy-Anwendungen Beschleunigungen von ungefähr einer Größenordnung gesehen habe
Frédéric Grosshans
1
@ FrédéricGrosshans interessant. Ich muss es noch einmal versuchen.
Asmeurer