web-dev-qa-db-fra.com

Compiler Vs Interpreter Vs Transpiler

Au cours d’une session de réaction à laquelle j’assistais, le présentateur a utilisé un terme transpiler pour expliquer le transfert/le transfert de code. J'ai toujours utilisé et entendu les termes compilateur et interprète pour convertir un code de langue en une forme pouvant être exécutée sur un ordinateur/système informatique. Transpiler est complètement nouveau pour moi. Quelqu'un peut-il m'aider à comprendre en quoi un transpiler est différent d'un compilateur ou d'un interprète et pourquoi cela est vraiment nécessaire?

32
RBT

Comme mentionné dans cet article Article de wiki , il s'agit d'un type de compilateur qui traduit le code source d'un langage de programmation à un autre. Le code source peut être dans une langue qui n'est plus utilisée, ou ne prend pas en charge les dernières avancées en matière de matériel/logiciel, ou selon le côté pratique/favorable du programmeur.

Un convertisseur de VB6 à VB.NET peut être considéré comme un transpiler. Je pourrais penser de l'outil COBOL à C #/C++/Java comme un transpiler.

20
Ajay

Compiler - compile le code en un code de niveau inférieur.

Exemple: 

  • "Developer code" -> "Machine code"
  • PHP -> C
  • Java -> bytecode

Transpiler - compile le code au même niveau de code/abstraction.

Exemple: 

  • "Developer code" -> "Another developer code or version"
  • JavaScript ES2015+ -> JavaScript ES5

Interprète - interprète le code, pas vraiment dans la même classe/ligue/contexte avec les deux ci-dessus.

Exemple: php.exe

  • "Votre code/scripts PHP à l'intérieur de index.php" -> "Résultats dans html ou comme pure index.html"
21
Jim M

Cela s'appelle souvent 'transpiler', lorsque vous traduisez du code avec des préprocesseurs JS tels que CoffeeScript, TypeScript (vous le nommez) en JavaScript pur… .. Mais ce n'est pas vraiment une chose exclusive à JS. Cela s'applique à tous les types de langages de programmation. La plupart du temps, cela s'appelle simplement compiler.

Transpiling est un terme spécifique utilisé pour écrire le code source dans une langue et se transformer en une autre langue qui a un niveau d'abstraction similaire.

Selon https://www.stevefenton.co.uk/2012/11/compiling-vs-transpiling/

Donc, dans votre cas:

  • 'compiler' JSX => JavaScript (et HTML), ce qui correspond, je pense, à la définition ci-dessus.
  • Par conséquent, cela peut s'appeler "transpiler". Bien qu'appeler cela «compiler» serait également correct.

Un autre exemple:

  • CoffeeScript/TypeScript/... whatEverScript .. => JavaScript et vice versa.
17
fuma

Un compilateur source à source effectue la traduction entre des langages de programmation fonctionnant approximativement au même niveau d'abstraction, tandis qu'un compilateur traditionnel effectue la traduction d'un langage de programmation de niveau supérieur en un langage de programmation de niveau inférieur.

Source: Wikipedia

  • Compiler - traduit le code source du langage de niveau supérieur au langage de niveau inférieur. 
    Exemple: Compilateurs C (C au code machine), outil javac de JDK (code Java au byte)
  • Transpiler - un type de compilateur qui convertit les codes source au même niveau d'abstraction.
    Exemple: Babel (ES6 + à ES5) - que vous pouvez utiliser pour écrire du code ES6 tout en prenant en charge les navigateurs plus anciens tels que IE 11 et versions ultérieures.
4
SmS

Par définition, transpiler est une forme spéciale de translator.

Compiler convertit le code source de haut niveau en un code de niveau d'abstraction inférieur. Généralement, mais pas nécessairement, l'objectif de la compilation est code machine. C'est-à-dire un code qui peut être exécuté directement par la CPU. Le compilateur peut également produire bytecode, une simulation du code machine, mais est ensuite interprété par une machine dite virtuelle (à savoir, bytecode Java et machine virtuelle Java). Cependant, le terme compiler peut s’appliquer à celui qui convertit le code en un autre langage de programmation qui n’est pas un code exécutable par la machine. La différence notable est que le compilateur réduit le niveau d'abstraction.

Translator convertit le code source d'un langage de programmation en un autre langage de programmation de niveau identique ou différent. Notez que le résultat peut être un code machine, si le code source était aussi un code machine.

Traspiler est très similaire à traducteur, mais convertit spécifiquement le code source entre les langages de programmation du même niveau d'abstraction même. Notez que les langages de programmation diffèrent beaucoup dans ce qu’ils abstiennent; Les niveaux d’abstraction diffèrent d’autant plus qu’ils s’appliquent à différents concepts qu’ils considèrent comme une abstraction. De ce fait, la conversion (transpilation) se situe souvent entre le similaire, pas les mêmes niveaux d'abstraction.

2
Valera Grishin

Compiler - Il agit comme une interface entre l'homme et l'ordinateur pour convertir le langage de compréhension humaine en langage de compréhension machine.

Types de compilateur

  • Compilateur de code natif : Compilateur utilisé pour compiler un code source pour le même type de plate-forme uniquement. La sortie générée par ce type de compilateur ne peut être exécutée que sur le même type de système informatique et de système d'exploitation que celui utilisé par le compilateur.
  • Compilateur croisé : Le compilateur utilisé pour compiler un code source pour différents types de plates-formes. Utilisé dans la création de logiciels pour systèmes intégrés pouvant être utilisés sur plusieurs plates-formes.
  • Compilateur source à source : ConvertitHLL(langue de haut niveau) ou langue source enLLL(langue de bas niveau) ou langue de machine.
  • Transpiler : ConvertitHLL(langage de haut niveau) en un autre HLL
1
Jeyanth