【问题标题】:Are there any recent Lua to JavaScript converters or interpreters somewhere? [closed]最近有没有 Lua 到 JavaScript 的转换器或解释器? [关闭]
【发布时间】:2010-09-15 15:06:46
【问题描述】:

我需要找到一个好的 Lua 到 JavaScript 转换器; luaforge.org 上的 lua2js 已经过时(大约 3 年了,看起来它在 Lua 5.1 上不起作用),我还没有在 Google 上找到任何东西。

有没有人有任何其他转换器的经验?它应该在 Lua 5.1 上工作,最好是基于 .NET,但 .NET 不是必需的。 javascript lua 解释器也可以工作。

【问题讨论】:

    标签: javascript lua interpreter converter


    【解决方案1】:

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

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

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

    【讨论】:

    • @Akavel 尝试编辑此答案以添加一些信息。编辑未通过审批流程,但我认为它仍然有用。我引用:“对于证明其成熟度的一些很棒的演示,请参阅:github.com/ghoulsblade/love-webplayerLua.js 通过将 Lua 代码直接转换为 ECMAscript(包括 JavaScript、ActionScript)来工作,这使其与尝试实现 Lua 的解决方案相比具有重要的速度优势JavaScript 中的虚拟机。”
    • 我想你可能忘记了这个,所以我希望你回来更新这个
    • @Breton 我这里的所有演示都是蓝色背景? ghoulsblade.schattenkind.net/love-webplayer
    【解决方案2】:

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

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

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

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

    我刚刚发现的另一个选项是 this paper,作者是 Roberto Ierusalmschy 和 Fabio Mascarenhas,他们在其中探索将 LuaVM 字节码转换为 CLR 字节码。

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

    【讨论】:

    • 不知道人们真正的目标是什么?他们了解 Lua,并且想编写 JavaScript 而无需学习 JavaScript?他们有一个用 Lua 编写的大型应用程序,并希望将其移植为一个工作量最少的 web 应用程序?在我看来,这些都不太可能
    • computerworld.com.au/index.php/id;1028768484 的采访听起来像是 Lua.NET 是一个最近且正在进行的项目。
    • 您好,您可以使用函数作为 javascript 中的表键。您的意见似乎并不知情。
    • 我刚刚在 Firefox 3.6.6 和 Rhino 1.7r2 上都试过了。我用作键的任何非字符串值(函数、对象、布尔值、偶数)都被接受,并且似乎有效,直到我执行for (k in t) {console.log(k,typeof(k));} 它都是字符串。在大多数情况下,这并不重要,只要它是一致的;但是在 Lua 中它是不同的(除了nil 之外的任何值都可以作为键),并且很多代码确实依赖于此。如果你想要一个 Lua->JS '翻译器',你必须考虑这些事情,否则它将只是带有 Lua 语法的 JS。
    • 更准确地说,在 Javascript 中,值在用作键之前会转换为它们的字符串表示形式。这可能会导致问题,因为它很容易使事情发生冲突:例如,数字 1 和字符串“1”都具有相同的字符串表示形式,并且默认情况下,所有对象都序列化为相同的“[object Object]”字符串。 JS 表和 Lua 表之间的另一个区别是,虽然在读取未使用的键时都给出 undefined/nil,但在 Javascript 中将键设置为 undefined 不会将其从对象中删除(它仍然是可迭代的并且 hasOwnProperty 将返回 true)。跨度>
    【解决方案3】:

    Emscripten 包含转换为 JavaScript 的 Lua 解释器。你可以try it in your browser。但是大小为 1.5MB。

    【讨论】:

      【解决方案4】:

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

      https://github.com/humbletim/ljs

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

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

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

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

          它比 lua.vm.js 更快。 (因为 metatable 实现,没那么快),我一直在优化它。

          【讨论】:

          • luajs.org 的链接不再有效。
          • 在没有通知的情况下无法访问网站。对我来说似乎很可疑。
          【解决方案7】:

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

          【讨论】:

            【解决方案8】:

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

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

            我以后会做很多 JS+SVG 的事情,如果 JS 方面变得头疼,这可能是一个尝试。如果其他人想去,请这样做。 LuaSub 源代码为您提供。

            最初,LuaSub 是作为 Lua 5.1 的语法扩展器而设计的,以引入易于使用的概念(s.a. 增量、类型检查),而不需要与标准 Lua 的兼容性或需要对其进行修补。它类似于 MetaLua 在这个(似乎已经变得越来越普遍)。

            【讨论】:

              【解决方案9】:

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

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

              它可能无法满足您的需求,因为该项目缺少许多关键功能,我不急于完成它,因为它是一个死胡同。阅读自述文件了解更多详情。

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

              我也亲自尝试过 Lua + Emscripten 选项,虽然效果不错,但速度也很慢。

              【讨论】:

                猜你喜欢
                • 2012-05-27
                • 2014-08-05
                • 2011-09-30
                • 2017-04-05
                • 1970-01-01
                • 2010-10-09
                • 1970-01-01
                • 2017-08-04
                • 2021-09-07
                相关资源
                最近更新 更多