Losing language features: some stories about disjoint unions
10 months ago
- #sum-types
- #history
- #programming-languages
- 和类型(不相交并集、标记并集、安全变体类型)是现代语言如ML、Haskell、Rust、Swift和Scala中必不可少且广泛采用的核心特性。
- 正确实现和类型需要将标记与不安全联合体耦合,并通过switch/match表达式等语法结构强制访问。
- 和类型常见的三种退化实现:无防护访问导致运行时错误、仅有建议性标记而无运行时检查、以及完全没有标记。
- Casey Muratori的演讲揭示了安全不相交并集早在1960年代就已出现(早于ML语言),并被Simula语言采用的历史渊源。
- C++最初忽略了安全变体类型而选择继承机制,导致后来不得不重新引入std::variant。
- 施乐PARC开发的Mesa语言拥有安全变体类型,但受其影响的Modula 2却因Wirth的疏忽而错误实现了该特性。
- 语言特性常因设计者偏见而遭到破坏、错误复制或遗漏,这展现了编程语言发展历程的迂回曲折性。