多态的多态
尤记得本科的面向对象编程课有一道经典例题:C++ 的多态性体现在何处?标准答案着眼于 C++ 的虚函数解释了动态派发的机制。自那以后的很长一段时间里,我对多态的认识就固化在了子类型多态上;直到博士期间开始搞编程语言的研究,才发现学术界对多态的定义远不局限于此。
英语里有个单词叫做 autological,是说一个词可以形容其本身,比方说「名词」本身就是个名词,「阳平」这两个字的声调本身就是阳平,而「多态」本身也很多态。编程语言中最常见的多态有四种:特设多态、参数多态、子类型多态和行多态。通俗来讲,只要是为不同类型的数据或操作提供了相同的名字就可以叫多态。
本文只是一篇科普性质的文章,所以基本上只以实际编程语言为例,不会用任何形式化的语言来描述这些类型系统。如果希望深入学习相关的理论知识,建议阅读 TAPL 或者 PFPL。