2009-10-29 8 views
9

Ich bekomme das Konzept des "Bytecode Interpreter" nicht wirklich im Kontext von CPython. Kann jemand Licht auf das ganze Bild werfen?CPython ist Bytecode-Interpreter?

Bedeutet dies, dass CPython pyc-Datei (Bytecode-Datei?) Kompilieren und ausführen wird. Was kompilieren Py-Datei zu Pyc-Datei? Und wie unterscheidet sich Jython von CPython (außer dass sie in verschiedenen Sprachen implementiert sind).

Ich habe auch irgendwo gelesen, dass Python C++ Interpretation ist. Ist das richtig? Und was bedeutet das?

Ich bin immer noch sehr neu zu Python, also vergib mir, wenn ich die dummen Fragen stelle ... Vielen Dank!

Antwort

12

CPython ist die Implementierung von Python in C. Es ist die erste Implementierung, und immer noch die wichtigste, die Leute meinen, wenn sie über Python sprechen. Es kompiliert .py-Dateien zu .pyc-Dateien. .pyc-Dateien enthalten Bytecodes. Die CPython-Implementierung interpretiert diese Bytecodes ebenfalls. CPython ist nicht in C++ geschrieben, es ist C.

Die Kompilierung von .py zu .pyc geschieht transparent nach Bedarf. Wenn Sie eine .py-Datei ausführen, wird sie bei Bedarf zuerst in eine .pyc-Datei kompiliert. Anschließend wird die .pyc-Datei interpretiert.

Jython ist anders, weil es (zusätzlich zur Implementierung in Java anstelle von C) .py-Dateien in .class-Dateien kompiliert, damit sie in der JVM ausgeführt werden können.

+0

Konvertiert Jython den Python-Code in Java und kompiliert dann zu Jave Bytecode? – Nope

+0

Ich weiß nicht, ob es Java als Zwischenform erzeugt. –

+3

AFAIK Jython kann Java auf Wunsch als Zwischenform erzeugen, erzeugt aber normalerweise nur Java-Bytecode. – MAK

7

CPython ist sowohl der Bytecode-Compiler als auch der Interpreter (virtuelle Maschine).

Es erkennt automatisch, ob keine vorhandene Pre-Compiler-Datei (.pyc) existiert, kompiliert den Code und speichert ihn.

10

Erstens: Die Tatsache, dass CPython ein Bytecode-Interpreter ist, sollte für Sie als Benutzer von Python keine Rolle spielen. Mach weiter und schreibe Code, und mach dir keine Sorgen darüber, wie es in Aktion umgesetzt wird.

Also, um Ihre Frage zu beantworten und Ihre Neugier zu befriedigen, hier ist was passiert: CPython liest Python-Quellcode und kompiliert es in Python-Byte-Code, der in der .pyc-Datei gespeichert ist. Dann führt er diesen Code mit einem Bytecode-Interpreter aus. Dieser Entwurf trennt das Parsen von Python von der Ausführung, so dass beide Teile des Interpreters einfacher sind.

Jython ist nur die vordere Hälfte - es liest Python-Quelle und gibt Java-Bytecodes aus, die dann von der JVM interpretiert werden. Es ist die gleiche Architektur wie CPython, mit zwei bemerkenswerten Unterschieden: Erstens: Der Java-Bytecode ist standardisiert und dokumentiert, während der CPython-Bytecode intern in Python betrachtet wird und sich jederzeit ändern kann. Zweitens: Die JVM ist viel komplizierter als der CPython-Interpreter. Die JVM hat eine der fortschrittlichsten JIT-Engines der Welt, während der CPython-Interpreter ziemlich einfach ist.

+1

Obwohl spät, aber das ist eine sehr detaillierte Erklärung. Vielen Dank! – huy