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?
Antworten:
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:
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.
quelle
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.
quelle
Sehen Sie dieses Video von Guido van Rossum . Er spricht über dieselbe Frage, die Sie nach 12 Minuten und 33 Sekunden gestellt haben.
Highlights:
Immerhin ist er derjenige, der entscheidet ...
quelle
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.
quelle
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.
quelle
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/ .
quelle