【发布时间】:2014-01-17 20:20:09
【问题描述】:
我慢慢爱上了 Erlang,只有一个大问题。
我是 Standart ML 和 ocaml 等语言的忠实粉丝,它们具有强大的静态类型检查功能。
在 erlang 中引入某种静态类型检查是否有一种简洁明了的方法。我正在查看 -type 和 -spec 注释。
有人有好的解决方案吗?
【问题讨论】:
标签: programming-languages erlang typechecking
我慢慢爱上了 Erlang,只有一个大问题。
我是 Standart ML 和 ocaml 等语言的忠实粉丝,它们具有强大的静态类型检查功能。
在 erlang 中引入某种静态类型检查是否有一种简洁明了的方法。我正在查看 -type 和 -spec 注释。
有人有好的解决方案吗?
【问题讨论】:
标签: programming-languages erlang typechecking
我去过!我喜欢 OCaml 和 Erlang,并且经常使用它们。
当我开始使用 Erlang 时,我已经拥有多年的 OCaml 经验。我花了几个星期来适应编译器中没有静态类型检查器的事实。但在那之后,疼痛就完全消失了。
在一定程度上,不使用类型检查器是一项值得的练习。对我来说,这是一次启发性的经历,真的让我成为了一个更好的程序员。
但是,有一个用于 Erlang 的外部静态类型检查器,称为 Dializer。我觉得它非常有用。它的问题是您需要单独调用它并且它是慢。偶尔运行一次(例如在提交代码之前或作为自动构建的一部分)效果很好。我从来没有尝试在每次编译后运行它,因为等到它完成会让人分心。
【讨论】:
检查Dialyzer 工具
Dialyzer 是一个静态分析工具,用于识别软件差异,例如明确的类型错误、由于某些编程错误、不必要的测试等导致单个 Erlang 模块或整个(组)应用程序。
【讨论】:
多年来,有一些尝试在其上构建类型系统 Erlang 的顶部。 1997 年发生了一次这样的尝试,由 Simon Marlow,Glasgow Haskell 的主要开发人员之一 编译器,以及参与 Haskell 设计的 Philip Wadler 为单子背后的理论做出了贡献(阅读关于所述类型的论文 系统)。乔·阿姆斯特朗(Joe Armstrong)后来对这篇论文发表了评论:
有一天,Phil 打电话给我,说 a) Erlang 需要一个类型系统,b) 他写了一个类型系统的小原型,c) 他 有一年的假期,打算为 Erlang 和“我们有兴趣吗?”回答——“是的。”
Phil Wadler 和 Simon Marlow 在一个类型系统上工作了一年多,结果是 发表于[20]。该项目的结果有点 令人失望。首先,只有语言的一个子集是 类型可检查,主要遗漏是缺少流程类型和 类型检查进程间消息。
【讨论】:
我主要将-spec 和-type 用于文档目的:您使用-spec 编写规范,然后使用TypEr 检查它,然后(在以edoc 格式添加一些附加信息后)生成文档
【讨论】: