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

时间:2015-03-06 13:54:03

标签: sml

在2013年presentation about the future of Standard ML中,Bob Harper在幻灯片9中说“结构共享已被破坏”。有人可以提供更多细节吗?我没有足够的分享经验来理解他的意思。

2 个答案:

答案 0 :(得分:6)

它被破坏是因为如指定的那样,它不能应用于具有透明类型组件的结构。例如:

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”约束,这可能已经正确地替换了结构的抖动。

答案 1 :(得分:2)

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

  

这个定义纯粹是技术问题。在SML 90那里   是一种超越成分的结构共享概念   类型共享。在SML 97中,结构共享被重新定义为意思   分享组成类型,但配方不正确   (有几个候选替代品,因此编译器有所不同   他们的行为)。无论如何,这是一个黑暗的角落,所以在计划中   事情很小,但错误和相关   不兼容性使它再也没用了。