是否有 JavaScript 的本机机器代码编译器?我不是在谈论虚拟机。如果不存在可以做吗?
由于语言的动态特性,我想知道它是否可以编译为二进制。
8 回答
据我所知,JavaScript 没有静态编译器。这在理论上当然是可能的;然而,JavaScript 的静态编译需要一个非常重量级的运行时来支持它的所有特性(例如动态类型和 eval)。顺便说一句,当需要静态编译 Python(另一种动态语言)时,PyPy开发人员最终创建了一种语言,它是 Python 的一个非常受限制的子集(称为 RPython),没有 Python 的一些更动态的特性,能够被静态编译。
如果你问这个是为了从 JavaScript 代码创建一个独立的可执行文件,我敢肯定必须有包装器,它本质上会创建一个包含你的脚本和嵌入式 JavaScript VM 的可执行文件(遗憾的是,我不知道任何副手)。
这绝对是可行的,尽管我目前知道的唯一方法是两步过程......
- 使用Mozilla Rhino JSC将 javascript 编译为 Java 。
- 使用GNU 的 GCJ 之类的东西将生成的 java 类文件编译为可执行文件。
不过,你为什么要这样做?您希望找到什么优势?
Google V8 引擎将 JavaScript 编译为本机机器码。此功能用于我为 node.js 和 io.js 项目编写的EncloseJS编译器。
请注意,所有这些解决方案都DOM
较少,因此没有类似angular.js
or的库jquery
,只有underscore.js
/lodash
按照Falaina的回答, PyPy 确实有一个用于JavaScript的 dist
此外,Appcelerator Titanium有一个js
> JavaBit
>android
这在理论上是可能的,但是会涉及到很多运行时支持包(甚至是一个完整的 Javascript 编译器或解释器来支持eval
)。
您是在寻找真正的本机代码编译器,还是在寻找可以将 Javascript 代码与运行时捆绑到单个可执行二进制文件中的东西?
我确定微软有一个可下载的 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/
我个人认为这真的很酷。我只是希望有更多的文档。
我很确定这就是你要找的东西,但我有点新。
FF3.5 中的TraceMonkey对 javascript 代码的某些部分执行此操作。你也许可以从那里得到一些方向!
Adobe AIR 的 iOS 版 AOT 编译器静态编译 JavaScript 超集 Actionscript 3.0 到 ABC 字节码,然后通过 LLVM 编译机器码。如果您要编写没有类和类型注释的 AS3 代码,那么它本质上就是 JavaScript,然后编译器会很乐意将其编译为机器代码。遗憾的是,这不是开源软件,而且您无法访问任何 DOM(许多人在想到 JavaScript 时会想到),因为它本质上是在 Flash Player 实例中运行。