哪些编译器针对 JavaScript 运行时?

Posted

技术标签:

【中文标题】哪些编译器针对 JavaScript 运行时?【英文标题】:What compilers target JavaScript runtimes? 【发布时间】:2010-11-01 20:07:03 【问题描述】:

我正在使用 GWT,它包括一个 Java-to-javascript 编译器。在这个项目之前,我没有想到使用其他语言来定位 JavaScript 运行时,我很享受 GWT 的体验。

快速搜索发现 Java2Script 是另一种 Java 到 JavaScript 的解决方案。是否还有其他针对 JavaScript 运行时的成熟编译器?

【问题讨论】:

我们开发了websharper.com,将 F# 编译为 JavaScript。 【参考方案1】:

您还有Haxe。它具有静态、结构化、强类型和推断类型;代数数据类型;支持闭包的 lambda 表达式;一个模块系统,不仅可以编译为 JavaScript,还可以编译为 Flash、C++、Neko、php。 Java 支持也在开发中。

【讨论】:

【参考方案2】:

Clojure(一种基于 JVM 的 Lisp 方言)的发明者于 2011 年年中推出了ClojureScript。 ClojureScript 利用 Google Closure 编译器和 Closure 框架将 Clojure 源代码编译成 JavaScript。 ClojureScript 代码可以在浏览器客户端或 node.js 服务器上运行。

【讨论】:

【参考方案3】:

List of languages that compile to JS

【讨论】:

【参考方案4】:

这是一个我开始并继续开发的项目的无耻插件:scxml-js,一个 Statecharts-to-JavaScript 编译器

【讨论】:

【参考方案5】:

Pyjamas 将 Python 编译为 JavaScript。

HotRuby 在 JavaScript 和 Flash 下运行 Ruby 源代码。

Orto 是(曾经?)一个用 JavaScript 实现的 JVM。 (原始网站已关闭;链接指向博客条目。)

ZK framework 喜欢将自己与 GWT 进行比较,它使用 Java 和 XML 来生成 JavaScript。 (他们声称做同样事情所需的代码比 GWT 少得多。)

我听说jQuery 是一种独立的语言,它恰好在 JavaScript 中实现并在 JavaScript 下运行。 :-)

【讨论】:

【参考方案6】:

Parenscript 是“从小型 Lispy 语言到 JavaScript 的翻译器”。它不是 Common Lisp——它主要是 Javascript 的 Lisp 语法,不过对于简单的事情,如果你小心的话,你可以编写相同的代码来针对两者。我也不确定我是否会称其为“成熟”。

【讨论】:

【参考方案7】:

虽然还有其他产品可以编译成 javascript(在其他 cmets 中有说明),但我相信 GWT 是迄今为止最成熟的产品,就实际使用而言。 许多 Google 的核心应用程序使用 GWT(例如:新的 adwords GUI、Google wave 等)这一简单事实意味着您可以确信该产品将至少在未来几年内得到维护,而不仅仅是很快就会消失。

要记住的另一件事是,GWT 不仅仅是一个 java-to-javascript 编译器,它还是一个优化编译器,它具有托管模式,它与原生 javascript 完全互操作,它进行图像捆绑,它在新版本中是否进行代码拆分等。

【讨论】:

Google 在 Wave 公开发布后不到 3 个月就暂停了开发,所以回想起来,我不确定这是 GWT 预期寿命的最好例子。 :-)【参考方案8】: Script # JSC cappuccino(有点)

【讨论】:

【参考方案9】:

OpenLaszlo 是基于开源 XML -> Javascript(技术上是 Dhtml,也可以编译为 Flash)的编译器。我玩了一点,它看起来很有趣,虽然从来没有认真使用过它(我尝试它时 IDE 支持不好)。

Objective-j 是一个类似于objective-c 的类似项目,虽然作为javascript 运行(不确定它是否编译它或有一个js 解释器)。我对此知之甚少,但确实会不时在Ajaxian 上看到有关它的帖子。

【讨论】:

objective-j 在运行时或提前编译。它主要是带有一些额外结构的 javascript。 Objective-j 被解释(由 javascript 引擎)。就我个人的口味而言,这看起来有点奇怪,但是这个280atlas.com 是用objective-j 编写的,看起来很棒。虽然我确信在 GWT 中也有可能发生类似的事情。 Objective-J 代码看起来很难看。我也讨厌 Objective-C 代码,所以……OpenLazio 实际上看起来很棒,我什至可以尝试一下。

以上是关于哪些编译器针对 JavaScript 运行时?的主要内容,如果未能解决你的问题,请参考以下文章

javascript运行机制之执行顺序详解

zookeeper支持c++吗

为啥 C 程序会在运行时针对 C++ 库编译和链接 C 编译器然后 SIGILL?

JavaScript设计模式与开发实践 面向对象

node.js

为啥流行的 JavaScript 运行时不能处理看起来像同步的异步脚本?