【问题标题】:Imperative languages with static, structural typing and global type inference具有静态、结构类型和全局类型推断的命令式语言
【发布时间】:2012-10-17 05:31:57
【问题描述】:

我知道像 Haskell 这样的语言是静态类型的并且具有类型推断。但是是否存在具有全局类型推断的非函数式语言,相当于具有类型推断和结构类型的 C 语言。

【问题讨论】:

    标签: type-inference static-typing imperative-programming structural-typing


    【解决方案1】:

    OCaml 是我所知道的唯一一种可以是命令式/面向对象的,它是静态类型的、垃圾收集的并支持全局类型推断和结构类型,尽管它本质上是一种函数式语言。

    Scala 不是像 OCaml 那样的函数式语言,而是一种支持结构类型的命令式/面向对象的语言,但没有 type inference you're looking for 那种。不过,它仍然支持函数式构造。

    如果您所说的“非函数式”是指一种根本不支持函数式编程的语言,那么我认为不存在这种语言。

    【讨论】:

    • OCaml - 一种命令式语言?这是少数人的观点,至少可以这么说:D
    • 好吧,作为一种支持这两种范式的语言,我认为这对于这个问题来说很重要。
    【解决方案2】:

    OCaml 不再是唯一的竞争者。近年来出现了许多结构类型的命令式语言:

    • F#OCaml 一样,是一种支持复杂模式匹配以及命令式和函数式编程的多范式语言。作为 OCaml 的衍生物,这两种语言实际上非常相似,以至于barring minor feature differences they are practically source-compatible。主要的 [缺点?] 优点是它可以在 .NET 上运行。
    • Go 是最初的 Unix / Plan 9 / Inferno 团队自他们进入 Google 以来的挚爱,这是基于他们在这些系统的编译器上数十年的工作。 Go 支持结构多态性,因为对象组合是其主要的子类型机制,并且不需要显式实现方法接口。
    • Haxe 是一种 ActionScript 衍生产品,可编译到包括 C++ (!) 在内的各种令人印象深刻的平台。它支持完全结构化的类型和枚举(相当于 OCaml 联合)以及 C# 样式的对象层次结构,并拥有一个复杂的宏系统。

    【讨论】:

    • Haxe 项目给我留下了多么深刻的印象,我真的不能夸大其词。甚至还有人谈论添加诸如 Haskell 等效的类型类和种类之类的特性……事实上,已经可以通过宏实现 monads &c。
    • 我不认为 Go 和 Haxe 实现了 HM 类型推断,这是 OP 的要求。
    【解决方案3】:

    还有Crystal,但处于pre-alpha阶段:

    https://github.com/manastech/crystal

    【讨论】:

    • 预览版?那是一个胎儿。
    猜你喜欢
    • 1970-01-01
    • 2016-09-26
    • 2011-02-11
    • 2011-02-09
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    相关资源
    最近更新 更多