结构共享在标准ML中是如何被打破的

  • 本文关键字:共享 标准 ML 结构 sml
  • 更新时间 :
  • 英文 :


在2013年关于Standard ML未来的一次演示中,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"约束,该约束本可以适当地取代结构破坏。

Andreas Rossberg的回答已经澄清了问题,但在Andreas回答之前我已经写信给Harper教授了。我在这里发布他的回复是为了好奇:

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

最新更新