Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sml 如何在标准ML中打破结构共享?_Sml - Fatal编程技术网

Sml 如何在标准ML中打破结构共享?

Sml 如何在标准ML中打破结构共享?,sml,Sml,在2013年的一份报告中,鲍勃·哈珀(Bob Harper)在第9张幻灯片上说,“结构共享被打破了”。有人能提供更多的细节吗?我没有足够的分享经验来理解他的意思。它被破坏了,因为按照规定,它不能应用于具有透明类型组件的结构。例如: signature S = sig type t; type u = int end signature T = sig structure A : S structure B : S sharing A = B end 这已经是违法的,尽管你自然会认为

在2013年的一份报告中,鲍勃·哈珀(Bob Harper)在第9张幻灯片上说,“结构共享被打破了”。有人能提供更多的细节吗?我没有足够的分享经验来理解他的意思。

它被破坏了,因为按照规定,它不能应用于具有透明类型组件的结构。例如:

signature S = sig type t; type u = int end
signature T =
sig
  structure A : S
  structure B : S
  sharing A = B
end
这已经是违法的,尽管你自然会认为这是好的

这里的历史是,结构共享是在SML'90中引入的,当时不存在透明类型组件。在SML'97中,添加了这些。此时,具有共享约束的整个业务变得有些过时,因为它们(在某种程度上)被“where-type”约束所取代。因此,共享的语义被大大简化,结构共享也从一种原始语言退化为语法糖。但是这个糖被定义为只使用SML'90程序——这是有意义的,如果你只把它看作向后兼容性黑客,但如果你认为结构共享SML '97。
SML社区中的人们对共享约束的相关性存在分歧。有些人认为它们过时了,有些还很重要。不幸的是,SML'97没有添加一个“where structure”约束,它本可以适当地取代结构shairing。

安德烈亚斯·罗斯伯格的回答已经澄清了问题,但我在安德烈亚斯的回答之前已经写信给哈珀教授。我把他的回答贴在这里是为了好奇:

这纯粹是定义上的技术问题。在SML90里 是一种结构共享的概念,超越了组成部分 类型共享。在SML97中,结构共享被重新定义为 共享组成类型,但公式不正确 (有几个候选替换,因此编译器在 他们的行为)。无论如何,这是一个黑暗的角落,所以在 事情很小,但错误和关联 不兼容使它不再有用


谢谢你,安德烈亚斯。我希望你能回答这个问题:)现在有道理了。我还写信给鲍勃·哈珀询问此事,所以我将在另一个答案中添加他的回答。