Python Interpreter und Kompilierungsvorgang

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
Helex
User
Beiträge: 33
Registriert: Mittwoch 21. Februar 2007, 09:52
Wohnort: Dessau, Sachsen-Anhalt
Kontaktdaten:

Python Interpreter und Kompilierungsvorgang

Beitragvon Helex » Sonntag 15. April 2007, 21:27

Abend,

ich hab da mal so eine Frage bezüglich des Kompilierunsgvorgangs in Python.

Der Weg ist doch der folgende:


Python Interpreter ---> Bytecode --> PVM


Python Interpreter bekommt einen Quellcode foo.py und wandlet diesen in Bytecode um. Bei dieser Umwandlung geht der Interpreter eine Anweisung nach der nächsten von foo.py durch und wird dann vom Interpreter ausgeführt. Da hierfür mehrere Zyklen notwendig sind und der Kompilierungsvorgang länger braucht, wird Bytecode erzeugt, welcher so schneller auszuführen ist.

Der Bytecode ist eine interne Darstellung des Quelltextes ist, welches dem Programmtextes sehr ähnlich ist und ist für die plattformunabhängigkeit verantwortlich, da der Bytecode auf jedem System ausgeführt werden kann.

Die PVM führt dann schließlich den Bytecode aus und die Ausgabe erscheint dann auf den Bildschirm. Sollte sich der Quellcode ändern so wird ein neuer Bytecode erzeugt, bleibt der Quellcode unverändert und wurde bereits der Bytecode erzeugt, so kann der Bytecode benutzt werden.

D.h. falls der Python-Interpreter ein größeres Programm bestehend aus mehreren .py Datein ausführt, so arbeitet es schneller, wenn von all den .py Datein der Bytecode bereits vorliegt.

Nun noch zum Python Interpreter an sich:
  • Interaktive Shell: eingegebene Befehle werden in der Shell sofort ausgeführt
  • Skript Mode: mittels python foo.py wird der Quellcode ausgeführt


Ist zwar lang, aber ich hoffe, ich habe die Zusammenhänge so richtig ausfgeschrieben!

Gruß Helex!
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Python Interpreter und Kompilierungsvorgang

Beitragvon Leonidas » Sonntag 15. April 2007, 22:03

Helex hat geschrieben:ich hab da mal so eine Frage bezüglich des Kompilierunsgvorgangs in Python.

Habe keine Frage entdecken können ;)

Helex hat geschrieben:
  • Interaktive Shell: eingegebene Befehle werden in der Shell sofort ausgeführt
  • Skript Mode: mittels python foo.py wird der Quellcode ausgeführt

Man kann auch aus einem Skript wieder in den Interpreter springen: Djangos ``manage.py shell`` und IPython machen es vor. Außerdem ist es jederzeit möglich dynamisch Quellcode auszuführen: ``eval()``, ``exec``. Ob es sich exakt so verhält wie in vielen Lisp-Interpretern kann ich dir aber nicht sagen. Zumindest Django benutzt in django.core.management IPython bzw. das core-Modul. So wie ich das aber lese, wird aber eine REPL in Python laufen gelassen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Re: Python Interpreter und Kompilierungsvorgang

Beitragvon BlackJack » Montag 16. April 2007, 08:11

Helex hat geschrieben:Der Bytecode ist eine interne Darstellung des Quelltextes ist, welches dem Programmtextes sehr ähnlich ist und ist für die plattformunabhängigkeit verantwortlich, da der Bytecode auf jedem System ausgeführt werden kann.


Mit dem Satz habe ein bisschen Probleme. Der Bytecode ist dem Quelltext nur bedingt ähnlich und ist auch nicht für die Plattformunabhängigkeit verantwortlich. Der Quelltext ist schliesslich auch plattformunabghängig und wäre es auch, wenn der Bytecode es nicht wäre.
Benutzeravatar
Helex
User
Beiträge: 33
Registriert: Mittwoch 21. Februar 2007, 09:52
Wohnort: Dessau, Sachsen-Anhalt
Kontaktdaten:

Beitragvon Helex » Montag 16. April 2007, 14:27

Danke für die Antworten,

also kann ich davon ausgehen, dass ich vieles richtig verstanden habe.

Nun zu dem von Blackjack angesprochenen Punkt:


Diesen Satz habe ich nochmal aus dem, sehr guten wie ich finde, "Learning Python" von O'Reilly und Wikipedia. Aus dem Buch:

Python first compiles your source code into a format known as byte code. Compilation is simply a translation step, and byte code is a lower-level, and platform-independant, representation of your source code. Each of your source statements is translated into a group of byte code instructions. This byte code translation is performed to speed- execution - byte code can be run much quicker than the original source code statements

und aus Wikipedia:

In der Informatik ist Bytecode eine Sammlung von Befehlen für eine virtuelle Maschine. Bei Compilierung eines Quelltextes mancher Programmiersprachen oder Umgebungen, wie z. B. Java, wird nicht direkt Maschinencode sondern ein Zwischencode, der Bytecode, erstellt. Dieser Code ist in der Regel maschinenunabhängig und im Vergleich zum Quelltext und zu Maschinencode oft relativ kompakt


Daher habe ich das so interpretiert!

Vielen dank für die Antworten hier, dieses Forum ist einfach nur gut durch die vielen netten Benutzern.

Grüße Helex!
BlackJack

Beitragvon BlackJack » Montag 16. April 2007, 15:29

Über die Maschinenunabhängigkeit von Bytecode lässt sich streiten. Der läuft nämlich auch nur auf der (virtuellen) Maschine für die er gedacht ist. So wie x86-Binärcode einen echten oder emulierten x86-Prozessor benötigt, braucht Java-Bytecode eine echte oder emulierte JVM.

Was die Plattformunabhängigkeit einer Sprache ausmacht ist normalerweise eine Kombination aus Einhaltung von Standards die für viele Plattformen gelten und Laufzeitbibliotheken die auf möglichst viele Plattformen portiert wurden und eine API anbieten, die diverse Unterschiede zwischen Plattformen vor dem Programmierer "verstecken".
Benutzeravatar
Helex
User
Beiträge: 33
Registriert: Mittwoch 21. Februar 2007, 09:52
Wohnort: Dessau, Sachsen-Anhalt
Kontaktdaten:

Beitragvon Helex » Montag 16. April 2007, 16:37

Okay vielen dank, ich habe das zur Kenntniss genommen
lunar

Re: Python Interpreter und Kompilierungsvorgang

Beitragvon lunar » Montag 16. April 2007, 17:23

BlackJack hat geschrieben:
Helex hat geschrieben:Der Bytecode ist eine interne Darstellung des Quelltextes ist, welches dem Programmtextes sehr ähnlich ist und ist für die plattformunabhängigkeit verantwortlich, da der Bytecode auf jedem System ausgeführt werden kann.


Mit dem Satz habe ein bisschen Probleme. Der Bytecode ist dem Quelltext nur bedingt ähnlich und ist auch nicht für die Plattformunabhängigkeit verantwortlich. Der Quelltext ist schliesslich auch plattformunabghängig und wäre es auch, wenn der Bytecode es nicht wäre.


Ein Beispiel für eine Sprache, deren Quelltext zwar plattformunabhängig ist, die aber im "Bytecode" an eine Plattform gebunden ist, wäre C.
Die Sprache ist standardisiert und viele Bibliotheken sind plattformübergreifend verfügbar, einmal kompiliert ist C Code jedoch nicht mehr portabel, sondern an Architektur und Betriebssystem gebunden.

Wer ist online?

Mitglieder in diesem Forum: /me, Bing [Bot]