web-dev-qa-db-fra.com

Babel est-il un compilateur ou un transpilateur?

J'utilise Babel depuis un moment maintenant, et j'ai toujours eu l'impression que Babel était un transpilateur pour convertir mon JavaScript ES6 et ES7 en JavaScript ES5, car j'étais dans l'hypothèse que vous pouviez techniquement traiter ES5 et ES6 comme deux langues différentes.

Cependant, je n'ai pas pu m'empêcher de remarquer que le titre du site Web de Babel le décrit comme un compilateur , ce qui, je pense, est très différent d'un transpilateur .

Babel website title - 'Babel - The compiler for writing next generation JavaScript

Babel est-il un transpilateur ou un compilateur , ou offre peut-être les deux options? Ou le titre du site Web est-il simplement incorrect?

Divulgation: Je sais que cela ressemble à une question très pédante, mais j'écris de la documentation concernant Babel, et je veux m'assurer que ma description est exacte

25
AdamMcquiff

Les définitions de "transpiler" et "compiler" sont floues. Les deux font traduire un programme d'une langue vers une autre langue tout en conservant le comportement.

Nous l'appelons généralement un "compilateur" lorsqu'il produit un binaire exécutable. Cependant, le binaire n'est qu'un autre langage, qui peut être interprété par un CPU. Chaque programme est "exécutable" sur la machine respective.

Nous l'appelons généralement un "compilateur" lorsqu'il produit une sortie de niveau inférieur à celle de l'entrée, par ex. C à l'assembleur. Ou Java à Java bytecode. Ou ES8 à ES5. Attendez… est-ce vraiment un niveau différent?

Nous l'appelons généralement un "transpilateur" lorsque sa sortie est au même niveau que l'entrée, par ex. Python vers JavaScript ou l'inverse. Cependant, il y aura toujours des parties qui utilisent une abstraction disponible dans une langue qui doivent être "compilées" pour une implémentation de niveau inférieur dans l'autre langue .

Alors pour répondre à vos questions:

Je crois qu'un compilateur est quelque chose de très différent d'un transpilateur.

Non.

Babel est-il un transpilateur ou un compilateur, ou offre peut-être les deux options?

Oui.

Ou est-ce que le titre du site Web ' Babel - Le compilateur pour écrire la prochaine génération de JavaScript ' est tout simplement incorrect?

Non. Ce titre se concentre sur les fonctionnalités de nouvelle génération, c'est-à-dire les abstractions de niveau supérieur qui doivent vraiment être compilées dans une sortie très différente. Même si la sortie est toujours ordinaire, principalement lisible par l'homme, JavaScript.

J'écris de la documentation concernant Babel et je veux m'assurer que ma description est exacte

Dans ce cas, j'utiliserais leur propre terminologie sur le site officiel. Si vous souhaitez comparer l'outil à d'autres, choisissez votre propre description.

39
Bergi

Les transpilers, ou compilateurs de source à source, sont des outils qui lisent le code source écrit dans un langage de programmation et produisent le code équivalent dans un autre langage.

Babel est à la fois un transpilateur et un compilateur car les mots peuvent être utilisés de manière interchangeable.

1
Dennis

Babel est un transpiler , qui est un type spécial de compilateur , donc les deux termes sont techniquement corrects. Vous pouvez utiliser l'un ou l'autre selon vos préférences.

Il est irréfutable que Babel est un compilateur source-à-source (aka transpiler) puisque ses langues source et cible sont toutes les deux une sorte de JavaScript:

Un compilateur de source à source, un transcompilateur ou un transpilateur est un type de compilateur qui prend en entrée le code source d'un programme écrit dans un langage de programmation. et produit le code source équivalent dans un autre langage de programmation.

Cependant, tout le monde n'est pas d'accord pour dire que la distinction entre les termes est utile, donc certaines personnes préfèrent simplement "compilateur".

Personnellement, j'aime la distinction car, pour moi, cela implique quelque chose sur la différence de niveau d'abstraction de la langue de la machine entre les langues source (entrée) et cible (sortie). C'est-à-dire que les "compilateurs" typiques traduisent des langues de niveau supérieur à inférieur, les "décompilateurs" traduisent des langues de niveau inférieur à supérieur et les "transpilateurs" traduisent entre les langues à des niveaux d'abstraction similaires.

1
maerics