在这里我读到:
Haskell肯定没有最先进的类型系统(如果算上研究语言,甚至还不算很紧密),但是在实际用于生产的所有语言中,Haskell可能是最高级的。
所以我要问两件事:
- 哪种研究语言比Haskell具有更强大的类型系统;
- 他们有什么改进。
我只是一名程序员,所以我不知道类型理论中使用的许多数学对象,如果可以的话,请提供温和的解释。
在这里我读到:
Haskell肯定没有最先进的类型系统(如果算上研究语言,甚至还不算很紧密),但是在实际用于生产的所有语言中,Haskell可能是最高级的。
所以我要问两件事:
我只是一名程序员,所以我不知道类型理论中使用的许多数学对象,如果可以的话,请提供温和的解释。
Answers:
这个问题有些麻烦,因为它依赖于“更好”的主观定义。
相依类型化语言(例如Agda,Idris和Coq)具有比Haskell更强的类型系统。这意味着,与Haskell相比,您可以使用这些语言中的类型来证明有关代码的更多属性。也就是说,将捕获更多不正确的程序。
但是,这样做是有代价的:类型推断和测试是否存在给定类型的任何值都不再可行。这意味着对于这些语言,您需要使用类型显式地注释代码。从本质上讲,这可以归结为编写自己的代码正确性证明。
那么,这些语言是否比Haskell“更好”?他们可以检查代码正确性的高级证明,但他们无法像Haskell那样自动证明代码的属性。
LiquidHaskell是比Haskell更好的另一种研究语言。这基本上是Haskell,其优化类型固定在顶部,并通过特殊注释进行了解析。
优化类型使您可以使用属性来优化类型。例如,Int
您可以指定指定{i : Int | i > 0}
所有正整数的类型,而不是使用。细化类型可以决定类型推断,但是您不能证明它们的正确性和依赖类型所能证明的一样多。
还有其他改进类型的系统,但是我对它们都不十分熟悉。
ML语言家族(StandardML,OCaml)与Haskell具有相似的传统,因此具有相似的类型系统。但是,它们与Haskell并不完全相同,它们的某些功能可能更适合您(没有一种客观上更好的类型系统,因为存在编程语言中的类型系统可以帮助人类)。以下是Haskell不具备的OCaml功能(但可能具有相应的类似概念),或者Haskell确实具有但有所不同:
而且请不要把它变成ML-Haskell枪战,否则我将开始链接到Bob Harper的博客文章;-)
研究语言Clean具有比Haskell更好的类型系统,因为它具有唯一性类型。唯一性类型背后的思想与线性逻辑紧密相关,线性逻辑比经典逻辑更接近资源受限的“现实世界”。
反研究语言Rust也具有类型系统,其类型特征比经典的纯类型系统更接近“现实世界”。影响类型系统的大多数思想早在其完全存在之前就已经完全独立于Rust出版了。但是,即使存在已知的漏洞和矛盾之处,将这些旧观念组合在一起的方式也是独特的,并且也应值得进行真正的研究发表。