2010-10-01 4 views
7

Nachdem ich einige Links durchgelaufen bin, habe ich erfahren, dass Perl die Kompilierung durchführt und einen Zwischenbytecode erstellt und diesen Bytecode dann interpretiert. Meine Frage ist, wo befindet sich dieser Byte-Code?Wo speichert Perl seinen Zwischenbyte-Code?

Wie in anderen Sprachen wie Java, c können wir den maschinell ausführbaren Objektcode nach der Kompilierung sehen. Obwohl Perl keinen maschinenausführbaren Code erstellt, sollte es jedoch einen Speicherort von geben, in dem der Bytecode vorübergehend gespeichert wird.

Antwort

18

Das Ergebnis der Kompilierung wird im Speicher als Opcode-Baum gespeichert. Diese Struktur wird von Perl zur Laufzeit durchlaufen, um Ihr Programm auszuführen.

Sie werden wahrscheinlich die "Compiled Code" section of perlguts interessant finden. Es erklärt viele der Details zum Erstellen einer Perl-Option.

Es ist auch möglich, diese Option auf Platte zu schreiben und sie wieder in einen anderen Perl-Prozess zu laden, mit der B::C-Distribution und dem darin enthaltenen -Modul. Allerdings funktioniert diese Technik in vielen Programmen nicht so gut, daher wird sie in keiner Weise empfohlen.

+0

Wissen Sie zufällig, ob ein Namespace die Op-Codes nicht löscht? –

2

Es speichert es im Speicher als AST.

+2

Während es eine aufregende Arbeit gibt, die hauptsächlich von Gerard Goosen vorangetrieben wird und Perl tatsächlich einen abstrakten Syntaxbaum gibt, hat es derzeit keinen. – rafl

+2

Außerdem, warum brauchen Sie eine AST für Byte-Code? Ein AST, da es um _Syntax_ geht, ist nur für Sprachen relevant, die eine echte Syntax haben, z. Perl-Quellcode – MSalters

+2

Dies gilt nur für Perl 6. Nicht für Perl 5. Auch der AST speichert nicht * den Bytecode. Es ist, was verwendet werden kann, um den Bytecode * zu erzeugen. – dolmen