Ada*_*iff 27 javascript babel ecmascript-6
我一直在使用巴贝尔有一段时间了,而我一直的印象是,巴贝尔是下transpiler转换器ES6我和ES7的JavaScript到ES5的JavaScript,因为我的假设是,你可以在技术上治疗ES5和ES6作为两种不同的语言.
然而,我不禁注意到,巴贝尔的网站标题描述它作为一个编译器,我相信这是东西从一个非常不同的transpiler.
Babel是一个转换器还是编译器,或者可能提供两种选择?或者网站的标题是不正确的?
披露:我知道这听起来像是一个非常迂腐的问题,但我正在编写有关Babel的文档,我想确保我的描述准确无误
Ber*_*rgi 42
"transpiler"和"compiler"的定义很模糊.他们都将程序从一种语言翻译成另一种语言,同时保持行为.
我们通常在生成可执行二进制文件时将其命名为"编译器".但是,二进制只是另一种语言,可以由CPU解释.每个程序在相应的机器上都是"可执行的".
当它产生比输入更低级别的输出时,我们通常将它命名为"编译器",例如C到汇编程序.或Java到Java字节码.或者ES8到ES5.等等......真的是一个不同的水平吗?
我们通常将它命名为"transpiler",当它的输出与输入类似时,例如Python到JavaScript或反过来.但是,总会有一些部分使用一种语言中的抽象,这种抽象需要"编译"到另一种语言的低级实现.
那么回答你的问题:
我相信编译器与转换器有很大的不同.
没有.
Babel是一个转换器还是编译器,或者可能提供两种选择?
是.
或者网站的标题' Babel - 编写下一代JavaScript的编译器 '根本不正确?
不.该标题侧重于下一代功能,即真正需要编译成非常不同的输出的更高级别的抽象.即使输出仍然是普通的,主要是人类可读的JavaScript.
我正在撰写有关Babel的文档,我想确保我的描述准确无误
在那种情况下,我会从官方网站上使用他们自己的术语.如果要将该工具与其他工具进行比较,请选择您自己的说明.
Babel 是一个transpiler,它是一种特殊类型的编译器,所以这两个术语在技术上都是正确的。您可以根据自己的喜好使用任何一种。
无可辩驳的是,Babel 是一个源到源编译器(又名转译器),因为它的源语言和目标语言都是 JavaScript 的某种风格:
源到源编译器、transcompiler 或transpiler是一种编译器,它将以一种编程语言编写的程序的源代码作为其输入,并生成另一种编程语言中的等效源代码。
然而,并不是每个人都同意区分术语是有帮助的,所以有些人更喜欢简单的“编译器”。
我个人喜欢这种区别,因为对我来说,它暗示了源(输入)和目标(输出)语言之间机器语言抽象级别的差异。也就是说,典型的“编译器”从高级语言到低级语言翻译,“反编译器”从低级语言到高级语言翻译,“转译器”在相似抽象级别的语言之间翻译。