Babel est-il un compilateur ou un transposeur?

j'ai été en utilisant Babel pour un certain temps maintenant, et j'ai toujours eu l'impression que Babel était un transpiler pour la conversion de mon JavaScript ES6 et ES7 en JavaScript ES5, car je pensais que vous pourriez techniquement traiter ES5 et ES6 comme deux langues différentes.

Cependant, je ne pouvais pas aider mais noter que Babel site internet du titre le décrit comme un compilateur, je crois que c'est quelque chose de très différent à partir d'un transpiler.

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

Babel Est un transpiler et compilateur, ou peut-être offre les deux options? Ou le titre du site est-il tout simplement incorrect?

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

17
demandé sur AdamMcquiff 2017-05-15 00:01:27

3 réponses

Les définitions de "transpiler" et "compilateur" sont floues. Deux d'entre eux traduire un programme d'une langue à une autre tout en gardant le comportement.

nous l'appelons habituellement un "compilateur" quand il produit un exécutable binaire. Cependant, le binaire est juste un autre langage, qui peut être interprété par un CPU. Chaque programme est "exécutable" sur la machine respective.

nous l'appelons habituellement un "compilateur" quand il produit une sortie de niveau inférieur que l'entrée était, par exemple C à assembleur. Ou Java bytecode Java. Ou ES8 à ES5. Attends... c'est vraiment un niveau différent?

nous l'appelons habituellement "transpiler" lorsque sa sortie est à un niveau similaire à l'entrée, par exemple Python en JavaScript ou l'inverse. Cependant, il y aura toujours des parties qui utiliseront une abstraction disponible dans une langue et qui devront être "compilées" pour une implémentation de niveau inférieur dans l'autre langue.

Donc pour répondre à votre questions:

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

Non.

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

Oui.

Ou sur le site internet du titre 'Babel-le compilateur pour écrire la prochaine génération JavaScript ' simplement incorrect?

Non. Ce titre se concentre sur la prochaine génération caractéristiques, c'est-à-dire des abstractions de plus haut niveau qui doivent vraiment être compilé dans une sortie très différente. Même si la sortie est encore ordinaire, la plupart du temps humainement lisible, JavaScript.

j'écris de la documentation relative à Babel, et je veux m'assurer que ma description est exacte

dans ce cas, j'utiliserais leur propre terminologie du site officiel. Si vous voulez comparer l'outil, choisissez votre propre Description.

31
répondu Bergi 2017-05-14 21:37:39

les Transpilers, ou compilateurs 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 transpirateur et un compilateur car les mots peuvent être utilisés de façon interchangeable.

1
répondu Dennis 2017-05-14 21:37:21

Babel est un transpiler, qui est un type spécial de compilateur

Il est irréfutable que Babel est un compilateur source-to-source (alias transpiler) comme les langues source et cible sont toutes les deux un peu JavaScript:

un compilateur source à source, un transcompileur ou transpiler est un type de compilateur qui prend le code source d'une émission écrite dans un langage de programmation comme son entrée et produit le code source équivalent dans un autre langage de programmation.

cependant, tout le monde n'est pas d'accord que la distinction entre les termes est utile, de sorte que certaines personnes préfèrent simplement, "compiler".

j'aime personnellement la distinction parce que, pour moi, elle implique quelque chose à propos de la différence dans niveau d'abstraction de machine langauge entre la source langues (entrées) et langues cibles (sorties). C'est-à-dire que les "compilateurs" typiques traduisent à partir de langues de niveau supérieur à niveau inférieur, les "décomposeurs" traduisent à partir de langues de niveau inférieur à niveau supérieur, et les "transpilers" traduisent entre les langues à des niveaux d'abstraction similaires.

0
répondu maerics 2018-01-17 05:06:18