是否有针对JavaScript的本机机器代码编译器?
我不是在谈论VM。
如果它不存在可以吗?
我想知道它是否可以编译为二进制,因为语言的动态性质。
答案 0 :(得分:29)
据我所知,JavaScript没有静态编译器。这在理论上肯定是可能的;但是,JavaScript的静态编译需要一个非常重量级的运行时来支持它的所有功能(例如动态类型和eval)。作为一小部分,当需要静态编译Python(另一种动态语言)时,PyPy开发人员最终创建了一种语言,这是Python的一个非常有限的子集(称为RPython),没有一些Python的更具动态性的功能,可以静态编译。
如果你是为了从JavaScript代码创建一个独立的可执行文件而要求这个,我肯定必须有一个包装器,它本质上会创建一个包含你的脚本和嵌入式JavaScript VM的可执行文件(遗憾的是,我不是知道任何随便的事。)
答案 1 :(得分:25)
这绝对可行,虽然目前我知道如何做的唯一方法是两个步骤......
但是你为什么要这样?你期望找到什么优势?
答案 2 :(得分:9)
Google V8引擎将JavaScript编译为本机机器代码。这个特性在我为node.js和io.js项目编写的EncloseJS编译器中使用。
答案 3 :(得分:4)
请注意,所有这些解决方案都少DOM
,所以没有angular.js
或jquery
等图书馆,只有underscore.js
/ lodash
跟随 Falaina 的回答, PyPy 确实为JavaScript启用了
此外,Appcelerator Titanium还有js
> JavaBit
> android
答案 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)
TraceMonkey对javascript代码的某些部分执行此操作。你可以从那里得到一些指示!
答案 7 :(得分:1)
用于iOS的Adobe AIR AOT编译器将名为Actionscript 3.0的JavaScript超集静态编译为ABC字节码,然后通过LLVM编译机器代码。如果您在没有类和没有类型注释的情况下编写AS3代码,那么它本质上就是JavaScript,然后编译器会很乐意将其编译为机器代码。遗憾的是,这不是开源软件,并且您无法访问任何DOM(许多人在想到JavaScript时都会想到),因为它基本上是在Flash Player实例中运行。