程序的並行序型與程序的動態執行

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. 能用程序數據集的劃分(分割)表示程序的控制流區域和執行過程,更關鍵的是表示程序實現數據操作功能的過程結構。

     


   



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