84 votes

Comment fonctionne un interpréteur/compilateur

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

71voto

astander Points 83138

Compilateurs

Les compilateurs ont été la première sorte de programme traducteur à être écrit. L'idée de idée est simple : Vous écrivez le programme, puis vous le donnez au compilateur qui le traduit. Puis vous exécutez le résultat.

Interprètes

Un interprète est aussi un programme qui traduit un langage de haut niveau en en un langage de bas niveau, mais il le fait au moment où le programme est exécuté. Vous écrivez le programme à l'aide d'un éditeur de texte ou quelque chose de similaire, puis vous demandez l'interpréteur d'exécuter le programme. Il prend le programme, une ligne à la fois, et traduit chaque ligne avant avant de l'exécuter : Il traduit la première ligne et l'exécute, puis traduit la deuxième ligne et l'exécute, etc.

Caractéristiques du compilateur :

  • passe beaucoup de temps à analyser et traitement du 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 des interprètes :

  • relativement peu de temps est consacré l'analyse et le traitement du 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

36voto

martynas Points 3494

Qu'est-ce qu'un traducteur ?

Un site Traducteur S -> T accepte le code exprimé dans le langage source S, et le traduit en un code équivalent exprimé dans un autre langage (cible) T.

Exemples de traducteurs :

  • Compilateurs - traduisent le code de haut niveau en code de bas niveau, par ex. Java -> JVM
  • Assembleurs - traduisent le code du langage d'assemblage en code machine, par ex. x86as -> x86
  • Traducteurs de haut niveau - ils traduisent le code d'un PL à un autre, par ex. Java -> C
  • Décompilateurs - traduisent le code de bas niveau en code de haut niveau, par ex. bytecode de la JVM -> Java

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

Un site Interprète S accepte un code exprimé dans le langage S, et exécute immédiatement ce code. Il fonctionne en récupérant, analysant et exécutant une instruction à la fois.

Idéal lorsque l'utilisateur saisit des instructions de manière interactive (pensez à Python) et souhaite obtenir le résultat avant de saisir l'instruction suivante. Également utile lorsque le programme ne doit être exécuté qu'une seule fois ou qu'il 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'un langage de haut niveau est ~100 fois plus lente.
  • L'interprétation d'un langage de niveau intermédiaire (tel que le bytecode de la JVM) est environ 10 fois plus lente.
  • Si une instruction est appelée à plusieurs reprises, elle sera analysée à plusieurs reprises - ce qui 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 objet.

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

Performance

  • Un compilateur prend beaucoup de temps pour traduire le programme source en code machine natif, mais l'exécution ultérieure est rapide.
  • Un interpréteur commence à exécuter le programme source immédiatement, mais l'exécution est lente.

Compilateurs interprétatifs

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

Un compilateur interprétatif combine une traduction rapide avec une exécution modérément rapide, à condition que :

  • Le code VM est inférieur au langage source, mais supérieur au code machine natif.
  • Les instructions VM ont des formats simples (peuvent être rapidement analysées par un interprète).

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

23voto

KMån Points 7972

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

Interprète Le logiciel de gestion de l'information, qui exécute directement le code source (généralement dans sa propre machine virtuelle).

alt text
(source : <a href="http://content.answers.com/main/content/img/CDE/COMPILE.GIF" rel="nofollow noreferrer">answers.com </a>)

En général, l'interprète est coûteux en performance.

19voto

premraj Points 120

Quelle est la différence entre l'interpréteur et le compilateur ?

enter image description here

Le site Compilateur analyse d'abord l'ensemble du programme, puis le traduit en code machine qui sera exécuté par le processeur de l'ordinateur.

Le site Interprètes traduit une instruction en langage machine, l'exécute et passe à l'instruction suivante.

Par exemple : Le compilateur donnera presque toutes les erreurs en même temps mais l'interpréteur fonctionnera jusqu'à ce que l'instruction que vous avez écrite soit fausse.

Comment fonctionne un interpréteur/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 interprètes (au milieu) traduire le code source original.
  • Java et Visual Basic (à gauche) interprètes traduire bytecode qui est un langage intermédiaire compilé à partir de l'original. code source .

Fuente

7voto

user 451 Points 402

La différence et leur fonctionnement

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

A : La plupart des programmes sont écrits dans des langages de haut niveau (c#, java...). Les langages de haut niveau sont ceux qui contiennent des mots et des phrases compréhensibles. D'autre part, les ordinateurs (au moment où j'ai écrit cet article) comprennent le code machine qui est composé de 0 et de 1 seulement, c'est-à-dire le code binaire/machine. Par conséquent, nous devons convertir le code de haut niveau en code source qui est (code machine/binaire). D'où le mot "conversion".

Nous pouvons donc conclure que le travail d'un compilateur/interprète consiste à traduire un 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 forme intermédiaire. Pour un langage statique, un compilateur convertit généralement le code source en un assemblage, qui n'est généralement pas stocké sur le disque, puis l'assembleur est appelé à convertir l'assemblage en code binaire, qui est généralement stocké en tant que fichier objet (suffixe .o ou .obj généralement), puis l'éditeur de liens est appelé à lier le(s) fichier(s) objet à l'exécutable binaire. Il est également courant de se référer à l'ensemble du processus de compilation, d'assemblage et de liaison comme une compilation. Ainsi, vous pouvez appeler gcc un compilateur, mais il invoque en fait cc1 qui est le compilateur pour compiler, as qui est l'assembleur pour assembler, ld qui est l'éditeur de liens pour lier.

Interprète :

Un langage qui a une forme intermédiaire appelée bytecode, le code source est d'abord converti en byte code, ce processus peut être appelé compilation, javac sert d'exemple. Le bytecode ne peut pas être exécuté sur les machines 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 la machine hôte, ce programme est appelé un interpréteur, pensez à java. Certains langages, comme python, effectuent le travail de compilation et d'interprétation avec un seul programme.

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

Comparaison de

Interprète

  • Il faut moins de temps pour analyser le code source, mais le temps d'exécution global est plus lent.
  • Aucun code objet intermédiaire n'est généré, donc les mémoire efficace.
  • Continue à traduire le programme jusqu'à ce que la première erreur soit rencontrée, auquel cas il s'arrête. Le débogage est donc 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 un code objet intermédiaire qui nécessite une liaison supplémentaire, ce qui requiert davantage de mémoire.
  • Il ne génère le message d'erreur qu'après avoir analysé l'ensemble du programme. Le débogage est donc relativement difficile.

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

Exemples de langues

Interprété

  • Python
  • Ruby
  • PHP
  • JAVA(Tout-Puissant)
  • Perl
  • R
  • Powershell

compilé

  • C
  • C++
  • C#
  • Objectif-C
  • SWIFT
  • Fortran

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X