关于效果系统的维基百科文章目前只是一个简短的存根,我一直想知道什么是效果系统.
除了类型系统之外,是否还有任何具有效果系统的语言?
您熟悉的主流语言中可能的(假设的)符号与效果类似吗?
Chris Conway.. 17
"类型和效果系统"不仅描述程序中的各种值,还描述这些值的变化."类型状态"检查是一个相关的想法.
一个示例可能是跟踪文件句柄的类型系统:类型系统将记录处理文件资源的效果,而不是具有close
返回类型的函数- 任何在调用后读取或写入文件的尝试都将变为类型错误.void
close
close
我不知道主流编程语言中出现的任何类型和效果系统.它们已被用于定义静态分析(例如,根据效果定义正确锁定/解锁的分析是很自然的).因此,效果系统通常使用推理方案而不是具体语法来定义.你可以想象一个类似的语法
File open(String name) [+File]; // open creates a new file handle void close(File f) [-f] ; // close destroys f
如果你想了解更多,下面的论文可能会很有趣(公平警告:论文非常理论化).
原子类型:Java的静态检查和推理.Flanagan,Freund,Lipshin和Qadeer.
在低级软件中实施高级协议.Robert DeLine和ManuelFändrich.
类型和效果系统.尼尔森和尼尔森.
Brian.. 7
(这不是一个权威的答案;只是试图记录我的记忆.)
从某种意义上说,只要你用语言编写"状态monad",你就会使用类型系统作为潜在的效果系统.因此,Haskell中的"状态"或"IO"捕获了这一概念(IO也捕获了许多其他效果).我依稀记得阅读有关使用高级类型系统的各种语言的论文,包括"依赖类型"之类的东西,以控制更细粒度的效果管理,以便例如类型/效果系统可以捕获有关哪些内存位置将被修改的信息.给定数据类型.这很有用,因为它提供了一些方法来使修改互斥状态位的两个函数被允许"通勤"(monad通常不会通勤,并且不同的monad并不总是彼此组合良好,
在一个非常手工波浪水平上的类比是Java如何检查异常.您在类型系统中表达了关于某些效果的额外信息(您可以将异常视为类比的"效果"),但这些"效果"通常会泄漏到整个程序中并且不能很好地组合练习(你最终会得到一百万'throws'子句,或者使用大量未经检查的运行时异常类型.
我认为这个领域正在进行大量的研究,包括研究和主流语言,因为用效果信息注释函数的能力可以解锁编译器进行大量优化的能力,可以影响并发性,以及可以为各种程序分析和工具做很多事情.不过,我个人并不会对此抱有很大的期望,因为我认为很多聪明的人已经在很长一段时间内一直在努力,而且仍然很少有人表现出来.
"类型和效果系统"不仅描述程序中的各种值,还描述这些值的变化."类型状态"检查是一个相关的想法.
一个示例可能是跟踪文件句柄的类型系统:类型系统将记录处理文件资源的效果,而不是具有close
返回类型的函数- 任何在调用后读取或写入文件的尝试都将变为类型错误.void
close
close
我不知道主流编程语言中出现的任何类型和效果系统.它们已被用于定义静态分析(例如,根据效果定义正确锁定/解锁的分析是很自然的).因此,效果系统通常使用推理方案而不是具体语法来定义.你可以想象一个类似的语法
File open(String name) [+File]; // open creates a new file handle void close(File f) [-f] ; // close destroys f
如果你想了解更多,下面的论文可能会很有趣(公平警告:论文非常理论化).
原子类型:Java的静态检查和推理.Flanagan,Freund,Lipshin和Qadeer.
在低级软件中实施高级协议.Robert DeLine和ManuelFändrich.
类型和效果系统.尼尔森和尼尔森.
(这不是一个权威的答案;只是试图记录我的记忆.)
从某种意义上说,只要你用语言编写"状态monad",你就会使用类型系统作为潜在的效果系统.因此,Haskell中的"状态"或"IO"捕获了这一概念(IO也捕获了许多其他效果).我依稀记得阅读有关使用高级类型系统的各种语言的论文,包括"依赖类型"之类的东西,以控制更细粒度的效果管理,以便例如类型/效果系统可以捕获有关哪些内存位置将被修改的信息.给定数据类型.这很有用,因为它提供了一些方法来使修改互斥状态位的两个函数被允许"通勤"(monad通常不会通勤,并且不同的monad并不总是彼此组合良好,
在一个非常手工波浪水平上的类比是Java如何检查异常.您在类型系统中表达了关于某些效果的额外信息(您可以将异常视为类比的"效果"),但这些"效果"通常会泄漏到整个程序中并且不能很好地组合练习(你最终会得到一百万'throws'子句,或者使用大量未经检查的运行时异常类型.
我认为这个领域正在进行大量的研究,包括研究和主流语言,因为用效果信息注释函数的能力可以解锁编译器进行大量优化的能力,可以影响并发性,以及可以为各种程序分析和工具做很多事情.不过,我个人并不会对此抱有很大的期望,因为我认为很多聪明的人已经在很长一段时间内一直在努力,而且仍然很少有人表现出来.