Dart 编译器在浏览器中编译 Dart 代码

  • Zef Hemel
  • 孙镜涛

2013 年 5 月 21 日

话题:语言 & 开发

Google 重新启动了try.dartlang.org在线实验室,用户不需要下载并安装 Dart SDK 就能够尝试Dart 。和前一版不同的是,新版本会在浏览器中将 Dart 代码编译成 JavaScript,这意味着它可以离线使用。此外,它还支持dart:html——一个用于 HTML DOM 操作的 Dart 库。无论如何,它的实现可能是 try.dartlang.org 最吸引人的一个方面。

Peter von der Ahé 在 Google+上宣布了该版本的发布

我们已经恢复了 try.dartlang.org。与旧版本相比,新版本具有浏览器内的编译功能、支持 dart:html,并且能够离线使用。

如果你拥有一个 iOS 设备,那么可以安装 Try Dart 作为主屏幕上的一个应用

虽然有很多针对大多数语言的实验环境可以使用——例如try ruby或者 repl.it,它们都为很多语言提供了 REPL(读取、求值、打印、循环)支持,包括 Python、JavaScript 以及 Lua 等很多其他的语言——但是,这些实验网站大部分会将用户的输入发送到服务器,然后在服务器端执行代码,最后将结果发送回客户端。与这些网站不同的是,Try.dartlang.org 会在浏览器中编译执行代码。

那么这是如何完成的呢?Dart 团队是如何做到在浏览器中将 Dart 托管给 JavaScript 编译器(称为 dart2js)的。看看 try.dartlang.org项目的源码库就能找到这个问题的答案。

Dart2js 编译器自身就是使用 Dart 编写的。通常,它会使用 SDK 中包含的 DartVM 运行。但是,为了实现 try.dartlang.org,Dart 团队调用了 dart2js 编译器本身,因而产生了一个能够在单独的 457KB 大小的 JavaScript 文件中将 Dart 代码翻译成 JavaScript 代码的编译器。浏览器会载入这个 JavaScript 版本的编译器,在每次编辑器中的 Dart 代码发生变化时都会调用它。然后便会执行翻译后的 JavaScript 代码,并显示出结果。

虽然在浏览器中运行 dart2js 编译器并不是一个使用 Dart 构建 Web 应用程序的典型示例,但是以这种方式引导的 dart2js 编译器却是一个令人印象深刻的技术杰作。

Try.dartlang.org 中有很多预先包装好的示例应用程序,你能够很容易地运行并调整它们从而更好地理解该语言的工作原理。示例的复杂性范围非常广,从简单的 hello world 应用程序开始到Delta Blue 基准测试都有。

查看英文原文Dart-Compiled Dart Compiler Compiles Dart Code in Browser

语言 & 开发