-
03-07-2019 - |
题
我正在寻找一个在编译时进行类型检查的Lua前端编译器,但输出标准的Lua 5.1字节代码(只有运行时类型)。我想要的是一定量的静态,编译时语法分析和可选类型,以便比运行时更快地检测到琐碎的错误。生成的字节代码必须与使用标准LoadString()编译的现有Lua字节代码很好地配合。
要清楚 - 任何差异只会发生在字节编译时。在运行时,字节代码不知道在编译阶段发生了任何不同/异常的事情。
我的想法听起来很像ActionScript;我甚至不介意输出Lua字节代码的ActionScript编译器!
有没有人听说过这样的努力?我已经看到了一些使用MetaLua来做到这一点的引用,但老实说,我不够聪明,不能让他们的文档尾巴
解决方案
在2005年夏天或者附近,我和非常聪明的本科学生一起工作了Lua的编译时类型推断,可能由注释辅助。这个问题难以置信! (我的学生写了一篇简短的技术说明,但它并不是真正用于一般发行。)
如果我想解决你提出的问题,那么它有允许重要的静态类型检查并且它与标准字节码编译的Lua代码互操作 , 我会从头设计一种新语言来满足这两个约束。这将是一项大量工作,但比尝试将类型系统改造为Lua要容易得多。
其他提示
请参阅此Metalua博客文章。
-{ extension "types" }
function sum (x :: list(number)) :: number
local acc :: number = 0
for i=1, #x do acc=acc+x[i] end
return acc
end
这看起来像是一个运行时解决方案。
无论如何,请随时在 Metalua邮件列表中提出您的问题。如果你想扩展Lua语法,Metalua是第一个看的工具。
P.S。请永远不要将Lua写为全部大写!
这个问题已有六年了......但这是一个新答案: http://terralang.org/
与C一样,Terra是一种简单的,静态类型的编译语言 手动内存管理。但与C不同的是,它的设计来自于 开始与Lua互操作。 Terra功能是一流的 使用terra关键字创建的Lua值。如果需要他们是 JIT编译为机器代码。
有一篇新论文“Type Lua:Lua的可选类型系统”来自PUC-Rio刚刚在Dyla'14上发表。 http://dl.acm.org/citation.cfm?id=2617553
它是关于“Type Lua的初始设计,Lua脚本语言的可选类型扩展”。它仍在进行中,类型系统仍然相对简单。没有提供类型推断/类型检查工具。
关于基于metalua的打字系统,Tidal Lock:可选的静态类型检查和来自Fabien的Lua推理。 http://lua-users.org/lists/lua-l /2013-02/msg00403.html 。
还有拉维 https://github.com/dibyendumajumdar/ravi
Ravi编程语言是Lua 5.3的衍生产品,具有有限的可选静态类型和基于LLVM和libgccjit的JIT编译器
我非常喜欢Terra的编程(见上文)