Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Compiler construction 静态型Lua_Compiler Construction_Lua_Static Typing - Fatal编程技术网

Compiler construction 静态型Lua

Compiler construction 静态型Lua,compiler-construction,lua,static-typing,Compiler Construction,Lua,Static Typing,我正在寻找一个在编译时进行类型检查,但输出标准LUA5.1字节代码(只有运行时类型)的Lua前端编译器。我想要的是相当数量的静态编译时语法分析和可选类型,以便比运行时更快地检测到微小错误。生成的字节码必须与使用标准LoadString()编译的现有Lua字节码配合使用 需要明确的是,任何差异只会在字节编译时发生。在运行时,字节码不知道在编译阶段发生了什么不同/不寻常的事情 我的想法听起来很像动作脚本;我甚至不介意一个输出Lua字节码的ActionScript编译器 有人听说过这样的努力吗?我见过

我正在寻找一个在编译时进行类型检查,但输出标准LUA5.1字节代码(只有运行时类型)的Lua前端编译器。我想要的是相当数量的静态编译时语法分析和可选类型,以便比运行时更快地检测到微小错误。生成的字节码必须与使用标准LoadString()编译的现有Lua字节码配合使用

需要明确的是,任何差异只会在字节编译时发生。在运行时,字节码不知道在编译阶段发生了什么不同/不寻常的事情

我的想法听起来很像动作脚本;我甚至不介意一个输出Lua字节码的ActionScript编译器


有人听说过这样的努力吗?我见过一些关于使用MetaLua来实现这一点的参考资料,但老实说,我还没有足够的头脑来理解他们的文档

没有这样的东西。也许可以扩展MetaLua来实现这一点,但还没有人这么做,而且目前还没有这样做的计划。Lua是一种动态语言,如果您想要一种静态类型的语言,请使用它


实际上,您需要的是类似Java或C的东西。在这种情况下,您可以使用一个类似于将现有Lua代码与C#集成的项目。Java也是如此。

在2005年夏天左右,我与一位工程师一起研究为Lua进行编译时类型推断的问题,可能有注释辅助。这个问题变得异常困难!(我的学生写了一个简短的技术说明,但它并不是真正用于一般流通。)

如果我想解决您提出的问题,它有两个约束,一个是允许重要的静态类型检查,另一个是与标准字节码编译的Lua代码互操作, 我将从头设计一种新的语言来满足这两个约束。这将是一个相当大的工作量,但比尝试将一个类型系统改装为Lua要容易得多。

请参见

不过,这看起来像是一个运行时解决方案

不管怎样,请随时提出您的问题。如果您想扩展Lua语法,Metalua是第一个要查看的工具

请注意

在Dyla'14上刚刚发表了一篇来自PUC Rio的新论文“类型Lua:Lua的可选类型系统”

它是关于“类型化Lua的初始设计,Lua脚本语言的可选类型扩展”。它仍在进行中,类型系统仍然相对简单。未提供类型推断/类型检查工具


关于基于metalua的类型系统,Tidad Lock:Fabien为Lua提供的可选静态类型检查和推断

这个问题已经问了六年了。。。但这里有一个新的答案:

与C一样,Terra是一种简单的静态类型编译语言,具有 手动内存管理。但与C不同,它是从 开始与Lua进行互操作。Terra功能是一流的 使用terra关键字创建的Lua值。当需要的时候,他们是 JIT编译为机器代码

还有拉维

Ravi编程语言是Lua5.3的衍生物,具有有限的可选静态类型和基于LLVM和libgccjit的JIT编译器

我非常喜欢在Terra编程(见上文)

我推荐

这是一个Intellij/VSCode插件,支持键入文档。我发现整体的记录方法非常友好。同样感谢它的IDE支持,EmmyLua也支持暗示

以下是EmmyLua doc的一个小片段:

--@alias recipe\u原型任意
---@alias recipe\u名称字符串
---@alias\u名称字符串
---@类坐标
---@字段x编号
---@字段y编号
---@class实体
---@field entity_number实体的唯一标识符
---@字段名称字符串实体名称
---@场位置坐标
---@field direction any.direction.east/south/west/north
---@class蓝图部分
---@field entities实体[]
---@field inlets number[]实体列表中入口的索引
---@field outlets number[]实体列表中的门店索引
---@type蓝图部分
BlueprintSection={}
---@返回蓝图部分
函数BlueprintSection.new()
--- ...
结束
---@param其他蓝图部分
---@param xoff number可选,另一部分的x偏移,默认为self的宽度
---@param yoff number可选,其他部分的y偏移,默认为0
---@return蓝图部分新自我
功能蓝图部分:concat(其他、xoff、yoff)
-- ...
结束

有关更多文档参考,请检查

我不是在找LUA.NET。LUA.NET意味着某种.NET运行时。NET运行时与LUA字节码VM完全不同。我所寻找的只是在字节编译时应用强类型,然后运行生成的代码,而不知道在编译时它发生了什么异常情况。不幸的是,我已经在使用大量(并且不断增长)的LUA代码库。由于LUA的特性,更改任何现有的库代码几乎是不可能的。可选的强输入前端可以解决这个问题,而不必改变语言的基本感觉。@Armentage,Lua不是首字母缩略词,它是一个专有名词。它写的是“Lua”,而不是“Lua”。官方故事请参见。@Armentage:如果你想在秋季继续学习,我可能会找到一个感兴趣的学生。我们公司的一名实习生在夏季建造了类似的东西。结果很有趣。。。他的导师实际上让他在Haskell建造了他的类型安全lua预处理器……我听到你在说什么;我已经对此做了很多思考,虽然它似乎非常简单地涵盖了最基本的情况(即捕捉本地x:int=“hello”作为错误),但当您开始担心表或从函数返回类型化元组时,事情变得非常困难。但是Adobe的那些人
-{ 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