web-dev-qa-db-fra.com

Comment fonctionne un interprète/compilateur

Comment fonctionne un interprète/compilateur? Quelle est la différence entre interprète et compilateur.

65
developer

Compilateurs

Les compilateurs ont été le premier type de programme de traduction à être écrit. Le L'idée est simple: vous écrivez le programme, puis donnez-le au compilateur qui le traduit. Ensuite, vous exécutez le résultat

Interprètes

Un interprète est aussi un programme qui traduit une langue de haut niveau en un niveau bas, mais il le fait à la moment où le programme est exécuté. Vous écrivez le programme en utilisant un éditeur de texte ou quelque chose de similaire, puis instruire l'interprète pour exécuter le programme. Il Prend le programme, ligne par ligne, Et traduit chaque ligne avant En le lançant: Il traduit la première ligne Et l'exécute, puis traduit la. il etc.

Caractéristiques du compilateur:

  • passe beaucoup de temps à analyser et à traiter le programme
  • l'exécutable résultant est une forme de code binaire spécifique à la machine
  • le matériel informatique interprète (exécute) le code résultant
  • l'exécution du programme est rapide

Caractéristiques de l'interprète:

  • relativement peu de temps est passé analyser et traiter le programme
  • le code résultant est une sorte de code intermédiaire
  • le code résultant est interprété par un autre programme
  • l'exécution du programme est relativement lente
53
Adriaan Stander

Qu'est-ce qu'un traducteur?

Un traducteur S -> T accepte le code exprimé en langue source S et le traduit en code équivalent exprimé en une autre langue (cible) T.

Exemples de traducteurs:

  • Compilateurs - traduit le code de niveau élevé en code de niveau inférieur, par exemple. Java -> JVM
  • Assembleurs - traduit le code de langue d'assembly en code machine, par exemple. x86as -> x86
  • Traducteurs de haut niveau - traduit le code d'un PL à un autre, par exemple. Java -> C
  • Décompilateurs - convertit le code de bas niveau en code de haut niveau, par exemple. Java bytecode -> Java

Qu'est-ce qu'un interprète?

Un interpréteur S accepte le code exprimé en langage S et exécute immédiatement ce code. Cela fonctionne en récupérant, en analysant et en exécutant une instruction à la fois.

Idéal lorsque l'utilisateur entre des instructions de manière interactive (pensez Python) et souhaite obtenir le résultat avant de passer à l'instruction suivante. Également utile lorsque le programme doit être exécuté une seule fois ou doit être portable. 

  • L'interprétation d'un programme est beaucoup plus lente que l'exécution du code machine natif
  • L'interprétation d'une langue de haut niveau est environ 100 fois plus lente
  • L'interprétation d'un langage de niveau intermédiaire (tel que le bytecode de la machine virtuelle Java) est environ 10 fois plus lente.
  • Si une instruction est appelée à plusieurs reprises, elle sera analysée à plusieurs reprises - cela prend du temps!
  • Pas besoin de compiler le code

Différences

Comportement

  • Un compilateur traduit le code source en code machine, mais n'exécute pas le code source ou le code objet.

  • Un interprète exécute le code source une instruction à la fois, mais ne traduit pas le code source.

Performance

  • Un compilateur met assez longtemps à traduire le programme source en code machine natif, mais son exécution ultérieure est rapide
  • Un interprète commence immédiatement à exécuter le programme source, mais son exécution est lente

Compilateurs d'interprétation

Un compilateur interprétatif est un bon compromis entre compilateurs et interprètes. Il traduit le programme source en code de machine virtuelle, qui est ensuite interprété.

Un compilateur interprétatif associe une traduction rapide à une exécution moyennement rapide, à condition que:

  • Le code de la machine virtuelle est inférieur à la langue source, mais supérieur au code de la machine native
  • Les instructions de VM ont des formats simples (peuvent être rapidement analysées par un interprète)

Exemple: JDK fournit un compilateur interprétatif pour Java.

30
martynas

Compilateur , transforme le code source d’un langage informatique en un autre. 

Interpreter , exécute le code source directement (généralement dans sa propre machine virtuelle).

alt text http://content.answers.com/main/content/img/CDE/COMPILE.GIF

Généralement interprète est une performance coûteuse.

19
KMån

Quelle est la différence entre interprète et compilateur?

 enter image description here

Compiler analyse d'abord le programme complet, puis le traduit en code machine qui sera exécuté par le processeur de l'ordinateur. 

Interpreters traduit une instruction en langage machine, l'exécute et passe à l'instruction suivante.

