维基百科上的效应系统文章目前只是一个简短的存根,我一直在想什么是效应系统。
- 是否有任何同时具有类型系统和效应系统的语言?
- 对于你熟悉的主流语言,一个可能的(假设性)符号表示会是什么样子?
维基百科上的效应系统文章目前只是一个简短的存根,我一直在想什么是效应系统。
"类型和效应系统"不仅描述程序中的值种类,还描述这些值的变化。 "类型状态(typestate)"检查是一个相关的概念。
一个例子可能是跟踪文件句柄的类型系统: 而不是拥有一个返回类型为void
的函数close
,该类型系统会记录close
的"效应",即释放文件资源 - 调用close
后尝试从文件读取或写入任何数据将会成为类型错误。
我不知道任何主流编程语言中出现过的类型和效应系统。它们已被用于定义静态分析(例如,可以自然地定义proper locking/unlocking(正确的锁定/解锁)分析来描述效应)。因此,效应系统通常使用推理方案而不是具体语法来定义。你可以想象一种看起来像这样的语法:
File open(String name) [+File]; // open creates a new file handle
void close(File f) [-f] ; // close destroys f
如果您想了解更多,以下论文可能会很有趣(警告:这些论文相当理论)。