在2013年presentation about the future of Standard ML中,Bob Harper在幻灯片9中说“结构共享已被破坏”。有人可以提供更多细节吗?我没有足够的分享经验来理解他的意思。
答案 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中,结构共享被重新定义为意思 分享组成类型,但配方不正确 (有几个候选替代品,因此编译器有所不同 他们的行为)。无论如何,这是一个黑暗的角落,所以在计划中 事情很小,但错误和相关 不兼容性使它再也没用了。