有最近的 Lua 到 JavaScript 转换器或解释器吗?

我需要找到一个好的将 Lua 转换为 JavaScript 的工具;luaforge.org 上的 lua2js 已经过时(大约三年了,看起来在 Lua 5.1 上不起作用),而且我在 Google 上还没有找到其他工具。

有人有其他工具的经验吗?它应该可以在 Lua 5.1 上运行,并且最好是基于 .NET 的,但 .NET 不是必需的。一个 JavaScript 的 Lua 解释器也可以。

原文链接 https://stackoverflow.com/questions/176235

点赞
stackoverflow用户11649
stackoverflow用户11649

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

不幸的是,两者之间有很多重要的不同之处,这些差异并不那么明显。要使其工作,需要一个针对 JS 的完整编译器,而不是 Lua 的字节码,或者在 JavaScript 中重写 Lua VM。

我不知道 Lua2js 的原始目标是什么,但如果它只是一个有限的“翻译器”,那么编写预期要翻译的 Lua 代码将会剥夺大多数(或全部)有关 Lua 的好东西。例如,我认为你不能使用一个函数作为表键,因为在 JavaScript 中,键只能是字符串(和数字?我不确定)。

选择 .NET 更为合理,可以通过更改现有编译器来发出 CLR 字节码,而不是标准的 Lua 字节码来实现。即使 CLR 被设计和优化用于其他类型的语言,但它绝对足够通用,可以运行非常良好。主要障碍将会是库的可用性。

我刚刚发现的另一个选择是 这篇论文,作者是 Roberto Ierusalmschy 和 Fabio Mascarenhas,他们探讨了将 LuaVM 字节码转换为 CLR 字节码。

像学术论文一样,没有提供写作日期的指示,因此我不知道它是新的革命性的还是旧的被忘记的。

2008-10-08 15:04:58
stackoverflow用户62643
stackoverflow用户62643

将下面翻译成中文并且保留原本的 markdown 格式,

翻译:

将代码翻译成 JavaScript 很有趣,可以在浏览器端做 JavaScript 替代。在浏览器上,我们可以稍稍提升类型安全。选择 JavaScript 作为平台是选择最普及的平台之一,这就是地球上的浏览器。GWT 可以把 Java 转成 JavaScript,但我不确定是否要将 GWT 引入应用程序中的一些页面。我需要考虑一下。对于作为表中键的函数,需要进行一些魔术操作。也许只需在编译时为每个函数分配一个唯一的名称,并使用该名称作为键。您还可以为所有键添加前缀以进行类型检查,这是一个不错的开端。

2009-02-04 21:53:11
stackoverflow用户14455
stackoverflow用户14455

一种处理这个问题的方式可能是使用LuaSub并生成JavaScript而不是Lua输出。这可以做到,只需适量的努力(目前LuaSub不支持此功能)。

在编译时可以发现JS无法弯曲到Lua的要求的地方,并导致错误。

我将来会经常使用JS+SVG,如果JS方面出现问题,这可能是一个值得尝试的方法。如果其他人想尝试,请随意尝试。LuaSub的源代码在那里供您使用。

最初,LuaSub是作为Lua 5.1的语法扩展器而开发的,旨在引入易用性概念(如增量,类型检查),而不会破坏与标准Lua的兼容性或需要修补它。这也与MetaLua类似(它似乎已经变得更加普遍)。

2009-10-21 04:18:04
stackoverflow用户373710
stackoverflow用户373710

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

2011-04-26 10:14:39
stackoverflow用户383476
stackoverflow用户383476

我已经写了一个部分完成的从Lua到ECMAScript静态编译器。

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

由于这个项目缺少许多关键功能,而且我也不着急完成它,所以它可能不能满足你的需求,因为这是一个死胡同。详细信息请阅读README。

尽管互联网上出现了一些关注点,但只有少数Lua特定功能(如*fenv函数或大多数调试库)Javascript确实无法支持。其他功能,如文件库,则受VM可访问的功能限制。

我个人也尝试过Lua + Emscripten选项,虽然它令人印象深刻,但速度也非常慢。

2011-11-05 19:48:04
stackoverflow用户1042086
stackoverflow用户1042086

ljs 有一个在 JavaScript 中工作的 Lua VM 的演示。源代码甚至可以在浏览器中编译,使用由 Lua 编写的 Lua 解释器。

https://github.com/humbletim/ljs

2011-11-11 16:46:14
stackoverflow用户51101
stackoverflow用户51101

一个新的挑战者出现了:Lua.js

https://github.com/mherkender/lua.js

想要观看一些令人惊叹的演示的话,请点击此链接:https://github.com/ghoulsblade/love-webplayer

Lua.js的工作原理是将Lua代码直接转换为ECMAscript(包括JavaScript、ActionScript),这使其比试图在JavaScript中实现Lua虚拟机的解决方案具有重要的速度优势。

2011-12-29 22:21:04
stackoverflow用户439557
stackoverflow用户439557

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

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

2012-03-07 16:50:30
stackoverflow用户3526533
stackoverflow用户3526533

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

网站菜单中有演示和基准测试。

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

它比lua.vm.js更快。(由于metatable的实现)不是那么快,但我一直在优化它。

2014-11-07 18:45:17