静态分析与静态类型

tld*_*ldr 5 erlang reduce elixir dialyzer

我正在学习Elixir,工具'dialyzer'允许你进行静态分析 - 用它预期的参数的类型规范和它返回的输出来注释函数定义.它是完全可选的,但是如果要尽可能地使用它,它如何与良好的静态打字相匹配?

sas*_*ric 7

我的印象是透析器不像静态类型那么精确,这意味着它有时不会报告错误,尽管它应该.

从好的方面来说,如果透析器抱怨,那几乎总是我的错.通常,错误通常是由于不正确的类型规范造成的.

因此,虽然我不认为透析器是静态类型的好工具,但它仍然有帮助.特别是,我发现typespecs非常有用,因为它们可以作为文档.最近我换了工作,我加入的项目是一个复杂的Erlang项目.由于类型规范,我很容易找到代码库的方法.

所以我的建议是在大型项目中使用typespecs.我们只为导出(公共)函数和记录编写它们,这是一个很大的帮助,不占用太多时间.我通常首先使代码工作,当我对它感到满意时,添加规格,并运行透析器以验证一切正常.


Ono*_*cci 1

一方面,静态类型内置于编译阶段——有点不容错过。另一方面,静态分析是开发人员必须自愿运行的。

同样,人们不必在 Elixir 中注释任何内容;这完全取决于程序员的判断力。在静态类型语言中这是无法避免的。

我想说你的问题有点宽泛,因此很难严格回答。您可能想将其放在 Programmers.Stackechange 上。