ECMAScript:Harmony / ES6到JavaScript编译器

时间:2011-06-28 12:39:25

标签: javascript compiler-construction ecmascript-harmony

阅读Peter's article on JavaScript之后,我注意到了

  

Brendan Eich表示,Harmony的目标之一是成为JavaScript编译器的更好目标。

目前有两个流行的编译器具有一些模糊的ES:Harmony合规性:

尽管CoffeeScript有一些合规性,但它并不是设计成ES:Harmony编译器,所以它对此没有用。

Tracuer似乎更严格地坚持ES:Harmony规范,但我不知道它是否打算成为一个完整的ES:Harmony编译器。

由于目标是将ES6编译为ES3,因此还需要支持ES5功能(可能还需要支持将ES5编译为ES3或ES6编译为ES3)。

  1. 目前是否还有其他项目旨在创建完整的ES:与ES3编译器的和谐?
  2. 开始编写这样的编译器是明智的,因为他们知道标准是年轻/不稳定/不稳定的。
  3. 目前是否有任何ES5 - > ES3编译器?
  4. 我在Traceur mailing list上留下了一个问题。

    这种编译器的目标是向后兼容ES3。在ES3中没有完全模拟ES5和ES6。

8 个答案:

答案 0 :(得分:14)

(以下无耻但相关的插件)

Caja正在通过ES5/3重新调整其ES5支持,并将对ES和谐做同样的工作。因此,我们的结构将被实现为ES3层的和谐,可以跳过真正的和谐实现,然后是一个可分离的加载器,它保留了与caja相关的安全属性。

与Traceur一样,Caja团队的成员也是TC39(ES Harmony的委员会)的成员。

我不了解Coffeescript的计划,但在讨论Harmony模块时提到了这一点。 Module loaders可能会拦截加载的源代码(通过eval hooks)并在模块初始化之前重写它,因此如果模块是用CoffeeScript编写的,则可以在初始化时调用运行时CoffeeScript重写器。这将允许应用程序由多种语言编写的模块组成,这些模块在加载时编译为Harmony。

有一点需要注意的是,Harmony中的所有内容都不能通过翻译轻松实现。例如,正确实现weak maps需要在JavaScript中实现自己的垃圾收集器,即使你这样做,也可能只是重新引入宿主对象/本机对象循环问题。

答案 1 :(得分:11)

查看基于ES6的微软新语言TypeScript

答案 2 :(得分:8)

Continuum已经实现了大部分相关功能,应该在es3浏览器中运行(比如旧的IE)。

答案 3 :(得分:4)

Mascara可能就是你要找的东西。

答案 4 :(得分:4)

截至发稿时,我们现在有Babel。它集成了许多不同的构建工具/系统,并将转换ES6 +以支持旧版浏览器(它没有说明它所针对的版本,但确实说它针对的是IE9 +)。

要安装它,请键入npm install babel -g

请注意,它有很多依赖项,安装时大约是23.4 MB(2888个文件)。

答案 5 :(得分:3)

Google Closure CompilerGithub)是ES6编译的绝佳工具。它是一个从命令行使用的简单Java jar。还有其他选项,如API服务和GUI,但我发现最好设置一个自动构建系统挂钩到Java JAR。它可以将您的ES6代码转换为ES5兼容代码。我开始使用它来压缩和混淆代码,但它也可以像我提到的那样进行错误检查和ES6转换。

请注意,ES6功能标记为实验性的。但是我计划很快将它们用于生产,因为我的测试结果坚如磐石。

答案 6 :(得分:1)

还有https://github.com/matthewrobb/six

  

Six是一种语言超级JavaScript集,它可以在今天的脚本中通过转换器使用第6版ECMAScript中的新语法功能。

     

警告:仍然处于非常早期的状态,请谨慎行事。

答案 7 :(得分:0)

我不确定在什么情况下编译回ES3会比ES5更有价值,因为实现更改仅限于数组和对象帮助函数,ES5 support is so prevalent

为了完整起见,另一个ES6到ES5编译器是Square的esnext项目。它是许多模块的集合,旨在填充一个包中提供的各种ES6功能。以下是列出的模块:https://github.com/square/esnext#available