在2013年的标准ML的未来展望中,鲍勃·哈珀( Bob )在幻灯片9中说,“结构共享被破坏了”。有人能给出更多的细节吗?我在分享方面没有足够的经验来理解他的意思。
发布于 2015-03-13 18:36:19
由于指定,它不能应用于具有透明类型组件的结构。例如:
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类型“约束所取代。因此,共享的语义得到了极大的简化,结构共享也从原始的语法糖降为语法糖。但是,这种糖的定义只适用于SML'90程序--如果您只将其视为向后兼容性攻击,而不考虑SML'97的核心功能,则这是有意义的。
SML社区中的人对于共享约束的相关性存在分歧。有些人认为他们过时了,有些人仍然很重要。不幸的是,SML'97未能添加一个"where structure“约束,该约束可能已经正确地取代了结构控制。
发布于 2015-03-14 14:53:53
安德烈亚斯·罗斯伯格的回答已经澄清了一些问题,但在安德烈亚斯回答之前,我已经写信给哈珀教授。我在这里给好奇的人发了他的回复:
这个定义纯粹是一个技术性的问题。在SML 90中,除了组成类型共享之外,还有一个结构共享的概念。在SML 97中,结构共享被重新定义为组件类型的共享,但是公式不正确(有几个候选替换,因此编译器的行为不同)。这是一个黑暗的角落,所以在计划的事情,它是非常小的,但错误和相关的不兼容使它不再有用。
https://stackoverflow.com/questions/28900279
复制相似问题