首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态分析与静态类型

静态分析与静态类型
EN

Stack Overflow用户
提问于 2014-05-09 14:03:06
回答 3查看 1.8K关注 0票数 5

我正在学习Elixir,工具'dialyzer‘可以让你做静态分析--用函数定义的类型规范来注释它所期望的参数和它返回的输出。它完全是可选的,但是如果它被充分使用,它如何与好的静态类型相匹配呢?

EN

回答 3

Stack Overflow用户

发布于 2014-05-10 15:07:41

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

从好的方面来说,如果透析者抱怨,那几乎总是我的错。通常情况下,错误通常是由于不正确的类型due造成的。

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

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

票数 7
EN

Stack Overflow用户

发布于 2014-05-10 14:38:13

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

我会看一看dialyzer文档(http://www.erlang.org/doc/man/dialyzer.html),它们可以告诉你更多关于Erlang和Elixir的工具的信息。希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2014-05-09 19:54:12

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

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

我想说你的问题有点宽泛,因此很难严谨地回答。你可能想把这个放到Programmers.Stackechange上。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23557620

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档