Frage

Wird Perl zusammengestellt oder interpretiert?

War es hilfreich?

Lösung

Nun, das hängt davon ab, was Sie mit einer kompilierten Sprache meinen. Vielleicht hat das Googeln deshalb keine klare Antwort auf Ihre Frage hervorgebracht.

Ein Standpunkt ist, dass die Kompilierung von einer Quellcode -Beschreibung zu einem anderen kompiliert werden kann, dh Codegenerierung.

Wenn wir diese Räumlichkeiten akzeptieren, kann Perl 6 zusammengestellt werden und Perl 5 und älter sind interpretierte Sprachen.

Perl 6 wird speziell zusammengestellt zu Papageien -Bytecode. Perl 6 ist daher eine ordnungsgemäß zusammengestellte Sprache auf die gleiche Weise, sagen wir: Java ist.

Perl 5 und älter analysiert den Perl -Quellcode in eine interne Liste oder einen Baum, aber ich denke nicht, dass er als richtiger Compiler bezeichnet werden sollte, außer vielleicht im theoretischen Sinne. Es gibt keine Bytecode, Baugruppe oder realen Maschinencode aus, die normalerweise Compilern zugeordnet sind. Die Parsing -Stufe von Perl, um die Perl -Syntax zu überprüfen, wurde früher als "Kompilieren" der Quelle bezeichnet. Es wird verwendet, um die syntaktische Gültigkeit einer Perl -Quelldatei zu überprüfen, ohne sie auszuführen.

Es wird aufgerufen als:

perl -c myprog.pl

Wenn Sie sich jedoch die Hilfe für Perl -Optionen ansehen, steht -c tatsächlich für "Check".

-c                check syntax only (runs BEGIN and CHECK blocks)

(Um die Dinge weiter zu komplizieren, hatte Perl 5 Unterstützung für das Ausschreiben interner Bytecode, aber es war es in Version 5.10 entfernt. Vermutlich, weil es fehlerhaft war, weiß ich nicht.)

Auf der anderen Seite, Wenn Sie argumentieren, dass Zusammenstellung der Akt des Parsens eines Quellbaums in eine andere Art von Darstellung ist, macht diese Parsen Perl zu einer kompilierten Sprache. Perl muss eine Quelldatei vollständig analysieren, bevor sie mit der Ausführung beginnen kann. Nach dieser Definition wäre jede Sprache, die unmittelbar vor der Parsen eine Quelldatei ausführen kann, eine interpretierte Sprache.

Ein dritter Weg Um dies zu betrachten, werden diese Wörter "interpretiert" und "kompiliert" am häufigsten von Fachleuten vor Ort verwendet. Ich würde gut Geld wetten, dass wenn eine zufällige Teilmenge von Programmierern gebeten würde, "kompiliert" oder "interpretiert" zu wählen, wenn sie an Perl denken, die meisten "interpretiert" wählen würden. Nicht aufgrund eines theoretischen Arguments über die Natur von Perl, sondern weil "kompiliert" normalerweise Gedanken an "Kompilieren", "Verknüpfen", "Objektcode" usw. aufruft, während "interpretiert" als "den Code schreibe", versuchen Sie es, versuchen Sie es, versuchen Sie es, versuchen Sie ihn ". Richtig oder falsch, das kann gut zu wissen sein, wenn er versucht, festzustellen, ob Perl ist, wirklich, interpretiert oder tatsächlich zusammengestellt. Sie werden auf Ihrer Suche auf viele Argumente stoßen.

Andere Tipps

Sie werden keine eindeutige Antwort erhalten, da Sie keine bestimmte Frage gestellt haben.

Perl befindet sich immer in einem von zwei Staaten: Es wird entweder zusammengestellt oder es wird ausgeführt. Deshalb sehen Sie die Rede von "At Compile-Time" gegen "bei der Laufzeit". Normalerweise erhalten Sie einen Kompilierphrase, gefolgt von einer Ausführungsphase, aber sie muss nicht so sein.

