【发布时间】:2009-07-20 08:37:06
【问题描述】:
我知道 google 的 v8 将 javascript 编译为本机(如果我理解正确,则为二进制)代码。
有没有办法把输出变成exe?
【问题讨论】:
标签: javascript executable v8
我知道 google 的 v8 将 javascript 编译为本机(如果我理解正确,则为二进制)代码。
有没有办法把输出变成exe?
【问题讨论】:
标签: javascript executable v8
我不认为您可以使用 V8 直接将一段 JavaScript 转换为可执行文件,但您可以制作一个将 V8 引擎与 JavaScript 捆绑在一起并作为独立运行的应用程序。
你可以在its project page找到所有关于V8的信息。
另请注意,JavaScript 不能完全编译,因为它是一种动态语言。在 V8 中,它是 JIT 编译的(例如 .NET)。尽管如此(例如 .NET)仍然可以将其转换为独立的可执行文件。
如果您想开发使用 HTML 进行渲染的独立应用程序,您也可以查看Adobe Air。
【讨论】:
Javascript 不能只编译一次。该语言的 eval 被广泛使用。 (例如 JSON)你需要携带 JIT 和整个运行时。
这里的JIT只是一种优化,并不是摆脱编译器/解释器的方式。
【讨论】:
Node.js 嵌入 V8。这可能是一个值得学习的好例子。
【讨论】:
已经有一些尝试将 js 变成原生代码,这不是可以通过任何方式在生产中使用的东西,更多的是学术兴趣。 用于 java 的 Rhino 解释器可以选择将 js 转换为 (java) 字节码,因此一种方法是转换为字节码,然后使用 GCJ 从字节码转换为本机。有一些关于 Rhino 和 GCJ 的讨论,但我不知道是否有人曾经尝试过。 https://groups.google.com/forum/#!msg/netscape.public.mozilla.jseng/c3tqyLZ19fw/8V4HeuMtIXUJ
另一种方法是使用 Python,特别是 Py-Py,它本身是用 Python 的一个非标准子集编写的,称为 rPython。 rPython 不适合人类消费,但它的好处是可以编译为本机。一个有趣(虽然古怪)的实验是将 Javascript 编译为 Python,然后在某些情况下,Python 恰好作为 rPython 有效,并且可以使用 rPython 编译器编译为本机。
http://mozakai.blogspot.com/2010/07/experiments-with-static-javascript-as.html
如果 .exe 文件真的很重要,我会将 V8 与您的应用程序捆绑在一起,因为即使您可以将 js 编译为本机,如果您使用任何 eval() 或类似文件,您仍然需要一个完整的解释器。只要您的用户不介意 8MB exe 或 8MB V8.dll 文件,编写将所有内容捆绑到 .exe 文件中的工具并不难。
最后,Big G 已经开始允许基于 chrome 的“原生”应用(谷歌:“chrome packaged apps”)。它们具有低级别的系统访问权限,可以使用 WebKit 渲染器,允许您在 CSS 和 HTML 中创建 GUI,并且它们有自己的窗口和图标,因此它们在 chrome 中运行并不明显。这可能还为时过早,但在桌面应用程序领域值得关注。
【讨论】: