程序的并行序型与程序的动态执行

1.两种程序设计方法的理论基础

程序的设计有过程式和面向对象技术两大类。函数式和逻辑式程序以及新脚本式程序并没有得到广泛的应用。过程式程序设计可以看作是罗素的逻辑原子分析方法的应用,而面向对象技术的理论基础则是莱布尼茨的单子理论。罗素的数理逻辑分析的是集合的元素间的关系(Relation),relation可演化为映射、函数。过程式程序是处理数据,是程序数据间的复合映射。程序数据从输入数据到输出数据,这个过程是一个映射过程(注意,与函数式程序设计不同)。而莱布尼茨的单子理论是实体,即对象和类。实体的外延则是对象间完成一个功能。然而,实际上对象的成员函数仍然是过程式程序,表明过程式程序的不可替代。

   请注意文章是研究型论文,并没有得到公认而且研究并没有结束,欢迎科研研讨。

2.程序的并行序型

程序中的并行成分是并行程序设计和并行编译的一个令人感兴趣的方面。然而,到现在为止,发现程序中的并行成分是一个困难的事。用程序的功能结构能解决这个问题,不过并没有得到承认,主要是由于论文、资料和数据的不完善。若用程序的并行序型表示一个程序的并行成分,在程序执行过程中,程序的并行序型可表示程序的一个稳态。例如, sparse matrix的乘法运算程序,用<M.data|[row]表示sparse matrix M存储数组M.data[]的行序,是程序并行处理数据的方式。sparse matrix M的每一行非0数据为一个数据单元,行数据可并行执行,因此行数据具有数据独立性。每处理一个数据单元,则程序从一个稳态到另一个稳态。在这个过程中,程序的动态执行建立了数据单元的动态数据结构,不仅是数据单元的集合,而且是数据单元的组成结构。

在另一个方面思考,将数据单元视为一个单子。程序输出数据根据算法的句柄(handle)分组,可构成一个单子类型。值得注意的是,程序的输入数据根据程序算法,可建立不同的数据单元。例如,二叉树的最左子序列是输入数据的一个数据单元,同理右子树的左子序列也是一个数据单元,因此,程序的数据数据可建立一个单子类型。程序是在数据的一个单子类型基础上,演变为输出单子类型的一个功能过程。

这个功能过程的每一个数据处理阶段可视为一个原子功能,具有不可分割性。实际上原子功能用不同的方法处理程序数据的一个单子。

3.程序的概念体系

物质的原子的规律性是现代物理学的基础。物质原子是一个系统,因此与程序构成的动态执行系统有相似的基础。原子核是电子绕普朗克轨道绕核转动的,而核的电荷由原子序数决定。

程序是并行序型为程序核而程序数据的单子是核外电子的概念体系。程序的动态执行过程是并行序型的执行,并且建立动态数据结构为程序的执行结果。

4.程序的类型

程序的设计方法有过程式、面向对象技术、函数式和逻辑式方法。函数式和逻辑式程序将编译成C语言,再转换成目标代码。过程式程序和面向对象的类的成员函数仍然是过程式的,而且操作系统中能执行不同设计方法的程序,因此过程式高级语言仍然是基础和必要的。因此,它们的区别并不是截断的。

函数式语言将动态执行在图归约中实现。是静态数据、静态程序与动态执行组合的一次尝试。逻辑式程序是推理规则,因此并不是所有事情都适合。

函数式程序的理论基础是程序转换。第一个函数式语言是backus提出的,他在图灵奖的颁奖典礼上,做了发言。函数式程序最明显的不同是高阶函数,能生成一组函数。

       功能式程序设计将程序分成四类:traverse,sparse matrix,sort,path selection.程序的类型用程序序型表示,是程序核。

5.程序的组成

    程序的组成在过程式程序和成员函数中是程序块和控制结构。类和对象的功能不仅使分离的数据结构和相关功能方法的实现组成为一个实体。反映数据结构实体间的逻辑关系和层次关系,而且能更独立地决定数据实体和存在实体,实现更高级的软件复用和程序分析。

    编译程序将高级语言程序编译成目标代码,操作系统执行多道程序,因此操作系统的进程是有时序的过程。而类型程序的数据胴体执行方式是确定的,用程序数据文法表示。在程序执行前,可得到传统数据分析的值。因此程序是静态源码和动态执行的整体,用程序原子核表示。程序序型(program order type)的程序核,代表源程序。程序数据是相对独立的数据单元在不同“轨迹”执行。

函数式程序的图归约具有静态程序与动态执行组合的特征。

   程序类型的设计方法,将不再以语句或程序块为单位,而是以类型程序的原子功能为基础,程序性能的优劣仅仅是应用程序功能结构的水平不同。

6.程序分析

程序分析对程序内部的运行流程进行分析,计算的基本内容有程序语句的执行次数,程序的执行路径,中间变量的值,输入数据与输出数据的关系。因此程序分析是数据分析,与CPU执行有关。程序切片刻画变量和确定范围语句的关系,更有利于程序测试和debug。程序的性能用空间和时间复杂度描述,实际上,空间效率用同一数据单元操作计数和数据单元数量表示,时间效率用机器周期数表示。

程序分析的高级内容有概念格的动态分析,部分求值,Futamura投影定理和程序点例化技术。

概念格的静态支配单元限制在路径到达分析,语句的关系用属于同一个控制流区域表示,用在可执行程序而不是源程序的分析。部分求值是程序转换技术,它的主要内容是两个构造:

  1. 阶段构造

           P是程序,in1P的部分输入,in2是剩余输入,Pin1Pin1计算后的生成程序。表示程序或部分求值程序,[]表示数据集。阶段构造是生成例化程序Pin1

  2. 程序输出值构造

           mix是部分求值器,有Pin1两个输入。out是程序计算结果,in2是第二阶段动态数据。      

    部分求值技术的理论基础是Godel数和程序部分函数的递归技术,称为kleene的迭代s-m-n定理。部分求值的困难是等价划分in1in2,尽管有精准公式表示的过程,但是并不是程序代数,也没有完成数理逻辑和文法的推理功能。但是部分求值技术“揭示”了程序输入数据划分与源程序的例化程序的不同阶段间的等价性。部分求值的例化程序若是编译器的目标代码,则部分求值能实现编译器和生成编译器的功能。Futamura投影定理公式表示编译器、编译器生成与程序功能和运行数据的关联,第一投影定理:

        

    int是解释器定理的结论是mix是一个编译器。

        程序点例化将静态变量的值组合到程序执行的控制点中,用部分输入数据点例化程序可实现静态变量和动态变量的分割。程序点例化的一个应用是决定了动态变量什么时候能计算出值或者精确到在一个程序段执行的时间。

    因此程序分析的标准:

  1. 能构造程序生成器,包括编译器和高级语言程序环境。因此,一个例化程序可以编译到目标代码,也可以在UNIX系统中得到共享正文段。

  2. 将源程序的例化和程序数据分析组成一个整体。

  3. 能不使用Godel数和程序部分函数递归技术,而是在算法的程序文法与公理集合论基础上实现程序分析。

  4. 程序执行控制与程序数据集的组合表示程序的执行过程。实质是程序数据代式到程序语句中。可用文法的产生式、集合论表示。

  5. 能产生程序变量或数据集与程序语句的映射关系。可用计算状态或数据单元操作表示。

  6. 能实现对程序输入数据的部分求值,包括阶段求值和部分结果输出。

  7. 能用程序数据集的划分(分割)表示程序的控制流区域和执行过程,更关键的是表示程序实现数据操作功能的过程结构。

     


   



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章