Diese beiden Phasen können auch hin und her handeln. Ein eval STRING ist eine Möglichkeit für den Dolmetscher, den Compiler aufzurufen (so auch do FILE und require). EIN BEGIN Block ist eine Möglichkeit für den Compiler, den Dolmetscher aufzurufen (so auch use und no).

Wenn du rennst perl -c, Sie lassen die Laufzeitphase weg. Es gibt verschiedene Möglichkeiten, die Kompilierungszeitphase zu überspringen, aber keiner von ihnen ist besonders bequem oder alltäglich. Apache mod_perl Kompiliert nur einmal Skripte, führt sie aber viele Male aus. Wenn Sie den Byteloader verwenden, können Sie dasselbe tun. Und so weiter.

Die richtige Antwort darauf, ob Perl zusammengestellt oder interpretiert wird, ist einfach JAWOHL.

Wirklich beide. Perl5 kompiliert den Quellcode in einen Opcode -Objekt und interpretiert dann die Opcode -Objekte. Lange Antwort folgt.


Aus Wikipedia,

Ein Compiler ist ein Computerprogramm (oder eine Reihe von Programmen), das den in einer Programmiersprache (die Quellsprache) geschriebenen Quellcode in eine andere Computersprache (die Zielsprache, häufig ein binäres Formular als Objektcode) geschrieben wird.

Durch diese Definition ist Perl5 ein Compiler. Der Perl5 -Quellcode und erzeugt einen Graphen von Opcode -Objekten.

$ perl -MO=Concise,-exec -E'for (1..3) { say "Hello, World!" }'
1  <0> enter 
2  <;> nextstate(main 48 -e:1) v:%,2048
3  <0> pushmark s
4  <$> const(IV 1) s
5  <$> const(IV 3) s
6  <$> gv(*_) s
7  <{> enteriter(next->c last->f redo->8) lKS/8
d  <0> iter s
e  <|> and(other->8) vK/1
8      <;> nextstate(main 47 -e:1) v:%,2048
9      <0> pushmark s
a      <$> const(PV "Hello, World!") s
b      <@> say vK
c      <0> unstack v
           goto d
f  <2> leaveloop vK/2
g  <@> leave[1 ref] vKP/REFC
-e syntax OK

Der Perl5 -Compiler erstellt jedoch keinen Maschinencode. Wie wird das Opcode -Diagramm ausgeführt? Aus Wikipedia ist eine Definition für einen Dolmetscher etwas, das

Ausdrücklich ausgeführt von einem Compiler, der Teil des Interpreter -Systems ist

Das bedeutet also, dass die Opcode -Diagramme interpretiert werden.

Die Arbeit ist nach unten, um Perl5 nach LLVM -Bytecode zu kompilieren. Dies kann wiederum in den Maschinencode zusammengestellt werden. Dies ist der gleiche Ansatz, den Java verwendet.

Perl ist eine interpretierte Sprache. Es kompiliert jedoch intern in P-Code für Effizienz.

Aus Wikipedia: "Perl ist ein hochrangiger, allgemeiner Zweck, interpretiert, dynamische Programmiersprache ". Perl 6 ermöglicht auch die Kompilierung (erneut siehe Wikipedia).

Beide. Zunächst wird das Perl 6 -Skript in Bytecode zusammengestellt (und optimiert). Dann wird es ausgeführt (dafür benötigen Sie jedoch immer noch Perl -Interpreter). Bytecode ist eine Art ausführbarer Code, der unabhängig von der Umgebung ist, in der es ausgeführt wird (dieselbe Bytecode kann auf UNIX -Umwelt auf dem ARM -Prozessor, dem Windows -System mit X86 und Haiku auf X64 ausgeführt).

Perl 6 kann mit dem Papageien -Bytecode (Virtual Machine) zusammengestellt werden. Parrot VM wird auch von Python und Ruby verwendet.

Dies macht Perl, Ruby und Python schneller als PHP, was gerade interpretiert wird (kann auch kompiliert werden, aber Sie benötigen dafür dritte Partykomponenten).

Am häufigsten interpretiert, kann aber auch zusammengestellt werden.Über Perl Compiler

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top