javascript - Babel 是编译器还是转译器?

标签 javascript ecmascript-6 babeljs

我一直在使用Babel一段时间以来,我一直认为 Babel 是一个用于将 ES6 和 ES7 JavaScript 转换为 ES5 JavaScript 的编译器,因为我认为从技术上来说你可以 将 ES5 和 ES6 视为两种不同的语言。

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

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

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/

相关文章:

javascript - 使用 jQuery 包装元素(和元素数组)

javascript - 如何使用 Object() 覆盖 JavaScript 对象值

javascript - 使用javascript通过https(通过客户端证书进行身份验证)连接到soap web服务

javascript - 使用javascript移动Openlayer map 的中心

javascript - 从 .js 文件访问全局变量

javascript - 如何用巴比伦创建一个 "Expression"?

javascript - 为什么 Webpack 在我的主目录中寻找预设?

javascript - Node.js ES6 如何从模块中导出类?

javascript - ES6 : Applying function as class method

javascript - 将 async await 与 babel 一起使用时出现意外 token