Domanda

Perl è compilato o interpretato?

È stato utile?

Soluzione

Bene, dipende da cosa intendi per un linguaggio compilato. Forse è per questo che Googling non ha prodotto una risposta chiara alla tua domanda.

Un punto di vista è che la compilazione significa compilare da una descrizione del codice sorgente a un altro, cioè generazione di codice.

Se accettiamo queste premesse, allora perl 6 può essere compilato e perl 5 e più sono le lingue interpretate.

Perl 6 è specificamente compilato Pappagallo bytecode. Perl 6 è quindi un linguaggio adeguatamente compilato, allo stesso modo, dicono, Java è.

Perl 5 e più vecchi analizza il codice sorgente perl a un elenco interno o albero, ma non credo che dovrebbe essere chiamato un compilatore adeguato, tranne forse in senso teorico. Non produce alcun bytecode, assembly o codice della macchina reale solitamente associato ai compilatori. La fase di analisi di Perl per verificare la sintassi di Perl era chiamata "compilazione" la sorgente. Viene utilizzato per verificare la validità sintattica di un file di origine Perl senza eseguirlo.

È invocato come:

perl -c myprog.pl

Ma se guardi l'aiuto per le opzioni Perl, -C in realtà sta per "Controlla".

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

(Per complicare ulteriormente le cose, Perl 5 aveva supporto per la scrittura di bytecode interno ma lo era rimosso nella versione 5.10. Presumibilmente perché era buggy, non lo so.)

D'altro canto, se si sostiene che la compilazione è l'atto di analizzare un albero di fonte in qualsiasi altro tipo di rappresentazione, beh, che l'analisi rende Perl un linguaggio compilato. Perl deve analizzare completamente un file di origine prima che possa iniziare a eseguirlo. Con questa definizione, qualsiasi lingua che può iniziare a eseguire un file di origine immediatamente prima dell'analisi sarebbe una lingua interpretata.

Una terza via Guardare questo è da come queste parole, "interpretate" e "compilate" sono spesso usate dai professionisti del campo. Scommetto di buoni soldi che se un sottoinsieme casuale di programmatori fosse chiesto di scegliere "compilato" o "interpretato" quando pensava a Perl, la maggior parte sceglierebbe "interpretato". Non a causa di qualche argomento teorico sulla natura di Perl, ma perché "compilato" di solito invoca i pensieri di "compilazione", "collegamento", "codice oggetto" ecc., Sebbene "interpretato" sia preso per significare "scrivi il codice, provalo ". Giusto o sbagliato, può essere bello sapere quando si cerca di determinare se perl lo è, veramente, interpretato o in effetti, compilato. Ti imbatterai in molti argomenti sulla tua ricerca.

Altri suggerimenti

Non otterrai una risposta definita, perché non hai fornito una domanda definitiva.

Perl è sempre in uno dei due stati: sta compilando o sta eseguendo. Ecco perché vedi parlare di "At Compile-Time" vs "At Runtime". Normalmente, ottieni una frase di compilazione seguita da una fase di esecuzione, ma non deve essere così.

Queste due fasi possono anche scambiare avanti e indietro. Un eval STRING è un modo per l'interprete di chiamare il compilatore (così anche lo sono do FILE e require). UN BEGIN Il blocco è un modo per il compilatore di chiamare l'interprete (così anche quindi lo sono use e no).

Quando corri perl -c, ometti la fase di runtime. Esistono vari modi per saltare la fase di compilazione, ma nessuno di essi è particolarmente conveniente o all'ordine del giorno. Apache's mod_perl Compila solo script una volta ma li esegue molte volte. Se usi il byteloader, puoi fare lo stesso. Et Cetera.

La risposta corretta al fatto che perl sia compilato o interpretato è semplicemente SÌ.

Entrambi, davvero. Perl5 compila il codice sorgente in oggetti OpCode, quindi interpreta gli oggetti OpCode. Segue una lunga risposta.


Da Wikipedia,

Un compilatore è un programma per computer (o insieme di programmi) che trasforma il codice sorgente scritto in un linguaggio di programmazione (il linguaggio di origine) in un altro linguaggio del computer (il linguaggio target, spesso con una forma binaria nota come codice oggetto).

Con quella definizione, Perl5 è un compilatore. Prende il codice sorgente perl5 e produce un grafico di oggetti Opcode.

$ 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

Tuttavia, il compilatore Perl5 non produce codice macchina. Allora come viene eseguito il grafico OpCode? Da Wikipedia, una definizione per un interprete è qualcosa che

esegue esplicitamente il codice precompilato memorizzato realizzato da un compilatore che fa parte del sistema di interpretazione

Ciò significa che viene interpretato i grafici del codice Op.

Il lavoro è in calo per fornire la possibilità di compilare perl5 a LLVM Bytecode. Questo, a sua volta, può essere compilato nel codice della macchina. Questo è lo stesso approccio che Java utilizza.

Perl è una lingua interpretata. Tuttavia, si compila internamente nel codice P per efficienza.

Da Wikipedia: "Perl è un alto livello, generale, interpretato, linguaggio di programmazione dinamica ". Perl 6 consente anche di compilazione (di nuovo, vedi Wikipedia).

Tutti e due. Innanzitutto, lo script Perl 6 viene compilato su bytecode (e ottimizzato). Quindi viene eseguito (tuttavia, è ancora necessario un interprete perl per questo). Bytecode è un tipo di codice eseguibile, che è indipendente dall'ambiente su cui viene eseguito (lo stesso bytecode può essere eseguito su Unix Enviroment sul processore ARM, Windows System con X86 e Haiku su X64).

Perl 6 può essere compilato al bytecode Parrot VM (Macchina virtuale). Il pappagallo VM è utilizzato anche da Python e Ruby.

Questo è ciò che rende perl, Ruby e Python più veloce di PHP, che è appena interpretato (può anche essere compilato, ma per questo hai bisogno di componenti di terze parti).

Più spesso interpretato ma può anche essere compilato.Informazioni sul compilatore Perl

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top