我一直在使用Babel一段时间以来,我一直认为 Babel 是一个用于将 ES6 和 ES7 JavaScript 转换为 ES5 JavaScript 的编译器,因为我认为从技术上来说你可以 将 ES5 和 ES6 视为两种不同的语言。
但是,我不禁注意到 Babel 的网站标题将其描述为一个编译器,我认为这与转译器有很大不同。
Babel 是一个转译器还是编译器,或者可能提供这两种选择?或者网站的标题根本不正确?
披露:我知道这听起来像是一个非常迂腐的问题,但我正在编写与 Babel 相关的文档,并且我想确保我的描述是准确的
最佳答案
“转译器”和“编译器”的定义很模糊。他们俩都这样做translate从一种语言到另一种语言的程序,同时保持行为。
当它生成可执行二进制文件时,我们通常将其命名为“编译器”。然而,二进制只是另一种语言,可以由 CPU 解释。每个程序在各自的机器上都是“可执行的”。
当它产生比输入更低级别的输出时,我们通常将其命名为“编译器”,例如C 到汇编程序。或者 Java 到 Java 字节码。或者 ES8 到 ES5。等等……这真的是一个不同的级别吗?
当它的输出与输入处于相似的水平时,我们通常将其命名为“转译器”,例如Python 到 JavaScript 或相反。但是,总会有一些部分使用一种语言中可用的抽象,需要将其“编译”为另一种语言中的较低级别实现。
回答你的问题:
I believe a compiler is something very different from a transpiler.
没有。
Is Babel a transpiler or a compiler, or perhaps offers both options?
是的。
Or is the website's title 'Babel - The compiler for writing next generation JavaScript' simply incorrect?
没有。该标题重点关注下一代功能,即真正需要编译为非常不同的输出的更高级别的抽象。尽管输出仍然是普通的、大部分是人类可读的 JavaScript。
I am writing documentation relating to Babel, and I want to ensure my description is accurate
在这种情况下,我会使用官方网站上他们自己的术语。如果您想将该工具与其他工具进行比较,请选择您自己的描述。
关于javascript - Babel 是编译器还是转译器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968748/