52

是否有 JavaScript 的本机机器代码编译器?我不是在谈论虚拟机。如果不存在可以做吗?
由于语言的动态特性,我想知道它是否可以编译为二进制。

4

8 回答 8

34

据我所知,JavaScript 没有静态编译器。这在理论上当然是可能的;然而,JavaScript 的静态编译需要一个非常重量级的运行时来支持它的所有特性(例如动态类型和 eval)。顺便说一句,当需要静态编译 Python(另一种动态语言)时,PyPy开发人员最终创建了一种语言,它是 Python 的一个非常受限制的子集(称为 RPython),没有 Python 的一些更动态的特性,能够被静态编译。

如果你问这个是为了从 JavaScript 代码创建一个独立的可执行文件,我敢肯定必须有包装器,它本质上会创建一个包含你的脚本和嵌入式 JavaScript VM 的可执行文件(遗憾的是,我不知道任何副手)。

于 2009-07-13T07:57:15.110 回答
29

这绝对是可行的,尽管我目前知道的唯一方法是两步过程......

  1. 使用Mozilla Rhino JSC将 javascript 编译为 Java 。
  2. 使用GNU 的 GCJ 之类的东西将生成的 java 类文件编译为可执行文件。

不过,你为什么要这样做?您希望找到什么优势?

于 2009-07-13T07:48:22.943 回答
10

Google V8 引擎将 JavaScript 编译为本机机器码。此功能用于我为 node.js 和 io.js 项目编写的EncloseJS编译器。

于 2015-02-08T12:56:06.343 回答
4

请注意,所有这些解决方案都DOM较少,因此没有类似angular.jsor的库jquery,只有underscore.js/lodash

按照Falaina的回答, PyPy 确实有一个用于JavaScript的 dist

此外,Appcelerator Titanium有一个js> JavaBit>android

最后,node.js可以使用nexe 在这个其他答案中解释

于 2015-01-22T18:18:29.330 回答
3

这在理论上是可能的,但是会涉及到很多运行时支持包(甚至是一个完整的 Javascript 编译器或解释器来支持eval)。

您是在寻找真正的本机代码编译器,还是在寻找可以将 Javascript 代码与运行时捆绑到单个可执行二进制文件中的东西?

于 2009-07-13T07:46:38.487 回答
2

我确定微软有一个可下载的 Jscript(“微软的 javascript”)编译器

如果您有 Windows:如果您编写一个 javascript 文本文件,您可以通过以下方式编译它: 使用 cd 打开命令提示符以进入文本文件目录(如果您有 Windows) 键入:C:\WINDOWS\Microsoft.NET\Framework\ v2.0.50727\jsc.exe 文本文件.js

否则:下载一个 jscript 编译器,输入 jscript 编译器的目录,然后输入 javascript 文本文件的名称

如果您不想将整个目录名称输入到编译器,则可以添加环境变量。

这家伙解释得更好: http ://www.phpied.com/make-your-javascript-a-windows-exe/

我个人认为这真的很酷。我只是希望有更多的文档。

我很确定这就是你要找的东西,但我有点新。

于 2014-09-02T23:55:23.213 回答
1

FF3.5 中的TraceMonkey对 javascript 代码的某些部分执行此操作。你也许可以从那里得到一些方向!

于 2009-07-13T07:49:04.863 回答
1

Adobe AIR 的 iOS 版 AOT 编译器静态编译 JavaScript 超集 Actionscript 3.0 到 ABC 字节码,然后通过 LLVM 编译机器码。如果您要编写没有类和类型注释的 AS3 代码,那么它本质上就是 JavaScript,然后编译器会很乐意将其编译为机器代码。遗憾的是,这不是开源软件,而且您无法访问任何 DOM(许多人在想到 JavaScript 时会想到),因为它本质上是在 Flash Player 实例中运行。

于 2015-10-15T15:30:51.367 回答