AtScript:又一门编译成 JavaScript 的语言

  • 谢丽

2014 年 10 月 28 日

话题:JavaScript语言 & 开发架构

JavaScript 有一个庞大、繁荣的社区,已经成为事实上的浏览器语言。但它缺少一些功能,使它难以应用于大型应用程序的开发。正是由于这个原因,才出现了TypeScriptDart。近日,AngularJS创建者Misko HeveryDurandalJS创建者Rob Eisenberg联合发布了《AtScript 入门(草稿)》。该文指出,AtScript 的目标同样是增加 JavaScript 缺少的功能。它从以下几个方面对 JavaScript 进行了增强:

  • 类型注解
  • 字段注解
  • 元数据注解
  • 支持注解的类型内省

该过程遵循如下几项原则:

  • 以 ECMAScript 6 为基础
  • 向后兼容——ES6/ES5 是 AtScript 的严格子集,上述增强都以不破坏 ES6/5 的现有语法或语义为前提。对于任何编写过 ES6/5 代码的开发人员而言,AtScript 很容易使用。他们常用的代码不做任何更改就可以用于 AtScript。
  • 熟悉的语法——一些符号的意义与其它语言相同。如在 AtScript 中,“@”用于指示元数据注解,Java、Dart 及其它一些语言也有同样的用法。
  • 语义无关——“语义探讨(semantic discussion)”及断言系统不在 AtScript 范围内。

为了开发出更易维护、更易理解的 Angular 代码,Angular 团队一年前开始研发 AtScript。目前,他们正基于 AtScript 语法进行 Angular v2 的开发。正在进行中的工作包括:Traceur 转换编译器和RTTS库。其中,前者是基于traceur构建的 AtScript 编译器,它能将 AtScript 代码编译成ES5及 Dart 代码。

虽然同为 JavaScript 的超集,同样都编译成 JavaScript,但 TypeScript 与 AtScript 相比有以下几点不足:

  • 只能进行静态类型分析
  • 缺少元数据注解
  • 没有提供运行时访问注解的机制

此外,Dart 的开发初衷也是弥补 JavaScript 的不足。但相比之下,Dart 从语义上就与 JavaScript 完全不同。Dart2JS 代码与 JavaScript 代码互操作性很差,开发人员无法在 Dart 中使用现有的 JavaScript 库。

除了构建 Angular 外,AtScript 的开发目标还包括使 Angular 用户可以使用 AtScript 构建他们自己的应用程序。AtScript 独立于Angular,也可以用于非 Angular 项目。后续,Angular 团队会考虑将它提交给标准组织。


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

JavaScript语言 & 开发架构