论文部分内容阅读
继续表示程序在某个执行状态下的剩余计算抽象。继续在计算机科学的各个分支中都有重要的应用。本文讨论继续在程序设计语言中的理论与应用。
继续传递风格(CPS)变换是表达λ演算和函数式程序设计语言语义的重要手段。作为活性语言基础的传值调用策略CPS变换已经被广泛研究。而惰性语言采用的传名调用策略CPS变换研究则稍显不足。本文在理论基础方面着重讨论常数传名调用语言的CPS变换理论。
在区分常数语言中,本文给出传名调用求值上下文及在此基础上的项和求值上下文的CPS变换,证明了Plotkin的模拟定理。在证明过程中,本文提出了两种证明思路。本文对两种证明思路进行对比,也和相关工作进行了比较。在一般常数语言的CPS变换讨论中,本文针对一般常数的动态归约特征提出了二值传递变换思想,并在此基础上给出了CPS变换闭语言。相比Plotkin的工作:本文提出的二值传递CPS变换表达更简洁、CPS语言是归约闭语言、归约过程中产生的额外归约更少、且是完全风格的CPS变换。本文也纵向比较了区分常数语言和一般常数语言在求值归约以及CPS模拟方面的区别。
继续在函数式程序设计语言中已经得到广泛的实现和应用。函数式语言的继续操作符由特定的系统基本操作符提供。主流面向对象语言并不提供这些控制操作符,仅仅提供基本的异常处理操作符try/catch/throw等。如何在主流面向对象语言上运用异常处理技术实现系统抽象控制栈的保存和重载,即,如何实现继续对象,成为重要的应用研究问题。本文在实践方面着重讨论面向对象语言的控制栈获取和编程技术。
函数式程序设计语言的A范式被证明是CPS变换在编译优化过程中的重要产物,是函数式应用程序的线性控制范式。本文分析并给出了命令式语言对应的线性控制范式:程序的切片A范式(FANF)。首先,讨论了南程序的优化CPS表示到FANF的变换过程。定义基本的优化CPS表示语言,给出求值语义,给出由优化CPS语言到FANF的变换步骤,最后形式给出切片A范式文法。由于作为变换源语言的优化CPS语言无法建模主流语言的变量赋值副作用,本文又讨论了直接从命令式语言出发获取FANF的办法。建模一个模拟Java的小命令式语言,给出变换步骤,并最终给出目标FANFo本文也分析讨论了两种方法获取FANF的异同。
在FANF程序之上,本文给出了添加异常处理模块和继续帧定义获取程序继续对象的方法。本文归纳能应用此方法得到程序继续的语言公共特征,给出抽象的、一般的系统类设计。本文也讨论了具体语言实现继续的特殊技术以及异常处理技术获取程序继续在程序尾递归优化中的作用。
本文最后讨论了面向对象语言的高阶控制编程技术。在获得FANF程序后,可以在程序系统栈上添加基础设施来实现程序的高阶控制编程。本文实现了高阶控制操作符run和fcontrol的标志控制系统。将同边树判定问题作为无标记标志控制系统的具体应用实例。本文也将标志控制系统扩展到带标记版本,并实现了一个多级的线程轮询调度器。实践证明,在获得FANF程序后,主流面向对象语言也可以和函数式程序设计语言一样应用高阶控制编程。