5

我正在学习 Elixir,工具“透析器”可让您进行静态分析 - 使用它期望的参数的类型规范和它返回的输出来注释函数定义。它是完全可选的,但如果要尽可能地使用它,它如何匹配好的 'ol 静态类型?

4

3 回答 3

7

我的印象是,dialyzer 不如静态类型准确,这意味着它有时不会报告错误,尽管它应该。

从好的方面来说,如果透析器出现问题,那几乎都是我的错。通常,错误通常是由于不正确的 typespec 造成的。

所以,虽然我不认为 dialyzer 是像静态类型那样好的工具,但它仍然有帮助。特别是,我发现 typespecs 非常有用,因为它们可以用作文档。最近换了工作,加入的项目是一个复杂的Erlang项目。由于 typespecs,我很容易在代码库中找到自己的方式。

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

于 2014-05-10T07:07:40.973 回答
2

虽然静态类型可以处理一整类错误,但像透析器这样的静态分析工具可以告诉您更多关于代码中潜在缺陷的信息。假设您最大限度地使用规范,dialyzer 可能比静态类型本身更有用,至少与 Go、C# 等语言相比。像 Haskell 这样具有更强大类型系统的东西仍然可以从中受益静态分析,但不如 Go 这样具有更幼稚类型系统的语言。静态分析在与静态类型系统结合时最有用,而且由于 Erlang 和 Elixir 都是动态语言,静态分析只能做这么多。也就是说,透析器非常强大和有用,如果持续使用,应该提供至少相同级别的保护,如果不是更多的话,

我会看一下透析器文档(http://www.erlang.org/doc/man/dialyzer.html),他们可以告诉您更多关于您可以从该工具中对 Erlang 和 Elixir 的期望. 希望这会有所帮助!

于 2014-05-10T06:38:13.150 回答
1

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

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

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

于 2014-05-09T11:54:11.663 回答