32

I need to find a good Lua to JavaScript converter; lua2js on luaforge.org is out of date (3 or so years old and looks like it doesn't work on Lua 5.1) and I haven't yet found anything on Google.

Does anyone have any experience with any other converters out there? It should work on Lua 5.1 and preferably be .NET based, but .NET is not a requirement. A javascript lua interpreter would work as well.

4

9 回答 9

9

新挑战者出现:Lua.js https://github.com/mherkender/lua.js

有关证明其成熟度的一些很棒的演示,请参阅https://github.com/ghoulsblade/love-webplayer

Lua.js 通过将 Lua 代码直接转换为 ECMAscript(包括 JavaScript、ActionScript)来工作,这使其与尝试在 JavaScript 中实现 Lua VM 的解决方案相比具有重要的速度优势。

于 2011-12-29T22:21:04.433 回答
8

这是 Lua 列表中经常出现的问题,我猜是因为这两种语言表面上的相似性。

不幸的是,有许多重要的区别并不那么明显。让它工作需要一个成熟的编译器,针对 JS 而不是 Lua 的字节码,或者用 JavaScript 重写 Lua VM。

我不知道 Lua2js 的最初目标;但如果它只是一个有限的“翻译器”,那么编写旨在翻译的 Lua 代码将否定 Lua 的大部分(全部?)优点。例如,我认为您不能将函数用作表键,因为在 JavaScript 中键只是字符串(和数字?我不确定)。

.NET 的选择更合理,可以通过更改现有编译器来发出 CLR 字节码而不是标准 Lua 字节码。即使 CLR 是针对其他类型的语言设计和优化的,它也绝对是通用的,可以很好地运行。主要障碍是图书馆的可用性。

我刚刚找到的另一个选择是Roberto Ierusalmschy 和 Fabio Mascarenhas的这篇论文,他们在其中探索将 LuaVM 字节码转换为 CLR 字节码。

与学术论文一样,没有注明撰写日期,所以我不知道它是新的和革命性的还是旧的和被遗忘的。

于 2008-10-08T15:04:58.450 回答
4

Emscripten包含转换为 JavaScript 的 Lua 解释器。您可以在浏览器中尝试。但是大小为1.5MB。

于 2011-04-26T10:14:39.673 回答
4

ljs 在 javascript 中有一个 lua vm 的工作演示。甚至可以使用 lua 编写的 lua 解释器在浏览器中编译源代码。

https://github.com/humbletim/ljs

于 2011-11-11T16:46:14.647 回答
2

我一直在使用上一个答案中提到的这个实现https://github.com/mherkender/lua.js 。它可以进行离线和加载时解析,我发现它非常易于使用。

我的 Lua 脚本通过 C 函数调用,将 C 代码转换为 Javascript 并将其与 lua.js 连接起来非常简单。

于 2012-03-07T16:50:30.250 回答
1

访问http://luajs.org查看我的工作。

站点菜单上有演示和基准。

压缩前只有35.5K,压缩后只有12.2K。它可以直接访问 Javascript 对象/数组。它几乎每天都在更新。

它比 lua.vm.js 更快。(由于元表实现,没那么快),我一直在优化它。

于 2014-11-07T18:45:17.830 回答
0

转换为 javascript 很有趣,可以在浏览器端替换 javascript。我们也可以在浏览器上采取一点类型安全措施。将 javascript 定位为平台是针对最普遍的平台之一,即地球上的浏览器。GWT 执行 java2js,但我不确定是否只想在应用程序的几个页面中引入 GWT。我得想想。对于您作为表格中的键的功能,必须有一些魔法要做。也许只是在编译时为每个函数分配一个唯一的名称并将其用作您的密钥。您还可以为所有键添加前缀以进行类型检查,这是一个不错的开始。

于 2009-02-04T21:53:11.397 回答
0

我已经为 ECMAscript 静态编译器编写了部分完整的 Lua。

https://github.com/mherkender/lua2js-experiment

它可能无法满足您的需求,因为该项目缺少许多关键功能,而且我不急于完成它,因为它是一个死胡同。阅读自述文件中的更多内容以获取详细信息。

尽管我在 Internet 上看到了一些问题,但只有少数 Lua 特定的功能(如 *fenv 函数或大多数调试库)是 Javascript 无法真正支持的。其他的,比如文件库,受到 VM 可以访问的功能的限制。

我还亲自尝试了 Lua + Emscripten 选项,虽然它令人印象深刻,但它也很慢。

于 2011-11-05T19:48:04.283 回答
0

一种方法是使用LuaSub并生成 JavaScript 而不是 Lua 输出。这可以通过合理的努力来完成(目前 LuaSub 不这样做)。

JS 不能满足 Lua 要求的地方可能会在编译时被发现,并导致错误。

以后我会做很多 JS+SVG 的事情,如果 JS 方面头疼的话,这可能是一件值得尝试的事情。如果其他人想去,请这样做。LuaSub 源代码就在那里。

最初,LuaSub 被设计为 Lua 5.1 的语法扩展器,以引入易于使用的概念(sa 增量、类型检查),而不需要与标准 Lua 的兼容性或需要对其进行修补。它在这方面类似于MetaLua(这似乎变得更加普遍)。

于 2009-10-21T04:18:04.050 回答