是否有用于JavaScript的本机机器代码编译器?

时间:2009-07-13 07:42:08

标签: javascript compilation native native-code

是否有针对JavaScript的本机机器代码编译器? 我不是在谈论VM。 如果它不存在可以吗?
我想知道它是否可以编译为二进制,因为语言的动态性质。

8 个答案:

答案 0 :(得分:29)

据我所知,JavaScript没有静态编译器。这在理论上肯定是可能的;但是,JavaScript的静态编译需要一个非常重量级的运行时来支持它的所有功能(例如动态类型和eval)。作为一小部分,当需要静态编译Python(另一种动态语言)时,PyPy开发人员最终创建了一种语言,这是Python的一个非常有限的子集(称为RPython),没有一些Python的更具动态性的功能,可以静态编译。

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

答案 1 :(得分:25)

这绝对可行,虽然目前我知道如何做的唯一方法是两个步骤......

  1. 使用Mozilla Rhino JSC将JavaScript编译为Java。
  2. 使用类似GNU's GCJ的内容将生成的java类文件编译为可执行文件。
  3. 但是你为什么要这样?你期望找到什么优势?

答案 2 :(得分:9)

Google V8引擎将JavaScript编译为本机机器代码。这个特性在我为node.js和io.js项目编写的EncloseJS编译器中使用。

答案 3 :(得分:4)

请注意,所有这些解决方案都少DOM,所以没有angular.jsjquery等图书馆,只有underscore.js / lodash

跟随 Falaina 的回答, PyPy 确实JavaScript启用了

此外,Appcelerator Titanium还有js> JavaBit> android

最后,node.js可以使用nexe 在另一个answer

中解释

答案 4 :(得分:2)

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

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

答案 5 :(得分:2)

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

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

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

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

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

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

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

答案 6 :(得分:1)

FF3.5中的

TraceMonkey对javascript代码的某些部分执行此操作。你可以从那里得到一些指示!

答案 7 :(得分:1)

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