跳到主要内容

通用和索引编程

2006年11月1日至2010年4月30日

通用编程是在不影响安全性的情况下增加程序的灵活性。这通常是可以实现的通过引入新的参数化方法。参数化程序从不同但相关的系列中抽象出来程序,可以通过参数的不同实例化来检索。参数的类型系统允许程序员表示参数约束,并静态检查参数化通用程序及其特定程序实例化。这个概念的例子包括高阶编程(函数参数化)、参数多态性(通过类型,统一使用)、ad-hoc多态性(通过类型和一些约束)、抽象数据类型(通过接口)、,数据类型通用性(通过数据的形状)等。我们最近的工作集中在该方案的一个实例上,即数据类型泛型编程,在这种编程中,程序由类型构造函数参数化,并为其进行适当的实例化是“列表”和“树”。我们已经研究了两种编程技术(包括关于通用程序的推理,并使用它们精确地捕获设计模式)和语言机制(特别是轻量级方法:模式用于在熟悉但显然表达能力较差的语言中模拟高度表达的技术)。我们最近的经验引导我们获得了一些见解;目前的这项提议寻求支持,以利用这些资源。首先,这些轻量级技术,到目前为止,我们已经将其嵌入到Haskell仍然相对有表现力的类型系统中,实际上它甚至适用于表现力较差但更流行的主流语言,如Java和C#。其次,这些技术有更多的应用比我们最初想象的要多;特别是,它们为所谓的“表达问题”和其他涉及可扩展性:沿多个维度的独立扩展的安全组合。第三,语言的新发展,例如Haskell的广义代数数据类型(GADT),正引导我们走向我们可以称之为索引编程的方向:值用于捕获和静态验证程序的属性。作为一个简单的例子,一类定长向量按长度分度;更详细的例子包括一种按状态索引的有限自动机,以及一种类型安全的解释器根据其解释的表达式类型进行索引。索引编程与我们以前的工作有关关于泛型编程的两种方法:它直接支持泛型编程风格,通过表示为程序编制索引类型;它是另一种轻量级方法,是一种轻巧的依赖型编程,提供了许多只需花费一小部分成本就能获得好处,而不必求助于成熟的定理证明和复杂的概念对于“编译时”和“运行时”,可以在类型级别反映索引,并只使用对现有的类型检查算法。我们提出了实现这一愿景的六个工作包:编程案例研究有指数;使用McBride和Paterson的应用函子将“Scrap your Boilerplate”方法扩展到泛型编程也适用于GADT;应用GADT表示安全的可扩展函数和数据类型,解决泛化问题Wadler的表达问题;将这些结果转换为Java和C#等主流语言,并使用它们实现一个可重用代码库,其中包含一些四人组设计模式;提供静态推断机制见证属性命题,使程序员不必发明和操作它们;调查使用情况索引编程技术,用于集成不同层次的企业体系结构中使用的语言,旨在用于类型安全的数据库和XML访问。

选定出版物

查看全部

发起人

首席研究员

布鲁诺·奥利维拉
孟旺(Meng Wang)

分享这个: