论文部分内容阅读
面向对象程序设计(OOP)是以程序中的对象为核心,而泛型程序设计(GP)是以类型需求为核心的程序设计范式。泛型程序设计(GP)与面向对象程序设计(OOP)两者都是在程序设计时除去不稳定的部分,用更加通用的并且效率更高的部分来构造程序。尽管通用性和效率这两个特性被认为是相互对立的,但是仍然期望能在程序开发的大多数情况下实现两者之间的平衡,从而在确保类型安全的前提下加快程序开发的速度。总结了不同设计风格的主流程序设计语言有关泛型设施的异同。对于面向对象程序设计语言,以Java为例,Java的参数化类型和泛型约束之间紧耦合,描述的泛型需求过于狭窄,只能称之为窄义的约束;对于动态类型程序设计语言,以Python为例,动态类型语言天然地支持泛型,没有严格的类型定义格式,可以随时改变参数类型,泛型约束机制近乎没有;对于函数式程序设计语言,以Scala为例,Scala的Implicits机制基于面向对象程序设计风格,支持关联类型,对泛型概念特性有着良好的支持,但依旧具有隐式参数。研究了现今主流程序设计语言中的泛型约束方法及其安全机制,因为主流语言其他设施的影响,语言抽象程度不高,难以描述复杂的语义需求,大部分主流语言对于泛型约束的支持还停留在语法层面,缺乏规范的约束描述语言,难以直接写出满足需求的泛型约束。以高度抽象的泛型程序设计语言Apla为宿主语言提出了基于完整GP类型需求的泛型约束方法,同时支持语法层和语义层的泛型约束。给出了Apla类型系统,使用一阶谓词逻辑公式的形式刻画了基本数据类型约束,基于代数结构描述了自定义抽象数据类型约束。给出了通用规范的泛型约束描述语言。提出了Apla泛型约束的安全机制,通过约束匹配检测的方式保证类型安全性。设计了匹配检测算法来判定泛型约束是否满足需求,以实际算法为例展示了匹配检测的全过程。最后,以PAR方法为支撑,在PAR平台C++生成系统中实现了Apla泛型约束安全机制的功能。相较于现有研究,更进一步实现了完整意义上以类型需求为核心的GP概念。