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

Ion*_*tan 6 sml

在2013年关于标准ML未来的演讲中,Bob Harper在幻灯片9中说"结构共享已经破裂".有人可以提供更多细节吗?我没有足够的分享经验来理解他的意思.

And*_*erg 6

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

signature S = sig type t; type u = int end
signature T =
sig
  structure A : S
  structure B : S
  sharing A = B
end
Run Code Online (Sandbox Code Playgroud)

虽然你自然会期望这很好,但它已经是非法的了.

这里的历史是在SML'90中引入了结构共享,其中不存在透明类型组件.使用SML'97,添加了这些.此时,具有共享约束的整个业务变得有些过时,因为它们(在某种程度上)被"where type"约束所取代.因此,共享的语义大大简化,结构共享从原始糖降解为语法糖.但是这个糖被定义为只适用于SML'90程序 - 如果你只把它视为向后兼容性黑客,这是有道理的,但如果你认为结构共享是SML'97的核心功能则不行.

SML社区的人们不同意共享约束的相关性.有些人认为它们已经过时,有些仍然很重要.不幸的是,SML'97未能添加"where structure"约束,它可以正确地替换结构shairing.