什么是类型和效果系统?

时间:2008-10-13 01:22:53

标签: types effects type-systems type-theory effect-systems

Wikipedia article on Effect system目前只是一个简短的存根,我一直想知道什么是效果系统。

  • 除了类型系统之外,是否还有任何具有效果系统的语言?
  • 您熟悉的主流语言中可能的(假设的)符号有什么样的效果?

3 个答案:

答案 0 :(得分:17)

“类型和效果系统”不仅描述程序中的各种值,还描述这些值的变化。 “类型状态”检查是一个相关的想法。

示例可能是跟踪文件句柄的类型系统:类型系统不会记录返回类型为close的函数void,而是记录{em>效果 { {1}}处理文件资源 - 在调用close后尝试读取或写入文件将成为类型错误。

我不知道主流编程语言中出现的任何类型和效果系统。它们已被用于定义静态分析(例如,根据效果定义正确锁定/解锁的分析是很自然的)。因此,效果系统通常使用推理方案而不是具体语法来定义。您可以想象一个类似

的语法
close

如果您想了解更多信息,以下文章可能会很有趣(公平警告:论文非常理论化)。

答案 1 :(得分:7)

(这不是一个权威的答案;只是试图记录我的记忆。)

从某种意义上说,只要你用语言编写'状态monad',你就会使用类型系统作为潜在的效果系统。因此,Haskell中的“状态”或“IO”捕获了这一概念(IO也捕获了许多其他效果)。我依稀记得阅读有关使用高级类型系统的各种语言的论文,包括“依赖类型”之类的东西来控制更细粒度的效果管理,以便例如类型/效果系统可以捕获有关哪些内存位置将被修改的信息。给定数据类型。这很有用,因为它提供了两种方法来使修改互斥状态位的两个函数被允许“通勤”(monad通常不会通勤,并且不同的monad并不总是很好地相互组合,这通常使它成为现实难以输入(读取:指定静态类型)'合理'程序)......

非常手动波浪级别上的类比是Java如何检查异常。您在类型系统中表达了关于某些效果的额外信息(您可以将异常视为类比的“效果”),但这些“效果”通常会泄漏到整个程序中并且不能很好地组合练习(你最终会得到一百万'throws'子句,或者使用大量未经检查的运行时异常类型。)

我认为在研究和主流语言方面正在进行大量的研究,因为用效果信息注释函数的能力可以解锁编译器进行大量优化的能力,可以影响并发性,可以为各种程序分析和工具做很多事情。不过,我个人并不会对此抱有很大的期望,因为我认为很多聪明的人已经在很长一段时间内一直在研究这个问题,但仍然没有什么可以表现出来的。

答案 2 :(得分:4)

您可以查看http://www.haskell.org/haskellwiki/DDC

这是实现效果系统的Haskell版本。