"转译器"和"编译器"的定义有些模糊。它们都translate将程序从一种语言翻译成另一种语言,同时保持其行为。
当它产生可执行二进制文件时,我们通常称之为"编译器"。然而,二进制文件只是另一种语言,可以被CPU解释。每个程序在相应的机器上都是"可执行的"。
当它产生低于输入级别的输出时,例如C到汇编语言,或Java到Java字节码,或ES8到ES5时,我们通常称之为"编译器"。等等...这真的是不同的级别吗?
当其输出与输入处于类似级别时,例如Python到JavaScript或反之,则通常称之为"转译器"。然而,总会有使用一种语言中可用的抽象部分的部分需要在另一种语言中进行"编译"以实现更低级别的实现。
因此,回答您的问题:
我认为编译器与转译器非常不同。
不是这样的。
Babel是一个转译器还是编译器,或者两者都提供?
是的。
或者说,网站的标题“Babel-编译器,用于编写下一代JavaScript”,是不是完全不准确?
不是。该标题侧重于下一代功能,即需要被编译成非常不同的输出的更高级抽象。尽管输出仍然是普通的,大多数人可读的JavaScript。
我正在撰写与Babel相关的文档,我想确保我的描述准确无误。
在这种情况下,我会使用官方网站上的术语。如果您想将此工具与其他工具进行比较,请选择您自己的描述。
Babel是一种转译器,这是一种特殊类型的编译器,所以两个术语在技术上都是正确的。您可以根据自己的喜好使用其中任一个。
毋庸置疑,Babel是一种源代码到源代码的编译器(又称转译器),因为它的源语言和目标语言都是某种JavaScript的变体:
源代码到源代码的编译器、转换器或转译器是一种编译器,它将一个程序的源代码作为输入,然后生成另一种编程语言的等效源代码。
但是,并不是每个人都认为这些术语之间的区别有帮助,所以有些人更喜欢简单地使用“编译器”。
我个人很喜欢这种区别,因为对我来说,它意味着与机器语言的抽象级别之间的差异在源(输入)语言和目标(输出)语言之间。也就是说,典型的“编译器”从高级语言翻译成低级语言,“反编译器”从低级语言翻译成高级语言,“转译器”在类似的抽象级别之间翻译。
转译器或源代码到源代码编译器是一种工具,它可以读取使用一种编程语言编写的源代码,并生成另一种语言的等效代码。
Babel是一个转译器和编译器,这两个词可以互换使用。