有最近的 Lua 到 JavaScript 转换器或解释器吗?
我需要找到一个好的将 Lua 转换为 JavaScript 的工具;luaforge.org 上的 lua2js 已经过时(大约三年了,看起来在 Lua 5.1 上不起作用),而且我在 Google 上还没有找到其他工具。
有人有其他工具的经验吗?它应该可以在 Lua 5.1 上运行,并且最好是基于 .NET 的,但 .NET 不是必需的。一个 JavaScript 的 Lua 解释器也可以。
原文链接 https://stackoverflow.com/questions/176235
将下面翻译成中文并且保留原本的 markdown 格式,
翻译:
将代码翻译成 JavaScript 很有趣,可以在浏览器端做 JavaScript 替代。在浏览器上,我们可以稍稍提升类型安全。选择 JavaScript 作为平台是选择最普及的平台之一,这就是地球上的浏览器。GWT 可以把 Java 转成 JavaScript,但我不确定是否要将 GWT 引入应用程序中的一些页面。我需要考虑一下。对于作为表中键的函数,需要进行一些魔术操作。也许只需在编译时为每个函数分配一个唯一的名称,并使用该名称作为键。您还可以为所有键添加前缀以进行类型检查,这是一个不错的开端。
一种处理这个问题的方式可能是使用LuaSub并生成JavaScript而不是Lua输出。这可以做到,只需适量的努力(目前LuaSub不支持此功能)。
在编译时可以发现JS无法弯曲到Lua的要求的地方,并导致错误。
我将来会经常使用JS+SVG,如果JS方面出现问题,这可能是一个值得尝试的方法。如果其他人想尝试,请随意尝试。LuaSub的源代码在那里供您使用。
最初,LuaSub是作为Lua 5.1的语法扩展器而开发的,旨在引入易用性概念(如增量,类型检查),而不会破坏与标准Lua的兼容性或需要修补它。这也与MetaLua类似(它似乎已经变得更加普遍)。
Emscripten 包含了转换为 JavaScript 的 Lua 解释器。你可以在浏览器中尝试。但是它的大小为1.5MB。
我已经写了一个部分完成的从Lua到ECMAScript静态编译器。
https://github.com/mherkender/lua2js-experiment
由于这个项目缺少许多关键功能,而且我也不着急完成它,所以它可能不能满足你的需求,因为这是一个死胡同。详细信息请阅读README。
尽管互联网上出现了一些关注点,但只有少数Lua特定功能(如*fenv函数或大多数调试库)Javascript确实无法支持。其他功能,如文件库,则受VM可访问的功能限制。
我个人也尝试过Lua + Emscripten选项,虽然它令人印象深刻,但速度也非常慢。
ljs 有一个在 JavaScript 中工作的 Lua VM 的演示。源代码甚至可以在浏览器中编译,使用由 Lua 编写的 Lua 解释器。
一个新的挑战者出现了:Lua.js
https://github.com/mherkender/lua.js
想要观看一些令人惊叹的演示的话,请点击此链接:https://github.com/ghoulsblade/love-webplayer
Lua.js的工作原理是将Lua代码直接转换为ECMAscript(包括JavaScript、ActionScript),这使其比试图在JavaScript中实现Lua虚拟机的解决方案具有重要的速度优势。
我一直在使用这个实现 https://github.com/mherkender/lua.js ,这个实现在之前的一个回答中也提到过。它可以进行离线和加载时解析,我发现它非常易于使用。
我的 Lua 脚本是通过 C 函数调用的,将这些 C 代码转换为 Javascript 并将其与 lua.js 进行连接非常简单。
访问http://luajs.org来查看我的工作。
网站菜单中有演示和基准测试。
它在压缩前仅有35.5K,在压缩后仅有12.2K。它可以直接访问Javascript对象/数组。它几乎每天都会更新。
它比lua.vm.js更快。(由于metatable的实现)不是那么快,但我一直在优化它。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
- 如何在Lua中将变量从Lua推送到C ++
这是 Lua 列表上一个经常出现的问题,我猜是因为这两种语言的表面相似。
不幸的是,两者之间有很多重要的不同之处,这些差异并不那么明显。要使其工作,需要一个针对 JS 的完整编译器,而不是 Lua 的字节码,或者在 JavaScript 中重写 Lua VM。
我不知道 Lua2js 的原始目标是什么,但如果它只是一个有限的“翻译器”,那么编写预期要翻译的 Lua 代码将会剥夺大多数(或全部)有关 Lua 的好东西。例如,我认为你不能使用一个函数作为表键,因为在 JavaScript 中,键只能是字符串(和数字?我不确定)。
选择 .NET 更为合理,可以通过更改现有编译器来发出 CLR 字节码,而不是标准的 Lua 字节码来实现。即使 CLR 被设计和优化用于其他类型的语言,但它绝对足够通用,可以运行非常良好。主要障碍将会是库的可用性。
我刚刚发现的另一个选择是 这篇论文,作者是 Roberto Ierusalmschy 和 Fabio Mascarenhas,他们探讨了将 LuaVM 字节码转换为 CLR 字节码。
像学术论文一样,没有提供写作日期的指示,因此我不知道它是新的革命性的还是旧的被忘记的。