web-dev-qa-db-fra.com

Quelle est la différence entre un langage compilé et interprété?

Après avoir lu des documents sur ce sujet, je ne suis toujours pas sûr de la différence entre un langage compilé et un langage interprété. On m'a dit que c'était l'une des différences entre Java et JavaScript. Quelqu'un pourrait-il m'aider, s'il vous plaît, à le comprendre?

110
SIr Codealot

Quelle est la différence entre un langage compilé et interprété?

La différence est pas dans le langage; c'est dans l'implémentation .

Une fois que cela est sorti de mon système, voici une réponse:

  • Dans une implémentation compilée, le programme original est traduit en instructions machine natives, qui sont exécutées directement par le matériel.

  • Dans une implémentation interprétée, le programme d'origine est traduit en quelque chose d'autre. Un autre programme, appelé "l'interprète", examine ensuite "autre chose" et exécute les actions demandées. Selon la langue et sa mise en œuvre, il existe une variété de formes de "quelque chose d'autre". De plus populaire à moins populaire, "quelque chose d'autre" pourrait être

    • Instructions binaires pour une machine virtuelle, souvent appelées bytecode , comme dans Lua, Python, Ruby, Smalltalk et de nombreux autres systèmes (l'approche a été popularisée dans les années 1970 par le système P UCSD et Pascal UCSD)

    • Représentation arborescente du programme d'origine, telle qu'un arbre à syntaxe abstraite, comme c'est le cas pour de nombreux interprètes prototypes ou pédagogiques

    • Une représentation symbolisée du programme source, similaire à Tcl

    • Les caractères du programme source, comme dans MINT et TRAC

Une chose qui complique le problème est que il est possible de traduire (compiler) le bytecode en instructions machine natives . Ainsi, une implémentation interprétée réussie pourrait éventuellement acquérir un compilateur. Si le compilateur s'exécute de manière dynamique en coulisse, il est souvent appelé un compilateur juste à temps ou un compilateur JIT. Les JIT ont été développés pour Java, JavaScript, Lua et je pense pouvoir parler de nombreux autres langages. À ce stade, vous pouvez avoir une implémentation hybride dans laquelle du code est interprété et du code compilé.

153
Norman Ramsey

Java et JavaScript sont un assez mauvais exemple pour démontrer cette différence, parce que les deux sont des langages interprétés. Java (interprété) et C (ou C++) (compilé) aurait pu être un meilleur exemple.

Pourquoi le texte barré? Comme cette réponse souligne correctement, interprété/compilé concerne une implémentation concrète d'un langage , pas à propos de la langue en soi. Bien que les énoncés tels que "C est un langage compilé" sont généralement vrais, rien n'empêche quelqu'un d'écrire un interprète en langage C. En fait, les interprètes pour C existent .

Fondamentalement, le code compilé peut être exécuté directement par le processeur de l'ordinateur. C'est-à-dire que le code exécutable est spécifié dans le langage "natif" de la CPU ( langage d'assemblage).

Toutefois, le code des langages interprétés doit être traduit au moment de l’exécution de tout format en instruction de la machine CPU. Cette traduction est effectuée par un interprète.

Une autre façon de le dire est celle interprétée les langues sont le code est traduit en instructions machine pas à pas while le programme est en cours d'exécution, en cours de compilation les langues ont le code a été traduit avant exécution du programme.

55
stakx

Voici la différence fondamentale entre le compilateur et le langage interprète.

Langage du compilateur

  • Prend tout le programme en une seule entrée et le convertit en code objet qui est stocké dans le fichier.
  • Le code d'objet intermédiaire est généré
  • par exemple: C, C++
  • Les programmes compilés s'exécutent plus rapidement car la compilation est effectuée avant l'exécution.
  • La mémoire requise est davantage due à la création de code objet.
  • Les erreurs sont affichées après la compilation du programme complet
  • Code source --- Compilateur --- Code machine --- Sortie

Langue de l'interprète:

  • Prend une seule instruction en tant qu'entrée unique et exécute des instructions.
  • Le code d'objet intermédiaire n'est PAS généré
  • par exemple: Perl, Python, Matlab
  • Les programmes interprétés s'exécutent plus lentement car la compilation et l'exécution ont lieu simultanément.
  • La mémoire requise est inférieure.
  • Les erreurs sont affichées pour chaque instruction.
  • Code source --- Interpréteur --- Sortie
14
PGOEL

Un compilateur, en général, lit le code informatique en langage de niveau supérieur et le convertit en code p ou en code machine natif. Un interprète s'exécute directement à partir de p-code ou d'un code interprété tel que Basic ou LISP. En règle générale, le code compilé est beaucoup plus rapide, compact et a déjà détecté toutes les erreurs de syntaxe et de nombreuses erreurs de référence illégales. Le code interprété ne trouve ces erreurs que lorsque l'application tente d'interpréter le code affecté. Le code interprété est souvent utile pour les applications simples qui ne seront utilisées qu'une ou deux fois au plus, voire pour le prototypage. Le code compilé est préférable pour les applications sérieuses. Un compilateur prend d'abord tout le programme, vérifie les erreurs, le compile puis l'exécute. Alors qu'un interprète le fait ligne par ligne, il prend donc une ligne, vérifie les erreurs puis l'exécute.

Si vous avez besoin de plus d’informations, ne cherchez que Google pour "différence entre compilateur et interprète".

4
Salil

C'est une distinction très obscure, et en fait généralement pas une propriété d'un langage, mais plutôt du programme que vous utilisez pour exécuter du code dans ce langage.

Cependant, la plupart des langages sont principalement utilisés sous une forme ou une autre, et oui, Java est essentiellement toujours compilé, alors que javascript est essentiellement toujours interprété.

Compiler le code source, c’est exécuter un programme qui génère un fichier exécutable binaire qui, lorsqu’il est exécuté, a le comportement défini par la source. Par exemple, javac compile les fichiers .Java à lecture humaine en fichiers .class lisibles par machine.

Pour interpréter le code source, vous exécutez un programme qui génère immédiatement le comportement défini, sans générer de fichier intermédiaire. Par exemple, lorsque votre navigateur Web charge stackoverflow.com, il interprète un tas de javascript (que vous pouvez consulter en affichant le code source de la page) et produit de nombreux effets Nice de ces pages - par exemple, le vote ascendant ou le notifiant barres en haut.

2
Personman

Le langage interprété est exécuté à l'exécution conformément aux instructions, comme dans les scripts Shell, et le langage compilé est compilé (modifié en langage Assembly, ce que le processeur peut comprendre), puis exécuté comme en c ++.

1
Praveen Kishor