Comment fonctionne un interprète/compilateur? 

 enter image description here

  • Contrairement aux langages compilés qui sont traduits en langage machine à l’avance (à droite). 
  • Les langues interprétées sont traduites au moment de l'exécution. 
  • dBASE et BASIC interpreters (middle) traduisent le code source d'origine. 
  • Java et Visual Basic (à gauche) interpreters translate bytecode, qui est un langage intermédiaire compilé à partir du code source original

La source

16
Premraj

La différence vs comment ils fonctionnent 

Q: _ ​​A quoi servent les compilateurs et interprètes?

A: La plupart des programmes sont écrits dans des langages de haut niveau (c #, Java ...). Les langages de haut niveau contiennent des mots et des expressions compréhensibles. D'autre part, l'ordinateur (au moment où j'ai écrit cet article) comprend le code machine, code 0 et code binaire/1. Par conséquent, nous devons convertir le code de haut niveau en code source qui est (code machine/binaire). D'où la conversion de Word.

Nous concluons donc qu'un travail de compilateur/interprète consiste à convertir le code de haut niveau en code machine. 

Mais les deux ont une façon différente de "traduire" le code

Différence: 

Compilateur:

convertit le code source en une sorte de forme intermédiaire. Pour le langage statique, un compilateur convertit généralement le code source en assembleur, qui n'est généralement pas stocké sur disque, puis l'assembleur est appelé pour convertir l'assembly en code binaire, généralement stocké sous forme de fichier objet (suffixe .o ou .obj). généralement), l’éditeur de liens est appelé pour lier un ou plusieurs fichiers d’objets à un exécutable binaire. En outre, il est courant de parler de tout ce processus de compilation, d’assemblage, de liaison en tant que compilation. Vous pouvez donc appeler gcc un compilateur, mais il appelle en fait cc1 qui est le compilateur à compiler, ainsi que l’assembleur à assembler, ld qui est l’éditeur de liens à lier.

Interprète:

langage qui a une forme intermédiaire appelée code bytecode, le code source est d’abord converti en code octet, ce processus peut être appelé compilation, javac sert d’exemple . Le bytecode ne peut pas être exécuté sur les ordinateurs hôtes, il a besoin d'un programme, qui est en fait le processus du point de vue du système d'exploitation, pour interpréter le bytecode sur l'ordinateur hôte, ce programme s'appelle un interprète, pensez à Java. Certains langages, comme python, effectuent la compilation et l’interprétation avec un seul

- les deux à partir de: https://www.quora.com/What-are-the-differences-between-a-compiler-an-interpreter-and-assasser-Provide-examples

Comparant

Interprète

  • L'analyse du code source prend moins de temps, mais le temps d'exécution global est plus lent.
  • Aucun code d'objet intermédiaire n'est généré. Par conséquent, memory est efficace.
  • Continue de traduire le programme jusqu'à ce que la première erreur soit rencontrée, auquel cas elle s'arrête. Par conséquent, le débogage est facile.

Compilateur 

  • L'analyse du code source prend beaucoup de temps, mais le temps d'exécution global est comparativement plus rapide.
  • Génère du code d'objet intermédiaire qui nécessite en outre une liaison, nécessite donc davantage de mémoire.
  • Il génère le message d'erreur uniquement après avoir analysé l'ensemble du programme. Par conséquent, le débogage est relativement difficile.

- de: https://www.programiz.com/article/difference-compiler-interpreter

Exemples avec des langues

Interprété

  • Python 
  • Rubis 
  • PHP
  • Java (Tout-Puissant)
  • Perl 
  • R
  • Powershell

compilé 

  • C
  • C++
  • C #
  • Objectif c
  • Rapide
  • Fortran 
7
user 451

Compilateurs - Un compilateur traduit une langue source en une langue cible. Ensuite, la langue cible prend en entrée et donne en sortie.

Le compilateur produit un code cible en compilant le code source

alors le code cible prend alors l'entrée et donne la sortie

Interpréteurs - Au lieu de générer un code cible, l’interpréteur semble prendre directement l’entrée avec le code source et donner une sortie.

L'interprète associe l'entrée à la sortie à l'aide du programme source

Ensuite, le programme ciblé en langage machine produit par le compilateur est beaucoup plus rapide que l’interprète pour mapper les entrées sur la sortie. Cependant, puisque l'interprète exécute le programme source ligne par ligne, le diagnostic d'erreur est meilleur que celui du compilateur. 

Référence - Compilateurs: principes, techniques et outils par Aho aka the dragon book

0
vaibhaw.vipul

Quelle est la différence entre interprète et compilateur.

Pour le dire directement et intuitivement:

  • Compiler est ce qui traduit le code source lisible par l'homme en code machine que l'ordinateur pourrait lire et exécuter. 

  • Interprète est ce qui prétend être ou simule un ordinateur pour lire et exécuter le code source directement.

0
JawSaw