Warum hat Python diese nicht?
Ich bin mir nicht sicher, warum es Ihrer Meinung nach keine Python-Implementierungen gibt, die sich um die Leistung kümmern. PyPy , IronPython und Jython sind industrietaugliche, produktionsbereite Python-Implementierungen, bei denen die Leistung im Vordergrund steht. Pyston ist eine in der Entwicklung befindliche Implementierung, die speziell für die Leistung entwickelt wurde. Unladen Swallow und Psyco waren ebenfalls Projekte zur Verbesserung der Leistung von Python.
Die Tatsache, dass CPython-Benutzer die Gesamtzahl der kombinierten Benutzer aller anderen Implementierungen erheblich übersteigen, dass Unladen Swallow von der Community abgelehnt wurde, dass die meisten dieser Projekte entweder tot sind oder Schwierigkeiten haben, Entwickler anzulocken, sollte Ihnen etwas darüber erzählen, wie Python funktioniert Community schätzt Leistung.
Diese Antwort ist ein gutes Beispiel für die typische Mentalität der Python-Community: Anstatt die Leistungsprobleme zu beheben, würden sie es einfach vorziehen, ihren Code nicht in Python zu schreiben.
Ich habe mir PyPy und IronPython angesehen, die beide Geschwindigkeitsgewinne beanspruchen. PyPy Ich verstehe nicht, wie eine in Python, einer interpretierten Sprache, geschriebene Python-Implementierung schneller ist als die Referenzimplementierung in C.
Zunächst einmal: Es spielt keine Rolle, in welcher Sprache der Compiler geschrieben ist. Schließlich wird der Compiler nur einmal ausgeführt. Selbst wenn er langsam ist, spielt dies keine Rolle: Die Leistung des Compilers ist irrelevant, was relevant ist ist die Leistung der Ausgabe des Compilers.
Zweitens, da es nur darauf ankommt, wie schnell die Ausgabe des Compilers ist und der Compiler in Python geschrieben ist, dh in der Sprache, die er kompiliert, kann er sich selbst schnell machen, indem er sich selbst kompiliert.
Drittens gibt es keine "interpretierte Sprache". Eine Sprache besteht aus einer Reihe mathematischer Regeln und Einschränkungen. Es ist eine Spezifikation. Ein Stück Papier. Eine Sprache wird nicht kompiliert oder interpretiert. Eine Sprache einfach ist . Kompilierung und Interpretation sind Merkmale einer Sprachimplementierung , genauer gesagt eines Compilers oder Interpreters (duh!), Nicht der Sprache. Jede Sprache kann von einem Compiler implementiert werden. Jede Sprache kann von einem Dolmetscher implementiert werden. Sie können einen Compiler mechanisch aus einem Interpreter und einen Interpreter aus einem Compiler generieren.
Aber all dies spielt eigentlich keine Rolle, da PyPy eigentlich nicht in Python geschrieben ist. Es ist in RPython geschrieben . RPython besteht aus zwei Teilen, der RPython-Programmiersprache und dem RPython-Framework.
Die Programmiersprache RPython ist nicht Python. Es ist eine andere Programmiersprache. RPython ist eine statisch typisierte Programmiersprache, die in Bezug auf die Abstraktion ungefähr auf der gleichen Abstraktionsebene wie Java liegt und ungefähr die gleiche Leistung wie C aufweist. RPython ist eine syntaktische und semantische Teilmenge von Python, was bedeutet, dass jedes RPython-Programm ein gültiges Python-Programm ist und dies kann Sie werden von einer Python-Implementierung ausgeführt (wenn auch in der Regel mehrere Größenordnungen langsamer, dies ist jedoch für das Debuggen immer noch nützlich, da Sie Zugriff auf alle Python-Tools erhalten und die Interpretation sofort beginnt, während das Kompilieren der Sprachimplementierung in der Regel etwa 5 bis 10 Minuten dauert ), aber das Gegenteil ist nicht wahr.
Das RPython-Framework ist ein Framework zum Schreiben von Hochleistungsimplementierungen für dynamische Sprachen in der Programmiersprache RPython. Es enthält einen Garbage Collector, einen Objektbereich, ein Metaobjektprotokoll, vordefinierte Objekte, Typen und Operationen usw. Das Kronjuwel ist jedoch die Fähigkeit, automatisch einen JIT-Compiler aus einem Interpreter zu generieren: Wenn Sie eine Sprache im RPython-Framework implementieren, müssen Sie nur einen Interpreter schreiben, das RPython-Framework kümmert sich um die JIT.
Es gibt viele Sprachimplementierungen auf der RPython-Plattform , nicht nur PyPy.
IronPython, dieselbe Idee, aber ich sehe nicht, wie .NET Framework die Geschwindigkeit erhöhen wird.
Die meisten Implementierungen der ISO-CLI, wie die verschiedenen .NET-Varianten von Microsoft oder Mono, enthalten hochentwickelte Garbage Collectors, Optimierer und Compiler. Gleiches gilt für Jython- und Java-Implementierungen.
IronPython ist ein Compiler, der Python-Quellcode in DLR-Bäume kompiliert (DLR ist die Dynamic Language Runtime), die dann weiter in CIL-Bytecode kompiliert werden, der dann normalerweise wieder in nativen Maschinencode kompiliert wird.