Babel是编译器还是编译器?

时间:2017-05-14 21:01:27

标签: javascript ecmascript-6 babel

我一直在使用Babel一段时间了,而且我一直认为Babel是 transpiler ,用于将我的ES6和ES7 JavaScript转换为ES5 JavaScript,因为我假设您可以技术上将ES5和ES6视为两种不同的语言。

但是,我不禁注意到Babel的网站标题将其描述为编译器,我认为这与 transpiler 有很大不同。

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

Babel是转发器还是编译器,或者可能提供这两种选择?或者网站的标题是不正确的?

披露:我知道这听起来像是一个非常迂腐的问题,但我正在编写有关Babel的文档,我想确保我的描述准确无误

3 个答案:

答案 0 :(得分:35)

" transpiler"的定义和"编译器"很模糊。在保持行为的同时,他们都会translate从一种语言到另一种语言的程序。

我们通常将其命名为"编译器"当它产生可执行的二进制文件时但是,二进制只是另一种语言,可以由CPU解释。每个程序都是"可执行的"在相应的机器上。

我们通常将其命名为"编译器"当它产生比输入更低的输出时,例如C到汇编程序。或Java到Java字节码。或者ES8到ES5。等等......这真的是一个不同的水平吗?

我们通常将其命名为" transpiler"当其输出与输入处于类似的水平时,例如Python到JavaScript或其他方式。但是,总会有一些部分使用一种语言中的抽象,这种抽象需要被编译成#34;使用另一种语言进行较低级别的实现。

所以回答你的问题:

  

我认为编译器与转换器有很大不同。

没有

  

Babel是转换器还是编译器,或者可能提供两种选择?

  

或者是网站的标题' Babel - 用于编写下一代JavaScript的编译器'根本不正确?

没有。该标题侧重于下一代功能,即真正需要编译到更不同的输出的更高级别的抽象。即使输出仍然是普通的,主要是人类可读的JavaScript。

  

我正在撰写有关Babel的文档,我想确保我的描述准确无误

在这种情况下,我会在官方网站上使用他们自己的术语。如果您想将该工具与其他工具进行比较,请选择您自己的描述。

答案 1 :(得分:1)

Transpilers或源到源编译器是读取用一种编程语言编写的源代码,并用另一种语言生成等效代码的工具。

Babel既是一个转换器又是编译器,因为这些单词可以互换使用。

答案 2 :(得分:1)

Babel是{​​{3}},是transpiler的特殊类型,因此这两个术语在技术上都是正确的。您可以根据自己的喜好使用。

Babel是{​​{3}},因为它的源语言和目标语言都是JavaScript的一种风格,这是无可辩驳的:

  

源到源编译器,转换器或转发器是一种编译器,它将用一种编程语言编写的程序的源代码作为其输入,并在另一种编程语言中生成等效的源代码。编程语言。

然而,并不是每个人都同意这些术语之间的区别是有帮助的,所以有些人更喜欢简单地说,"编译器"。

我个人喜欢这种区别,因为对我而言,它暗示了抽象层次与源(输入)和目标(输出)语言之间机器语言的区别。也就是说,典型的"编译器"翻译从高级到低级语言,#34;反编译器"翻译从较低级别到较高级别的语言,以及"翻译器"在类似的抽象层次上翻译语言。