Compiler construction Erlang型系统

Compiler construction Erlang型系统,compiler-construction,erlang,type-systems,Compiler Construction,Erlang,Type Systems,我一直在网上搜寻Erlang程序的各种类型的实践,似乎有一些。。。虽然要找到可靠的信息来源有些困难 也就是说,我正在寻找有关以下方面的实用信息: 1.-规格-这件看起来很吸引人。有几个地方提到,在编译时会检查与之关联的-specs指令的函数(以获得正确的类型用法)。。。我似乎找不到更多关于如何使用它的信息(使用哪种工具-透析器,打字机?)。我真的很想创建一个小的解析器/代码生成器,从表单的函数声明中生成这些“规范” functionName(param1 :List, param2 :Tuple

我一直在网上搜寻Erlang程序的各种类型的实践,似乎有一些。。。虽然要找到可靠的信息来源有些困难 也就是说,我正在寻找有关以下方面的实用信息:

1.
-规格
-这件看起来很吸引人。有几个地方提到,在编译时会检查与之关联的-specs指令的函数(以获得正确的类型用法)。。。我似乎找不到更多关于如何使用它的信息(使用哪种工具-透析器,打字机?)。我真的很想创建一个小的解析器/代码生成器,从表单的函数声明中生成这些“规范”

functionName(param1 :List, param2 :Tuple) -> ...
我还没有看到
-spec
是否支持抽象类型(用户声明的类型-“Car”类型-

2.
-deftype
指令


如果我可以开始键入内容并在编译时检查它们,Erlang对我来说将变得更加强大。我上面提到的解析器/代码生成器的运行时将在输出源代码中生成保护类型检查。

有关类型和规范属性的更多信息,请参见:

透析器可用于检查它们(请参见
透析器--help


Typer可以用来生成它们(请参见
Typer--help
)。

Erlang没有完成编译时类型检查。请使用执行编译后类型检查的透析器

创建“用户定义类型”的方法是按照您的建议使用标记元组。透析器将检查代码路径,以确定可能最终创建失败的函数返回的路径

为了使透析器工作得最好,你必须接受“如果失败就让它失败”,只写与预期结果相匹配的子句——避免总是匹配的“else”结构和其他一些最佳实践

您应该使用edoc记录您的功能。透析器使用文档系统的类型规范为您推断类型。可以找到edoc手册。

查看 (非常清晰的解释)这里的参考:

惊人!!很多信息、细节,非常感谢链接!edoc不是因为代码键入而被贬低为-spec吗?我想我在某个地方看到过它,认为它是记着R13的注释,如果我错了请纠正我\n谢谢你的权利-我从EUC'08中找到了Kostas Sagonas的论文,这是他推荐的。不幸的是,我错过了EUC'08ear试图筹集资金:(
{car,{weight,_},{height,_},{maxSpeed,_}}