Bytecode

EDV-Fachbegriffe
Bei Compilierung eines Quelltextes wird bei manchen Sprachen oder Umgebungen, wie z.B. Java, nicht direkt Maschinencode sondern ein Zwischenprodukt, der Bytecode erstellt. Dieser Code ist in der Regel maschinenunabhängig und im Vergleich zum Quelltext und zu Maschinencode oft relativ kompakt.

Die so genannte Virtual Machine, im Falle von Java die Java VM, führt dann dieses Zwischenergebnis aus. Dabei ist zu beachten, dass die Virtual Machine für jede Rechnerplattform, auf der das Kompilat laufen soll, bereits vorliegen muss.

Java ist heute nur eines der prominentesten Beispiele für eine Bytecode-basierte Programmiersprache, andere Sprachen, die Bytecodes verwenden, sind z.B. C# und Perl.

Die Ausführung von Bytecode durch das Programm, das die virtuelle Maschine repräsentiert, kostet Zeit. Spezielle Just-In-Time-Compiler (JIT-Compiler) übersetzen Bytecode-Stücke einmal während der Programmausführung in entsprechende Maschinencodestücke und führen diese dann aus. Dadurch lassen sich die Ausführungszeiten, jedoch nicht die Startzeiten, oft in Bereich von vorübersetztem Maschinencode drücken.


Geschichtlicher Hintergrund:

Martin Richards entwickelte in den späten 60er Jahren für seine Programmiersprache BCPL, den Vorläufer von C und C++, einen Zwischencode namens O-Code (O für Objektcode), der den eigentlichen Compiler maschinenunabhängig machte. Dies ermöglichte die leichte Portierung dieses Compilers auf unterschiedliche Prozessoren. Der O-Code konnte dann interpretiert oder in maschinenspezifischen Code übersetzt werden.

Die UCSD Pascal Umgebungen aus den späten 70er Jahren verwendeten p-Code. Der Versuch, vollständig portable Computerprogramme auf Basis eines interpretierten Bytecodes zu ermöglichen, scheiterte jedoch weitgehend aufgrund der fehlenden Geschwindigkeit der damaligen Computersysteme - man konnte und wollte sich zu dieser Zeit Verlangsamung durch die zusätzliche Indirektion nicht leisten.

Viele interpretierte Sprachen verwenden auch intern Bytecode, das bedeutet, dass der Bytecode an sich unsichtbar für den Programmierer und Endbenutzer gehalten wird und automatisch als Zwischenschritt der Interpretation des Programmes erzeugt wird. Beispiele für aktuelle Sprachen, die zu diesem Trick greifen sind Perl, PHP und Python.

Auch dieses Verfahren ist sehr alt: frühe BASIC-Versionen der 80er Jahre verwendeten anstelle der Schlüsselwörter Bytes, so genannte Tokens, um die Ausführung ihrer Programme zu beschleunigen und den Programmtext in einer kompakteren Form abzuspeichern. Der restliche Text - zum Beispiel Variable, mathematische Ausdrücke und Zeichenketten - wurde jedoch unverändert gespeichert. Bei Ausgabe durch den LIST-Befehl wurden die Tokens wieder in lesbare Schlüsselwörter umgewandelt.
Im Beitrag enthaltene URLs:
 
nach oben