编程语言类型系统与接口的深度剖析
在编程的世界里,我们常常需要不断探索新的可能性,而不是局限于现有编程语言所提供的功能。思考类型系统便是其中重要的一环。
类型系统设计的权衡
以 Java 为例,我们在使用 .clone() 方法时,常常会遇到这样的代码:
Foo orig = Foo.new();
Foo copy = (Foo) orig.clone();
第二行代码中的强制类型转换让人不禁思考,这仅仅是 Java 的惯用方式,还是语言本身的弱点呢?实际上,这是 Java 类型系统的一个弱点。为了让继承机制“安全”运行,Java 的类型系统施加了一些限制,导致继承方法的返回类型受到约束,重写方法必须返回与父类方法相同的类型。
设计类型系统就像一场平衡的游戏,需要在灵活性、表达性、保留有用属性以及便于程序员使用之间进行权衡。有些语言在这方面做得很好,而 Java 则属于表现欠佳的一类,其带来的好处有限,成本却较高。相比之下,Haskell 在类型系统设计上更为出色。
不过,Java 的问题并不意味着面向对象编程(OOP)中的类型检查本质上存在问题,也不意味着唯一的选择就是动态检查。在这个领域,有很多优秀的研究正在探索替代方案。Kim B. Bruce 的《Foundations of Object - Oriented Languages (2002)》就是一个很好的起点,它对主要编程语言进行了概述,还对 Java 的设计和实现进行了深入讨论,并提出了一些有吸引力的替代方案。Bruce 方法的一个关键方面是将数据和功
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



