我正在寻找一个在编译时进行类型检查的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是第一个看的工具.
PS请永远不要把Lua写成全部大写!