2008-10-06 41 views
30

我需要找到一个很好的Lua to JavaScript转换器; luaforge.org上的lua2js已过时(3岁左右,看起来不适用于Lua 5.1),我还没有在Google上找到任何东西。有没有最近的Lua to JavaScript转换器或解释器?

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

回答

8

这是一个关于Lua列表的经常性问题,我猜是因为两种语言的肤浅相似性。

不幸的是,有很多重要的差异并不那么明显。让它工作需要一个成熟的编译器来定位JS而不是Lua的字节码,或者用JavaScript重写Lua VM。

我不知道Lua2js的原始目标;但如果它仅仅是一个有限的“翻译者”,那么编写想要翻译的Lua代码将会拒绝大多数(全部)关于Lua的好事。例如,我不认为你可以使用函数作为表键,因为在JavaScript中,键只是字符串(和数字?我不确定)。

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

我刚刚发现的另一种选择是由Roberto Ierusalmschy和Fabio Mascarenhas提供的this paper,他们在那里探索将LuaVM字节码转换为CLR字节码。

与往常一样,在学术论文中,没有关于写作日期的说明,所以我不知道它是新的革命性的还是旧的和遗忘的。

+0

我想知道人们的真正目标是什么?他们知道Lua,并且想要编写JavaScript而不必学习JavaScript?他们有一个用Lua编写的大型应用程序,并希望以最少的工作将其移植为一个Web应用程序?这些对我来说似乎都不是那么可能 – davr 2008-10-08 16:15:29

+0

http://www.computerworld.com.au/index.php/id;1028768484的采访使得听起来像Lua.NET是一个近期和正在进行的项目。 – 2008-10-09 19:22:33

+0

问候,人们可以使用一个函数作为javascript中的表键。您的意见似乎并不知情。 – tomdemuyt 2010-07-06 15:43:41

0

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

0

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

在编译时可以发现JS不能屈服于Lua需求的地方,并且会导致错误。

我将在未来做很多JS + SVG,如果JS方面头疼,这可能是一个尝试的事情。如果其他人想要去一趟,请这样做。 LuaSub的来源在你身边。最初,LuaSub被制作为Lua 5.1的语法扩展器,引入易于使用的概念(s.a.增量,类型检查),没有与标准Lua的制动兼容或需要修补它。这与MetaLua类似(这看起来已经变得更加普遍)。

0

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

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

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

尽管我在互联网上看到了一些担忧,但只有少数Lua特有的功能(如* fenv函数或大多数调试库),Javascript并不真正支持这些功能。其他人,如文件库,受到VM有权访问的功能的限制。

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

4

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

https://github.com/humbletim/ljs

2

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

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

2

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

有网站菜单上的演示和基准。

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

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