Question

Perl est compilé ou interprété?

Était-ce utile?

La solution

Eh bien, cela dépend de ce que vous entendez par un langage compilé. Peut-être que c'est pourquoi googler n'a pas enfanter une réponse claire à votre question.

Un point de vue est que des moyens de compilation compilant à partir d'une description du code source à une autre, par exemple génération de code .

Si nous acceptons ces locaux, alors Perl 6 peut être compilé et Perl 5 et plus sont des langages interprétés.

Perl 6 est spécialement compilé pour Parrot bytecode . Perl 6 est donc un langage compilé correctement, dans le même exemple de façon, Java est .

Perl 5 et plus analyse le code source Perl à une liste interne ou un arbre, mais je ne pense pas qu'il devrait être appelé un compilateur approprié, sauf peut-être dans un sens théorique. Il ne délivre aucune bytecode, l'assemblage ou le code de la machine réelle généralement associée à des compilateurs. L'étape de l'analyse syntaxique de Perl pour vérifier Perl syntaxe utilisée pour appeler la « compilation » la source. Il est utilisé pour vérifier la validité d'un fichier syntactique source Perl sans l'exécuter.

Il est invoqué comme:

perl -c myprog.pl

Mais si vous regardez l'aide pour les options Perl, -c signifie en fait « cocher ».

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

(Pour plus de choses compliquera Perl 5 a aide à l'écriture sur bytecode interne mais il était supprimé dans la version 5.10 . on peut supposer que parce qu'il était bogué, je ne sais pas.)

D'autre part , si vous affirmez que la compilation est l'acte de l'analyse syntaxique un arbre source dans un autre type de représentation, bien que l'analyse syntaxique Perl fait un langage compilé. Perl doit complètement analyser un fichier source avant de pouvoir commencer à exécuter. Par cette définition, toute langue qui peut commencer à exécuter un fichier source immédiatement avant l'analyse syntaxique serait un langage interprété.

Une troisième voie pour voir cela est de la façon dont ces mots, « interprétés » et « compilé » sont le plus souvent utilisés par les professionnels dans le domaine. Je serais prêt à parier beaucoup d'argent que si un sous-ensemble aléatoire de programmeurs ont été invités à choisir « compilé » ou « interprété » en pensant à Perl, la plupart choisiraient « interprété ». Non à cause d'un argument théorique sur la nature de Perl, mais parce que « compilé » invoque généralement des pensées de « compilation », « liaison », « code objet » etc, alors que « interprété », on entend « écrire le code, essayez ». Tort ou à raison, que peut-être bon de savoir lorsque vous essayez de déterminer si Perl est, vraiment , interprété ou en fait, compilé. Vous allez courir dans de nombreux arguments dans votre quête.

Autres conseils

Vous ne va pas obtenir une réponse définitive, parce que vous ne l'avez pas fourni une question précise.

Perl est toujours dans l'un des deux états: il est soit la compilation, ou il est en cours d'exécution. Voilà pourquoi vous voyez parler de « à la compilation » vs « lors de l'exécution ». Normalement, vous obtenez une phrase de compilation suivie d'une phase d'exécution, mais il n'a pas besoin d'être de cette façon.

Ces deux phases peuvent aussi échanger en arrière. Un eval STRING est un moyen pour l'interprète d'appeler le compilateur (donc trop sont donc do FILE et require). Un bloc de BEGIN est une façon pour le compilateur d'appeler l'interpréteur (donc trop sont donc use et no).

Lorsque vous exécutez perl -c, vous omettez la phase d'exécution. Il existe plusieurs façons de sauter la phase de compilation, mais aucun d'entre eux est particulièrement pratique ou courante. Le mod_perl Apache ne compile que des scripts une fois, mais les exécute plusieurs fois. Si vous utilisez le Byteloader, vous pouvez faire la même chose. Et ainsi de suite.

La bonne réponse à savoir si Perl est compilé ou interprété est simplement YES.

Les deux, vraiment. Perl5 compile le code source dans un objets opcode interprète alors les objets OPCODE. Réponse longue suit.


Un article de Wikipédia,

Un compilateur est un programme informatique (ou ensemble de programmes) qui transforme le code source écrit dans un langage de programmation (la langue source) dans une autre langue informatique (la langue cible, ayant souvent une forme binaire connu sous le nom de code objet).

Par cette définition, Perl5 est un compilateur. Il faut code source Perl5 et produit d'un graphe d'objets 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

Cependant, le compilateur Perl5 ne produit pas de code de la machine. Alors, comment est le graphique OPCODE exécuté? Un article de Wikipédia, une définition d'un interprète est quelque chose que

exécute le code stocké de manière explicite précompilés faite par un compilateur qui fait partie du système d'interpréteur

Cela signifie donc que les graphiques OPCODE est interprété.

Les travaux sont vers le bas pour offrir la possibilité de compiler Perl5 à LLVM bytecode. Ceci, à son tour, peut être compilé JIT en code machine. C'est la même approche utilise Java.

Perl est un langage interprété. Cependant, il ne compile en code interne p-efficacité.

De Wikipedia : « Perl est un haut niveau, à usage général, interprété , langage de programmation dynamique ». Perl 6 permet également de compilation (encore une fois, voir Wikipédia ).

Les deux. Tout d'abord, le script Perl 6 est compilé en bytecode (et optimisé). Ensuite, il est exécuté (cependant, vous avez encore besoin interpréteur Perl pour cela). Bytecode est une sorte de code exécutable, qui est indépendant de l'environnement, il fonctionne sur (le même bytecode peut fonctionner sur Unix sur le processeur enviroment ARM, système Windows avec x86 et Haiku sur 64 bits).

Perl 6 peut être compilé pour Parrot VM (machine virtuelle) bytecode. Parrot VM est utilisé par Python et Ruby ainsi.

Ce qui fait Perl, Ruby et Python plus rapide que PHP, qui est juste interprété (peut être compilé aussi, mais vous avez besoin de composants 3ème partie pour cela).

Le plus souvent interprété, mais peut être compilé aussi. Perl compilateur

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top