【问题标题】:Static typechecking in erlangerlang中的静态类型检查
【发布时间】:2014-01-17 20:20:09
【问题描述】:

我慢慢爱上了 Erlang,只有一个大问题。

我是 Standart ML 和 ocaml 等语言的忠实粉丝,它们具有强大的静态类型检查功能。

在 erlang 中引入某种静态类型检查是否有一种简洁明了的方法。我正在查看 -type 和 -spec 注释。

有人有好的解决方案吗?

【问题讨论】:

    标签: programming-languages erlang typechecking


    【解决方案1】:

    我去过!我喜欢 OCaml 和 Erlang,并且经常使用它们。

    当我开始使用 Erlang 时,我已经拥有多年的 OCaml 经验。我花了几个星期来适应编译器中没有静态类型检查器的事实。但在那之后,疼痛就完全消失了。

    在一定程度上,不使用类型检查器是一项值得的练习。对我来说,这是一次启发性的经历,真的让我成为了一个更好的程序员。

    但是,有一个用于 Erlang 的外部静态类型检查器,称为 Dializer。我觉得它非常有用。它的问题是您需要单独调用它并且它是慢。偶尔运行一次(例如在提交代码之前或作为自动构建的一部分)效果很好。我从来没有尝试在每次编译后运行它,因为等到它完成会让人分心。

    【讨论】:

    • 你能解释一下为什么不使用类型检查器很有启发性吗?您是否开始认为类型检查器在您的体验中毫无用处?
    • 在很多应用程序中类型检查器都非常有用。它们在像 OCaml 这样的语言中像魔法一样工作。对我来说,总是依赖它们的副作用是我的大脑部分没有关注程序的重要高级方面。它变成了一个盲点,我更愿意保持对我正在编写的程序的充分认识和关注。也就是说,我希望 Erlang 中有一个更好的可选类型检查器。在重构和协作方面无法击败类型检查器,因为不可能始终对所有代码保持相同的关注。
    【解决方案2】:

    检查Dialyzer 工具

    Dialyzer 是一个静态分析工具,用于识别软件差异,例如明确的类型错误、由于某些编程错误、不必要的测试等导致单个 Erlang 模块或整个(组)应用程序。

    【讨论】:

      【解决方案3】:

      多年来,有一些尝试在其上构建类型系统 Erlang 的顶部。 1997 年发生了一次这样的尝试,由 Simon Marlow,Glasgow Haskell 的主要开发人员之一 编译器,以及参与 Haskell 设计的 Philip Wadler 为单子背后的理论做出了贡献(阅读关于所述类型的论文 系统)。乔·阿姆斯特朗(Joe Armstrong)后来对这篇论文发表了评论:

      有一天,Phil 打电话给我,说 a) Erlang 需要一个类型系统,b) 他写了一个类型系统的小原型,c) 他 有一年的假期,打算为 Erlang 和“我们有兴趣吗?”回答——“是的。”

      Phil Wadler 和 Simon Marlow 在一个类型系统上工作了一年多,结果是 发表于[20]。该项目的结果有点 令人失望。首先,只有语言的一个子集是 类型可检查,主要遗漏是缺少流程类型和 类型检查进程间消息。

      http://learnyousomeerlang.com/types-or-lack-thereof

      【讨论】:

        【解决方案4】:

        我主要将-spec 和-type 用于文档目的:您使用-spec 编写规范,然后使用TypEr 检查它,然后(在以edoc 格式添加一些附加信息后)生成文档

        【讨论】:

        • 这也是我最终做的:)
        猜你喜欢
        • 2010-11-23
        • 2021-04-07
        • 2011-08-26
        • 2018-06-30
        • 1970-01-01
        • 2011-07-30
        • 2021-02-28
        • 2014-02-18
        • 1970-01-01
        相关资源
        最近更新 更多