我正在寻找一个在编译时进行类型检查的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编译为机器代码。

没有这样的事情。有可能扩展MetaLua来做到这一点,但没有人做过,而AFAIK,没有计划这样做。 Lua是一种动态语言,如果你想要一种静态类型的语言,请使用它。

您基本上寻找的是Java或C#。在这种情况下,您可以使用 Lua.NET 等项目进行集成使用C#的现有Lua代码。 Java还有 Kahlua

有一篇新论文“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的编程(见上文)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top