哪种研究语言比Haskell具有更强大的类型系统,为什么?


14

在这里我读到:

Haskell肯定没有最先进的类型系统(如果算上研究语言,甚至还不算很紧密),但是在实际用于生产的所有语言中,Haskell可能是最高级的。

所以我要问两件事:

  1. 哪种研究语言比Haskell具有更强大的类型系统;
  2. 他们有什么改进。

我只是一名程序员,所以我不知道类型理论中使用的许多数学对象,如果可以的话,请提供温和的解释。


3
什么是“更好”?
大卫·里希比

2
@DavidRicherby我想这意味着更强大的类型系统
ВиталийОлегович

2
一旦证明类型系统是图灵完备的,真的重要吗?;-)
DevSolar 2015年

7
图灵机是图灵完备的,为什么不将其用于日常编程任务?
gallais 2015年

4
请注意,原始文字提到了使用更高级的类型系统的语言,并且对于“ 更高级”的类型系统而言,它并没有做出任何断言。
彼得斯(Peteris)

Answers:


25

这个问题有些麻烦,因为它依赖于“更好”的主观定义。

相依类型化语言(例如AgdaIdrisCoq)具有比Haskell更强的类型系统。这意味着,与Haskell相比,您可以使用这些语言中的类型来证明有关代码的更多属性。也就是说,将捕获更多不正确的程序。

但是,这样做是有代价的:类型推断和测试是否存在给定类型的任何值都不再可行。这意味着对于这些语言,您需要使用类型显式地注释代码。从本质上讲,这可以归结为编写自己的代码正确性证明。

那么,这些语言是否比Haskell“更好”?他们可以检查代码正确性的高级证明,但他们无法像Haskell那样自动证明代码的属性。

LiquidHaskell是比Haskell更好的另一种研究语言。这基本上是Haskell,其优化类型固定在顶部,并通过特殊注释进行了解析。

优化类型使您可以使用属性来优化类型。例如,Int您可以指定指定{i : Int | i > 0}所有正整数的类型,而不是使用。细化类型可以决定类型推断,但是您不能证明它们的正确性和依赖类型所能证明的一样多。

还有其他改进类型的系统,但是我对它们都不十分熟悉。


谢谢!是否有可能证明Haskell类型系统是仍允许类型推断的最强大的系统?
ВиталийОлегович

3
Haskell绝对不是允许类型推断的最强函数。我已经提到的优化类型允许类型推断,并且许多GHC扩展已添加到Haskell,从而允许稍微强一些的类型系统。
jmite 2015年

4
最重要的是,有很多类型系统,并且许多系统是无法比拟的:它们在某些方面将比Haskell强大,但在某些方面将比Haskell弱。类型系统没有从最强到最弱的线性排序。
jmite 2015年

5
现在,我想证明没有允许类型推断的最强类型系统。必须抵制无用的事实。
安德烈·鲍尔

1
这个事实在我看来似乎没有用。对于存在最强类型推断系统的知识将特别感兴趣,特别是如果事实证明可行的话。
合理主义者

10

ML语言家族(StandardML,OCaml)与Haskell具有相似的传统,因此具有相似的类型系统。但是,它们与Haskell并不完全相同,它们的某些功能可能更适合您(没有一种客观上更好的类型系统,因为存在编程语言中的类型系统可以帮助人类)。以下是Haskell不具备的OCaml功能(但可能具有相应的类似概念),或者Haskell确实具有但有所不同:

  1. 多态变体
  2. 具有深度子类型类的对象
  3. 函数,是模块之间的映射(Haskell有模块),甚至是一流的模块

而且请不要把它变成ML-Haskell枪战,否则我将开始链接到Bob Harper的博客文章;-)


9

研究语言Clean具有比Haskell更好的类型系统,因为它具有唯一性类型。唯一性类型背后的思想与线性逻辑紧密相关,线性逻辑比经典逻辑更接近资源受限的“现实世界”。

反研究语言Rust也具有类型系统,其类型特征比经典的纯类型系统更接近“现实世界”。影响类型系统的大多数思想早在其完全存在之前就已经完全独立于Rust出版了。但是,即使存在已知的漏洞和矛盾之处,将这些旧观念组合在一起的方式也是独特的,并且也应值得进行真正的研究发表。


3
不知何故,“已发布”和“反研究”并不能很好地融合在一起。
安德烈·鲍尔

1
唯一性当然是一个有趣的概念,但IMO则更多地是关于语义,而不是类型系统特性。这真的使类型系统严格地更好吗?Clean可以做Haskell已添加到其类型系统中的较新的东西,更高级别的多态性等吗?当类型系统已经需要处理唯一性时,其中某些甚至有可能吗?
左转

1
@leftaroundabout您对唯一性类型或线性逻辑有多熟悉?例如,如果x具有唯一类型,则f(x,x)的类型不正确。可以将Haskell扩展为也支持唯一性类型。C ++中的move语义也可以被视为改善了现有类型系统之上对uniquencess类型的支持。
Thomas Klimpel,2015年

我对C ++移动语义很熟悉,也许这就是为什么我对唯一性的印象是“类型系统不多”。我会发现有趣的是,完全向外传播的唯一性类型是否会阻碍高级类型系统的其他功能?
大约

1
@leftaroundabout Rvalue引用对我来说听起来像是类型系统。为什么唯一性类型会阻碍其他高级类型功能?在最坏的情况下,那些高级功能将根本不适用于唯一性类型。当然,诸如“独特性”类型之类的“现实世界”功能意味着要广度而不是深度,而花费在更广泛领域上的时间将不再存在。但是我的印象是,唯一性类型在理论和实践之间提供了很好的平衡,因此我认为时间会很值得。
Thomas Klimpel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.