資源的並發、分布式網絡的協作的製作方法
2023-09-20 17:57:40 2
專利名稱:資源的並發、分布式網絡的協作的製作方法
技術領域:
本發明一般涉及網絡化計算機,尤其涉及促使計算資源的並發、分布式網絡的協作的方法。
背景技術:
自然語言是人類說或寫的語言,這與程式語言或機器語言不同。程式語言是可用於定義最終可由計算機處理並執行的一系列指令的任一人工語言。定義什麼是程式語言或什麼不是程式語言是棘手的,但是一般的使用意味著翻譯過程-從使用程式語言表達的原始碼到計算機需要用於工作的機器代碼-通過另一程序,如編譯器來自動進行。自然語言和程式語言都是將信息和指令從一個實體傳遞到另一實體,如人到人或人到機器的系統方法。不幸的是,現有的程式語言不是將信息和指令從人傳遞到機器的完美方式。
例如,在早期的計算時代,彙編語言用於形成低級程式語言。彙編語言使用縮寫或記憶代碼,其中每一語句對應於單個機器指令。隨著因程式設計師與系統硬體和資源的直接交互的高效率的優點的產生,出現了即使向彙編語言作出細微的變化也必須手動更新特殊的組織模式的不合需要的結果。當今,提供了低層機器語言上的抽象級別的高級語言從彙編語言開始發展。高級語言語句一般使用被翻譯成一個以上機器語言指令的關鍵字(通常以英語表示)。高級語言具有對數據結構的內在支持,並定義了一組定義語言的結構的句法和語義規則。當對以高級語言書寫的程序作出細微的改變時,通過遵循一組預定義的句法和語義規則將程序轉換成目標代碼的編譯器要麼在必需時將對象代碼回流(reflow)成與對程序所作出的變化相對應,要麼一如往常地向程式設計師通知明顯的編程錯誤。
程式設計師通過對照已定義的應用編程接口(API)的對應特徵檢查調用API的特徵,調節了編譯器檢測API的調用中的錯誤的能力。API是定義程序將接受來執行期望的任務的輸入種類和程序將在執行期望的任務之後返回的輸出種類的程序界面。API允許程序相互協作以提供比每一程序能單獨提供的更多的功能。
API僅指定必須向API提供什麼,以及將從API返回什麼-並非在該API背後的程序的行為。例如,為正確地協作,必須在調用「工作(do work)」程序之前調用「初始化(initialization)」程序,並且相應地,必須在調用「清除(clean up)」程序之前調用「工作」程序。API不捕捉這一排序的概念,或者表示程序應當如何協作的任何其它概念。作為結果,如同維護近年來的彙編語言的費力任務一樣,程式設計師必須再次通過在現有高級語言的可表達性的局限內以確保程序正確地協作,這是勉為其難的任務。
隨著作為位於通過網際網路互連的任意數量的計算裝置上的基本程序的web服務的大量增加,上述問題進一步惡化。儘管可採取-儘管是費力地-單個計算裝置內的程序的協作的規範和費力的核實,然而核實與多個web服務的協作關聯的錯綜複雜的動作的任務(從多個計算裝置發送多個消息)是一個無法克服的問題,因為它缺乏現有高級語言的可表達性。需要一種能夠表達程序或服務的協作維度,如排序和定時等的程式語言,使得這類協作維度可被編程地核實。
一個部分的解決方案是使用π演算,它是一種用於描述諸如圖1所示的系統100等交互式、並發系統中的進程的數學語言。系統100包括客戶機102,它是訪問由區域網或諸如網際網路104等廣域網上諸如伺服器106等另一計算機提供的共享網絡資源的計算機。若干web服務108、116作為程序靜態地儲存在客戶機102和伺服器106上。
早期的作業系統允許用戶在一個時刻只能運行一個程序。用戶運行程序、等候它完成、然後運行另一個。現代的作業系統允許用戶在一個時刻執行(運行)一個以上程序,或者甚至在同一時刻執行同一程序的多個副本。線程是由作業系統用於向程序分配處理器時間的基本單元。線程可包括編程代碼的任何部分,包括當前由另一線程執行的部分。處理器在一個時刻只能夠執行一個線程。然而,多任務作業系統,即允許用戶運行多個程序的作業系統看似在同一時刻執行多個程序。實際上,多任務作業系統頻繁地在程序之間切換,執行一個程序的線程,然後執行另一程序的線程等。當每一線程完成其子任務時,給予處理器另一線程來執行。處理器的異常速度提供了所有線程在同一時刻執行的假象。
儘管術語多任務和多處理有時交替使用,然而它們有不同的意義。多處理需要多個處理器。如果機器僅具有一個處理器,則作業系統可以是多任務的,但不是多處理的。如果單個機器具有多個處理器,或者有多個機器(客戶機102和伺服器106),其每一個都有一個處理器,則單個機器的作業系統或多個機器的作業系統既可以是多任務的也可以是多處理的。具有多個處理器的單個機器和每一個都具有一個處理器的多個機器都定義了一種並發系統。這是π演算的感興趣的目的。
π演算的核心包括獨立的系統、通過連結(如連結124)進行通信的並行進程(如,web服務108、116)。連結可以是以下的任一種作為遠程過程調用的API;可被創建、傳遞並移除的超文本連結;以及面向對象系統中作為方法調用的自變量傳遞的對象引用(如,「rose(玫瑰)」)。一個進程與另一進程進行通信的概率取決於它對各種不同連結的知識。可限制連結使得僅某些進程可在其上進行通信。將π演算與其它過程語言分離的是限制的範圍(可使用連結的上下文)會在執行過程中改變。例如,當web服務116將諸如先前僅對web服務116已知的API等限制名字作為消息發送到處於該限制的範圍之外的web服務108時,擴展了該範圍(或在π演算的習慣用語中稱為延伸(extrude))。這意味著擴大了該API的範圍以包含接受該API的web服務108。換言之,web服務108現在能調用由該API表示的功能,而在之前web服務108沒有該API的任何知識,因而也無法調用該API。這一過程允許進程的通信概率在π演算的框架內隨時間變化。進程可通過範圍延伸來學習新連結的名字。由此,連結是用於增強通信的可轉移量。
對π演算的中心的、基礎的和不變的是其在諸如「rose」等名字上的高度集中,以及將名字作為消息通過連結來傳遞。具體地,π演算很大程度上著重於純名(purename),其每一個被定義成僅一個比特模式。純名的一個示例是128位的空間GUID(全局唯一標識符),它唯一地標識了COM組件模型內的接口或實現。純名的另一示例是函數特徵或如上所述的API。對於另外的重點,考慮這方面的上述問題假定有三個API(「初始化」、「工作」和「清除」)從web服務116發送到web服務108,但是web服務116必須僅以特定的順序(如,「初始化」,然後「工作」,然後「清除」)調用這三個API。儘管現有的π演算及其變異允許這三個API通過連結124從web服務116發送來到達web服務108,然而現有的π演算及其變異缺乏一種web服務116用來向web服務108解釋調用這三個API的特定順序的方式。在此意義上,現有π演算及其變異無法完整地表示程序或服務的協作維度,如排序和定時等,使得這類協作維度能夠被程序上核實。
一個伊莉莎白時代的詩人簡潔地提供了這一格言,它在形式上是隱喻性的,但包含了永恆的觀察「名字是什麼?名字就是當我們用其它名字來稱呼玫瑰時也將聞上去是芳香的。」這一很久以前作出的觀察精確地指出了π演算及其變異的一個存在的問題-不允許結構化數據在命名的連結(如連結124)上傳遞。事實上,π演算不情願地將結構化數據稱為「非純名」,這是一種負面的語言結構。當憎惡不純時期望純度。由此,π演算上下文中的非純名是具有某種可識別結構的數據,如可擴充標記語言(XML)文檔。實際上,一個進程向另一進程傳遞結構數據是有用的(有時是必需的)。
沒有數據流,很難方便進程之間的通信-除非以一種十分間接的方式-以表示進程之間的移動性或動態性。為解決這一問題,計算機科學家調查了允許進程通過連結在通信中流動的可能性。例如,進程110可向進程118發送表示第三進程(未示出)的消息。這被稱為更高階π演算。由於π演算用於處理純名的嚴格性,取代通過連結發送進程,甚高階π演算變異發送向期望的進程給予訪問的名字,而非發送該進程本身。
發送名字而非進程,可被比作通過引用來傳遞的傳統編程技術,即,從調用例程向被調用例程傳遞參數的地址,被調用例程使用該地址來檢索或修改該參數的值。在更高階π演算變異中採用通過引用技術來傳遞的技術的主要問題是該技術可抑制並發系統變為分布式的能力。有多種π演算的實現,即PICT、Nomadic(游離)PICT、TyCO、OZ和Join(聯合)等等。然而,這些其它的實現要麼不是分布式的(PICT),要麼不是π演算的更高階形式(Nomadic PICT、TyCo、Oz和Join)。
由此,需要一種允許在並發、分布式計算網絡中的進程進行交互,而避免或減少上述與現有π演算及其變異相關聯的其它問題的更好的方法和系統。
發明內容
依照本發明,提供了一種用於處理以基於進程的語言書寫的程序的系統、方法和計算機可讀媒質。本發明的系統形式包括用於儲存程序的計算機可讀裝置。該程序包括以基於進程的語言書寫的用於將基於協議的應用程式表示為進程的表達式。該系統也包括用於執行該程序中的表達式的進程內核。該表達式通過允許以可定製、基於標籤的語言書寫的數據的命名組織模式作為進程在進程之間交換,指定了進程的交互。數據的命名組織模式被綁定到發送和接收該數據的命名組織模式的進程的範圍。
依照本發明的另外的方面,本發明的方法形式可在計算機系統中實現。該方法包括當執行以基於進程的語言書寫的程序中的進程表達式時,將基於協議的應用程式表示為進程。該方法還包括當執行查詢表達式時,將以可定製、基於標籤的語言書寫的數據的命名組織形式表示為進程。當發送或接收作為來自或到隊列的查詢的數據的命名組織模式時,該方法促使進程進行通信。數據的命名組織模式被綁定到發送或接收數據的命名組織模式的進程的範圍。
依照本發明的另外的方面,本發明的另一系統形式包括用於定義查詢,並用於支配以基於進程的語言書寫的程序中的查詢以及隊列之間的交互的查詢虛擬機器。該系統也包括用於定義進程並用於支配程序中的進程、包括基於協議的應用程式的進程之間的交互的進程虛擬機器。該系統還包括用於定義查詢、隊列和進程之間的有效交互,並還用於通過將查詢解釋為進程來支配查詢、隊列和進程之間的交互的反應虛擬機器。
依照本發明,提供了一種用於處理以基於進程的語言書寫的程序的方法和計算機可讀媒質。依照本發明,本發明的方法形式包括對表達式進行句法分析以獲取表示隊列、一組隊列定界符、查詢、序列定界符和其它行動之間的句法元素。該方法將表達式翻譯為一進程,其第一行動是將查詢作為另一進程提交給隊列,並在其後進程以其它行動繼續。查詢包括從包含數據並描述數據的可定製、基於標籤的語言形成的組織模式。
依照本發明的一個方面,提供了一種用於執行支配以基於進程的語言書寫的表達式的結構等效性的一組等式定律的本發明的方法形式。該方法對第一表達式進行句法分析。第一表達式描述,查詢正在與另一進程並行地執行。查詢具有為空的頭部以及包含要綁定到第二名字的第一名字的正文。該方法將第一表達式翻譯為與第二表達式在結構上等效。第二表達式描述,如果該查詢是正則的形式,則該查詢與進程並行地執行。進程中的第一名字的每一出現可用第二名字來替換。
依照本發明,提供了一種用於處理以基於進程的語言書寫的程序的方法和計算機可讀媒質。提供了一種用於執行支配以基於進程的語言書寫的表達式的意義的一組可操作語義規則的本發明的方法形式。該方法包括對第一表達式進行句法分析。第一表達式描述進程是兩個進程的選擇。這兩個進程的第一進程表示向隊列提交了第一查詢,其後第一進程以第一組行動繼續。這兩個進程的第二進程表示向隊列提交了第二查詢,其後第二進程以第二組行動繼續。該方法還包括將第一表達式簡化成第二表達式。第二表達式描述了向隊列提交了第三查詢,其後如果第三查詢是正則的形式,則第一進程與第二進程並行地運行。
依照本發明的另外的方面,提供了用於執行支配以基於進程的語言書寫的表達式的意義的可操作語義規則組的另一種方法。該方法對第一表達式進行句法分析。第一表達式描述,其第一行動正在向隊列提交查詢的第一進程,並且其後第一進程以第二進程繼續。該方法還包括將第一表達式簡化成第二表達式。第二表達式描述,如果第一查詢是正則的形式,則提升的查詢與第二進程並行地運行。
當結合附圖閱讀以下詳細描述時,可以更容易並更好地理解本發明的上述方面和許多附加的優點,附圖中圖1所示是使用π演算用於在兩個web服務之間的連結上傳遞諸如API等名字的常規、並發系統的框圖。
圖2所示是一個示例性計算裝置的框圖。
圖3A-3C所示是依照本發明形成的示例性並發、分布式系統的框圖,用於在多個進程之間傳遞結構化消息。
圖4所示是一個示例性程式語言的主要句法類別的框圖,該程式語言是可用於定義最終可由計算資源的並發、分布式網絡中的示例性計算裝置處理並執行的一系列指令的人工語言。
圖5是詳細地示出了依照本發明形成的一個示例性隊列的框圖,用於將進程作為用於在兩個進程之間傳遞的消息儲存。
圖6A-6B所示是用於確定依照本發明形成的兩個程序文檔之間的結構等效性的技術的框圖。
圖7A-7B所示是用於融合兩個隊列以增強依照本發明形成的並發、分布式系統中的兩個進程之間的通信的技術的框圖。
圖8所示是依照本發明形成的一個示例性系統,用於融合兩個隊列以增強依照本發明形成的並發、分布式系統中的進程之間的通信。
圖9A-9B所示是用於簡化兩個資料庫形式的示例性系統的框圖,用於允許兩個單獨的進程在依照本發明形成的並發、分布式系統中進行通信。
圖10A-10C所示是依照本發明形成的一個示例性系統的框圖,用於發現可由依照本發明形成的並發、分布式系統中的進程用於訪問多個資料庫的名字。
圖11A-11V所示是依照本發明形成的一個示例性方法的方法圖,用於通過編譯器編譯程序或通過進程內核執行進程。
具體實施例方式
圖2示出了用於實踐本發明的某些方面,如處理依照本發明生成的查詢、隊列和進程,和/或執行後文描述的進程內核的合適的計算系統的一個示例。計算系統環境200僅為合適的計算環境的一個示例,並非建議對本發明的使用或功能的範圍的局限。也不應將計算環境200解釋為對示例性操作環境200中示出的任一組件或其組合具有依賴或需求。
本發明可以使用眾多其它通用或專用計算系統環境或配置來操作。適合使用本發明的眾所周知的計算系統、環境和/或配置包括但不限於個人計算機、伺服器計算機、手持式或膝上設備、多處理器系統、基於微處理器的系統、機頂盒、可編程消費者電子設備、網絡PC、小型機、大型機、包括任一上述系統或設備的分布式計算環境等等。
本發明將在諸如由計算機執行的程序模塊等計算機可執行指令的一般上下文環境中描述。一般而言,程序模塊包括例程、程序、對象、組件、數據結構等等,執行特定的任務或實現特定的抽象數據類型。
本發明也可以在分布式計算環境中實踐,其中,任務由通過通信網絡連接的遠程處理設備來執行。在分布式計算環境中,程序模塊可以位於本地和遠程計算機存儲媒質中,包括存儲器存儲設備。
圖2所示的計算系統環境包括以計算機210形式的通用計算裝置。計算機210的組件包括但不限於,處理單元220、系統存儲器230以及將包括系統存儲器的各類系統組件耦合至處理單元220的系統總線221。系統總線221可以是若干種總線結構類型的任一種,包括存儲器總線或存儲器控制器、外圍總線以及使用各類總線結構的局部總線。作為示例而非局限,這類結構包括工業標準體系結構(ISA)總線、微通道體系結構(MCA)總線、增強ISA(EISA)總線、視頻電子技術標準協會(VESA)局部總線以及外圍部件互連(PCI)總線,也稱為Mezzanine總線。
計算機210通常包括各種計算機可讀媒質。計算機可讀媒質可以是可由計算機110訪問的任一可用媒質,包括易失和非易失媒質、可移動和不可移動媒質。作為示例而非局限,計算機可讀媒質包括計算機存儲媒質和通信媒質。計算機存儲媒質包括以用於儲存諸如計算機可讀指令、數據結構、程序模塊或其它數據等信息的任一方法或技術實現的易失和非易失,可移動和不可移動媒質。計算機存儲媒質包括但不限於,RAM、ROM、EEPROM、快閃記憶體或其它存儲器技術、CD-ROM、數字多功能盤(DVD)或其它光碟存儲、磁盒、磁帶、磁碟存儲或其它磁存儲設備、或可以用來儲存所期望的信息並可由計算機110訪問的任一其它媒質。通信媒質通常在諸如載波或其它傳輸機制的已調製數據信號中包含計算機可讀指令、數據結構、程序模塊或其它數據,並包括任一信息傳送媒質。術語「已調製數據信號」指以對信號中的信息進行編碼的方式設置或改變其一個或多個特徵的信號。作為示例而非局限,通信媒質包括有線媒質,如有線網絡或直接連線連接,以及無線媒質,如聲學、RF、紅外和其它無線媒質。上述任一的組合也應當包括在計算機可讀媒質的範圍之內。
系統存儲器230包括以易失和/或非易失存儲器形式的計算機存儲媒質,如只讀存儲器(ROM)231和隨機存取存儲器(RAM)232。基本輸入/輸出系統233(BIOS)包括如在啟動時幫助在計算機210內的元件之間傳輸信息的基本例程,通常儲存在ROM 231中。RAM 232通常包含處理單元220立即可訪問或者當前正在操作的數據和/或程序模塊。作為示例而非局限,圖2示出了作業系統234、應用程式235、其它程序模塊236和程序數據237。
計算機210也可包括其它可移動/不可移動、易失/非易失計算機存儲媒質。僅作示例,圖2示出了對不可移動、非易失磁媒質進行讀寫的硬碟驅動器241、對可移動、非易失磁碟252進行讀寫的磁碟驅動器251以及對可移動、非易失光碟256,如CD ROM或其它光媒質進行讀寫的光碟驅動器255。可以在示例性操作環境中使用的其它可移動/不可移動、易失/非易失計算機存儲媒質包括但不限於,磁帶盒、快閃記憶體卡、數字多功能盤、數字視頻帶、固態RAM、固態ROM等等。硬碟驅動器241通常通過不可移動存儲器接口,如接口240連接到系統總線221,磁碟驅動器251和光碟驅動器255通常通過可移動存儲器接口,如接口250連接到系統總線221。
圖2討論並示出的驅動器及其關聯的計算機存儲媒質為計算機210提供了計算機可讀指令、數據結構、程序模塊和其它數據的存儲。例如,在圖2中,示出硬碟驅動器241儲存作業系統244、應用程式245、其它程序模塊246和程序數據247。注意,這些組件可以與作業系統234、應用程式235、其它程序模塊236和程序數據237相同,也可以與它們不同。這裡對作業系統244、應用程式245、其它程序模塊246和程序數據247給予不同的標號來說明至少它們是不同的副本。用戶可以通過輸入設備,如鍵盤262和定位設備261,後者通常指滑鼠、跟蹤球或觸摸板,向計算機110輸入命令和信息。其它輸入設備(未示出)可包括麥克風、操縱杆、遊戲墊、圓盤式衛星天線、掃描儀等等。這些和其它輸入設備通常通過耦合至系統總線的用戶輸入接口260連接至處理單元220,但是也可以通過其它接口和總線結構連接,如並行埠、遊戲埠或通用串行總線(USB)。監視器291或其它類型的顯示設備也通過接口,如視頻接口290連接至系統總線221。除監視器之外,計算機也包括其它外圍輸出設備,如揚聲器297和印表機296,通過輸入/輸出外圍接口295連接。
計算機210可以在使用到一個或多個遠程計算機,如遠程計算機280的邏輯連接的網絡化環境中操作。遠程計算機280可以是個人計算機、伺服器、路由器、網絡PC、對等設備或其它公用網絡節點,並通常包括許多或所有上述與計算機210相關的元件,儘管在圖2中僅示出了存儲器存儲設備281。圖2描述的邏輯連接包括區域網(LAN)271和廣域網(WAN)273,但也可包括其它網絡。這類網絡環境常見於辦公室、企業範圍計算機網絡、內聯網以及網際網路。
當在LAN網絡環境中使用時,計算機210通過網絡接口或適配器270連接至LAN 271。當在WAN網絡環境中使用時,計算機210通常包括數據機272或其它裝置,用於通過WAN 273,如網際網路建立通信。數據機272可以是內置或外置的,通過輸入/輸出接口295或其它合適的機制連接至系統總線221。在網絡化環境中,描述的與計算機210相關的程序模塊或其部分可儲存在遠程存儲器存儲設備中。作為示例而非局限,圖2示出了遠程應用程式285駐留在存儲器設備281上。可以理解,示出的網絡連接僅是示例性的,也可以使用在計算機之間建立通信鏈路的其它裝置。
圖3A示出了系統300,它是可一起工作以執行一個或多個計算任務的組成元件的集合。一個示例是硬體系統344,它可包括若干計算設備,如個人數字助理302、蜂窩電話334和臺式機336,它們的每一個都包括一微處理器、其集成的晶片和電路、輸入和輸出設備以及外圍設備(未示出)。為便於說明,隨後的附圖中唯一示出的計算設備是個人數字助理(PDA)。
系統300包括作業系統342,它包括一組程序和數據文件,如作業系統內核303A、一個或多個設備驅動程序303B以及進程內核302C。在下層耦合至作業系統342的是硬體抽象層301。硬體抽象層301是由程式設計師用於訪問硬體系統344的設備(如計算設備302、蜂窩電話334和臺式機336)的應用編程接口。作業系統內核303A是作業系統342的核心,它被設計成(通過硬體抽象層301)管理存儲器、文件和外圍設備;維護時間和日期;裝入應用程式,如web服務302A;以及分配系統資源。設備驅動程序303B是準許web服務302A與諸如計算設備302等設備進行通信的單獨的組件。進程內核302C將web服務302A表示為進程302B、管理進程302B並方便進程302B與其它進程的通信(下文描述)。作業系統內核303A、設備驅動程序303B以及進程內核303C駐留在作業系統342的內核模式部分中,而web服務302A和進程302B駐留在作業系統342的用戶模式部分346中。可選地,當在下層耦合至諸如COM(組件對象模型)等其它系統軟體組件305、307(圖3B)時,進程內核303C可駐留在用戶模式部分346中。
依照本發明使用的術語「進程」指具有通過執行行動來進展的能力或允許其它進程進展的一個或多個計算實體的動態表示。換言之,術語「進程」表示計算實體的二元性特性的其中之一。當計算實體休眠時,它可被檢查,如通過察看程序。當計算實體移動時(作為進程),它不能被看見,但是其行為可由依照本發明形成的程式語言400來解釋並核實(下文描述)。
web服務302A被設計成專用於某一服務。為獲取更多的功能,web服務302A可利用那些能提供不在web服務302A的範圍之內的服務的其它web服務的幫助。為追蹤到其它web服務,web服務302A可與目錄框架326進行通信。目錄框架326是與平臺不相關的軟體片段(目錄框架),它提供一種查找並註冊網際網路上的web服務的方式。目錄框架326包括包含多個已註冊web服務,並包括關於這些web服務的詳細技術信息的存儲330。目錄框架326的發現組件328擔當進程302B和存儲330之間的代理程序(broker),以查找期望的web服務。
一旦目錄框架326找到web服務302A所請求的合適的服務,則web服務302A可開始與發現的web服務進行交互以完成期望的任務。圖3B示出了一個已發現的web服務304A。進程內核304C將web服務304A表示為進程304B,它通過諸如隊列310等通信手段與進程302B進行交互以完成web服務302A、304A的任務。
通過其通信的進程的隊列210可採取各種形式,如資料庫、通道或其它合適的結構化存儲。由於計算設備302、304可位於彼此遠離的地理位置上,因此進程302B、304B無法通過共享存儲器進行通信。諸如隊列310等合適的通信手段包括使進程302B、304B在不同時刻運行時能夠跨越暫時離線的異構網絡和系統進行通信的技術。進程302B、304B向通信裝置發送消息,並從通信裝置讀取消息。通信裝置可提供保證的消息傳送、有效的路由、安全性和基於優先級的消息通信。另外,通信裝置可用於對需要高性能的異步和同步情況實現解決方案。如上所述,合適的通信裝置的具體示例包括通道、隊列或資料庫以及其它結構化存儲等等。當隊列310-316是資料庫時,它們是由記錄組成的文件,它們的每一個都包含欄位以及用於搜索、排序、重組和其它處理功能的一組操作,它們被組織成多個表,每一個都是具有行和列特徵的數據結構,由數據佔有或潛在地佔有由行-列交叉點形成的每一單元。
進程內核302C、304C的內部體系結構包括進程虛擬機器302C1、304C1,包含用於定義進程並用於支配進程之間的交互的軟體組件;查詢虛擬機器302C3、304C3,包含用於定義查詢並用於支配查詢和隊列之間的交互的軟體組件;反應虛擬機器302C2、304C2,包含用於支配查詢、隊列和進程之間的交互的軟體組件;以及過渡虛擬機器302C4、304C4,包含用於將進程內核302C、304C從計算設備302、304上的系統軟體組件305、307(如COM和作業系統等等)的細節隔離的軟體組件。
計算設備302、304通過區域網、廣域網或無線網絡338進行交互、通信和交換信息。進程302B、304B通過隊列310進行通信以交換消息,如消息318。與實現π演算及其變異的現有系統不同,依照本發明形成的系統300允許諸如消息318等消息在進程302B、304B之間交換時由進程內核302C、304C表示為進程。這允許程序或web服務的協作維度,如API的調用排序等在進程302B、304B之間表達。
圖3C示出系統300為非集中式網絡,它包括多個計算設備302、304、306、308,它們可彼此通信,並可對用戶看似為共享的硬體、軟體和數據的單個、大型、可訪問「倉庫」。在計算機科學家的習慣用語中,系統300是一分布式系統,這在概念上與集中式或單片系統相反,其中,不智能的客戶機連接到諸如大型機等單個、智能集中式計算機上。系統300是一種動態的網絡拓撲,其中,高度分布式、並發進程302B、304B、306B、308B在計算設備302-308上並行地交互。
進程302B-308B相互協作以相互解釋作為消息或查詢發送到隊列310-314的信息。通過通信裝置發送的信息片段包括執行順序、數據定時、服務質量以及進程302B-308B中組織模式的傳遞,該組織模式從包含數據並以方便數據的解釋或數據上的操作的執行的方式描述數據的可定製、基於標籤的語言形成。儘管一個合適的可定製、基於標籤的語言是可擴充標記語言(XML),本發明不限於該語言。可使用其它可定製、基於標籤的語言。
進程302B-308B之間的協作通信由依照本發明形成的程式語言400(圖4)提供。語言400是π演算的高階變異。換言之,語言400是一種基於進程的語言。更具體地,除下文討論的其它特性之外,語言400能夠程序地檢測「活性(liveness)」。活性是進程在活動的指示。該質量需要被程序地核實以使程序被信任來完成它打算完成的任務。諸如以語言400書寫的web服務302A的程序可被程序地核實其「活性」。其它特性包括分析進程302B-308B的安全性以及資源訪問運行時錯誤的能力。安全問題包括保護計算設備302-308及其數據免遭損害或丟失。安全性,尤其是對諸如系統300等由多人通過多個隊列310、312、314、316訪問的非集中式服務而言的一個主要焦點是防止非授權個體的訪問。以語言400書寫的web服務302A可被核實以檢測由不可信web程序或不可信計算設備引起的安全問題。
語言400的正式數學定義在附錄中給出。語言400包括語法、結構等效性的規則以及可操作語義的規則。語言400的語法是規則的系統,它定義了將查詢和進程的句法元素放在一起以形成容許的編程語句的方式。換言之,除非能夠以語言400的語法正確地表達,否則無法將概念,如API的調用從一個進程傳遞到另一個。一旦正確地形成了表達式,語義規則將表達式與意義相連接。由於進程是動態的,因此語言400使用可操作語義以將意義耦合至進程。換言之,進程通過動作或與其它進程進行交互來進展。可以理解,語言400的表達式的意義直接涉及理解其操作。結構等效性的規則允許語言400的可操作語義被簡化,使一個表達式可以被比作另一表達式。由此,可保持可操作語義的規則的數量較少,因為這些規則可應用到表達式的置換上。
語言400具有若干主要句法類別隊列句法402,它表示隊列、資料庫、通信通道、或允許在不同時刻或同一時刻運行的進程通過消息進行通信的任一結構化存儲;查詢句法404,它表示以數據操縱語言書寫的指令以彙編並反彙編消息、操縱由隊列句法402表示的存儲、並刪除消息模式;和進程句法406,它表示計算實體的一個動態方面,在由隊列句法402表示的結構化存儲上不僅可交換諸如API等名字,而且還可交換諸如消息等進程。隊列句法402、查詢句法404以及進程句法406一起形成了語言400的主要句法元素。語言400的句法元素402-406可單獨使用,或在置換中組合,以表達諸如進程302B-308B等進程之間的協作細微差別。句法規則(參考圖11C-11F和附錄的1.1節詳細描述)、結構等效性規則(下文參考圖11J和附錄的2.1節詳細討論)以及可操作語義規則(下文參考圖11O-11R和附錄的3.1節詳細討論)連同查詢一起放置在查詢虛擬機器302C3、304C3中。句法規則(參考圖11G-11I和附錄的1.2節詳細描述)、結構等效性規則(下文參考圖11K-11N和附錄的2.2節詳細討論)以及可操作語義規則(下文結合圖11S-11V和附錄的3.2節詳細討論)連同進程一起放置在進程虛擬機器302C1、304C1中。反應虛擬機器302C2、304C2包含定義隊列、查詢和進程用語相互反應的方法的可操作語義規則。
程式語言400允許形成表達式,用於描述諸如進程302B-208B等進程,它們並行地運行並通過諸如隊列310-314等通信裝置交互。數學上,如果T和P是進程,則表達式T|P描述進程T、P並行地運行,可能通過通信手段彼此進行通信或與外界進行通信。
隊列310-314由名字(對應地為「X」、「Y」、「Z」和「W」)來表示。程式語言400允許諸如進程318-324等某些類別的進程的傳遞被表達為隊列310-314上的消息。進程318-324包含從一可定製、基於標籤的語言形成的組織模式,該語言包含數據並以方便數據的解釋或數據上操作的執行的方式描述了數據。一個示例性組織模式包括查詢。另一示例性組織模式包括消息。再一示例性組織模式包括XML文檔。
查詢包含數據以及操縱數據的信息。考慮該示例計算設備302表示出版者處的計算機,計算設備304表示書店處的計算機。出版者和書店都能夠獨立地以XML定義關於作者、書名和書本的發行日期的其自己的信息標籤。這一書籍信息可用合適的標籤組織成XML文檔。信息由出版處的計算設備302或書店處的計算設備304交換,將XML文檔變換成隊列,隊列由進程內核302C-308C表示為通過隊列310在進程302B和進程304B之間傳遞的進程,如進程318。
現有的π演算變異不允許諸如XML文檔等結構化信息通過諸如隊列310等通信裝置來傳遞。然而,應用程式的實際執行有時候需要某些結構化信息交換。一個相關的情況包括表達API的調用順序的結構化信息。另一相關情況是上文討論的出版者和書店之間的示例。程式語言400允許多維數據(數據結構)包含在作為在進程302B-308B之間傳遞的消息傳送的進程中,如進程318-324。語言400允許創建環境,以方便在並發且分布式的非集中式網絡中,通過隊列在進程之間交換組織模式(該模式以可定製、基於標籤的語言來表達,它包含數據並以方便數據的解釋或數據上操作的執行的方式描述了數據)。
圖5可視地示出了將隊列310(X)、查詢504、506(Q0,Q1)和進程302B、304B(T,P)相關聯的句法表達式。儲存在隊列310-316中的是一個或多個查詢502,它們是包含結構化數據或沒有明顯結構的名字的進程。為將諸如XML文檔500A等結構化數據文件通過隊列310從進程302B傳遞到進程304B,進程302B將XML文檔500A轉換成查詢500B,然後將查詢500B寫入隊列310。查詢500B由進程內核302C-308C作為進程處理。與現有的π演算的變異不同,程式語言400允許諸如查詢500B等進程通過諸如隊列310等通信裝置傳遞。查詢500B包含一個以上純名,查詢500B也包含XML文檔500A的結構化內容。為獲取查詢500B,進程304B讀隊列310。
程式語言400提供一組查詢操作,用於彙編和反彙編查詢、操縱查詢並刪除查詢中的模式。其它查詢操作用於將消息放入隊列、從隊列中獲取消息並從現有消息構建新消息。查詢包括兩個部分頭部和正文。查詢的頭部定義了一組參數及其對應的類型。正文是一組綁定。通過將其參數綁定到自變量並激活其綁定組來調用查詢。綁定定義了兩個項之間的關係。不是都有的項都可以被綁定在一起。當綁定將某一類型的項綁定到其互補類型的項時,存在有效的綁定。查詢可被比作傳統的過程查詢的頭部類似於過程的籤名;查詢的正文類似於過程的編程語句組;每一綁定是使用儲存在過程的籤名的參數中的數據,或將數據放入過程的籤名的參數中的編程語句。
數學上,隊列310、查詢500B和進程304B之間的關係可依照句法被表達為X[Q0].P,其中,X是隊列310;Q0是查詢500B;P表示進程304B,它是查詢Q0被寫入隊列X之後的延續點。由此,在語言上,數學表達式X[Q0].P描述了將查詢500B存入隊列310中的過程,此後過程繼續執行進程304B。在程式語言400的框架中,Q0和P都是數學符號X[Q0].P中的進程。程式語言400標識了可通過隊列X作為消息傳遞的進程的子集(或某些類別)。該子集包含查詢,其每一個都與諸如包含在XML文檔中的可定製、基於標籤的數據結構相關。
語言400的一個主要方面是用於確定查詢和進程之間的結構等效性的等效法則的集合。用語言400的這些等效法則確定結構等效性的過程擺脫了兩個程序文檔,如兩個程序或兩個軟體規範之間的微小差別,以確定它們是否在每一相關方面都一致。這些結構等效性法則允許語言400的可操作語義如上所述地被簡化。
圖6A示出了以適合該說明的語言書寫的程序602。程序502包括main函數,它是諸如C或C++等某些語言的執行起始點。嵌套在第一組花括號之間的是包含測試條件(A=7)的IF語句。測試條件確定變量A是否等於值7。如果測試條件為真,則執行包含在第二組花括號中的編程語句。在第二組花括號內有兩個編程語句。第一個編程語句調用fork函數,它採用P0作為自變量。在某些語言中,fork函數在父進程開始之後在並發系統中啟動子進程。在這一情況下,子進程由自變量P0表示。在調用fork函數之後,子進程P0與執行程序602的父進程並行地運行。第二個編程語句也包含fork函數的調用,但是並非採用變量P0作為自變量,fork函數的第二個調用採用了變量P1作為自變量。用第二fork函數的調用啟動由自變量P1表示的另一子進程。子進程P0、P1在程序流從第二組花括號的關閉花括號的出口處彼此並行地執行。
另一程序604在許多方面類似於程序602,但是有一些不同。一個差異是程序604的IF語句的測試條件,它包含變量B而非變量A。另一差異是在子進程P0的調用之前用fork函數的第一調用來啟動子進程P1。雖然有這些差異,但是如果兩個IF語句的測試條件都為真,則程序602、604中的邏輯流最終都將到達程序602、604的fork語句。由此,變量A、B的名字中的差異是可忽略的,並且它們不影響程序602、604的邏輯結構。此外,由於子進程P0、P1並行地運行,其調用順序也是可忽略的。
如上所述,程序602可用許多不同的程式語言來書寫,它們的每一個都包含阻礙結構等效性分析的不同且多樣的語法結構。使用語言400,程序602可由除程序602的語法細節之外的性質來表達。例如,程序602的本質是子進程P0、P1並行地執行。該本質可由語言400通過將程序602翻譯成規範602A來表達。進程P0、P1的並行執行在程序602A中被表達為「P0|P1」。語句「P0|P1」在標籤I_DO和其對應的結束標籤/I_DO之間嵌套。
假定進程302B需要一種服務,其中,期望子進程P0與另一子進程P2並行地執行。該需求由語句「P0|P2」捕捉,如以語言400書寫的規範302D中所指示的。語句「P0|P2」位於標籤I_NEED和其對應的結束標籤/I_NEED之間。還假定進程302B包含來自發現組件328的規範602A,以確定程序602是否適合進程302B希望完成的任務。使用結構等效性分析,進程302B可快速地確定程序602A不能提供規範302D指定的請求服務。情況如此是因為程序602並行地執行子進程P0、P1,而進程302B相反需要子進程P0、P2並行地運行。
來自語言400的等效法則組的一個等效法則允許單獨的隊列被無縫地融合,使得在操作中一個隊列可代替另一隊列。這在附錄的2.2節中被稱為替代等效性。如圖7A所示,進程302B使用隊列310(隊列X)來發送和接收消息(或寫和讀查詢)。作為使用隊列310的替代,進程304B與隊列702(隊列X′)進行通信來發送和接收消息(或寫和讀查詢)。假定查詢位於隊列702中,其中,名字X被綁定到名字X′(名字X:=:名字X′),在語言400的習慣用語中,操作符:=:是綁定操作符。這表明隊列310本質上與隊列702融合,因此允許進程302B-304B在同一隊列,如隊列310上操作或通信。見圖7B。使用語言400的等效法則,進程302B、304B可發現一種訪問隊列(或資料庫、或通道等其它結構化存儲)的新方法。
現有π演算的變異的輸入/數據機制(I/O)是非對稱的。考慮以下數學示例UX.P|U(Y).Q,其中,U和U指同一連結,但是U表示該連結正在輸出某些東西,如X,而U表示該連結正在輸入一些東西,如Y;X是輸出數據;Y是輸入數據;P、Q是進程,它們在執行了表達式UX和|U(Y)之後繼續。非對稱性由作為輸出數據的X未綁定到通道U,而作為輸入數據的Y被綁定到通道U的事實引起。術語「綁定」指Y的操作範圍被局限於綁定Y的連結。換言之,在web服務116(U)向web服務108傳遞了要使用其來調用web服務108的API之後,web服務116丟失了其API的知識。非對稱I/O抑制了諸如系統300等分布式網絡拓撲的形成、本發明通過提供對稱I/O克服或減少了上述問題。
圖8示出了依照本發明形成的系統300的對稱I/O方面。假定進程302B被數學地定義為T=X.Y.W.S,其中,T是進程302B;X指正在輸出一些東西時的隊列310;Y指正在輸出一些東西時的隊列312;W指正在輸出一些東西時的隊列316;S指進程306B。還假定進程304B被數學地定義如下P=X.Y.Z.R,其中P是進程304B;X指正在輸入一些東西時的隊列310;Y指正在輸入一些東西時的隊列312;Z指正在輸入一些東西時的隊列314;R指進程308B。假定進程T與進程P並行地執行,即在數學上為T|P。在執行時,過程X.Y.W.S被展開到隊列310(X),過程X.Y.Z.R被展開到隊列310。在這兩個過程X.Y.W.S和X.Y.Z.R在隊列310上反應之後,過程Y.W.S、Y.Z.R被展開到隊列312(Y)。假定在這一點上,在隊列312上,與運行進程並行地發出查詢,將隊列316綁定到314,即數學上為(w:=:Z)。當發出這一查詢時,將隊列316(W)與隊列314(Z)融合。W的任何輸入或輸出將被傳遞到Z,對應地,Z的任何輸入或輸出將被傳遞到W,因此形成了一種分布式網絡拓撲。從通道312,另一分過程W.S被展開到隊列316(W),另一分過程Z.R被展開到隊列314(Z)。從隊列316,進程306B(進程S)被展開為一延續點並被執行。從隊列314,進程308B(進程R)也被展開為另一延續點並被執行。
除句法之外,語言400具有用於描述進程的進展的一組規則。換言之,這些規則定義了語言400的可操作語義。語言400的可操作語義描述了句法元素402-406及其預期意義之間的關係。由此,以語言400書寫的程序語句在句法上是正確的,但是在語義上可能不正確。換言之,以語言400書寫的語句可以是可接受的形式,但是仍傳達錯誤的意義。語言400的可操作語義的一個示例是通信簡化規則,它由圖9A-9B圖示(在反應虛擬機器302C2、304C2中實現)。查詢902A(Q0)準備好被進程302B(T)提交到資料庫904(V)。
為便於討論,示出查詢902A為資料庫表單。表單包含數據,以及當由資料庫904計算數據時可能被填充的「洞」。例如,查詢可以被比作具有要答覆的問題的信息的問題。由此,信息是表單中的數據,答覆是填充表單中的洞的數據。作為另一示例,表單可被比作,如果有足夠的信息可用則可在代數上獲得解的線性聯立方程。在向資料庫904提交了查詢902A之後,該過程隨著進程306B(S)的執行而繼續。數學上,向資料庫904提交表單902A並在進程306B繼續的過程可被描述如下V[Q0].S,其中,V表示資料庫904,Q0表示表單902A,S表示進程306B。
假定並非向資料庫904提交表單902A並在進程306B處繼續,而是由過程向資料庫904提交表單902C並之後在進程308B處繼續。數學上,這可被描述如下V[Q1].R,其中,V表示資料庫904,Q1表示表單902C,T表示進程308B。
在執行過程V[Q0].S和執行過程V[Q1].R之間的選擇的面前,這一選擇可被簡化成向資料庫904提交表單906A(Q),並之後進程306B、308B都將並行運行。見圖9B。數學上,這一結果被表達為V[Q].(S|R)。表單906A的形成由以使查詢906A以正則形式(下文描述)的方式聯合表單902A、904A引起。儘管之前在兩個替換方案(V[Q0].X或V[Q1].R)之間只能作出一個選擇,然而採用從兩個單獨且相異的表單902A、902C形成查詢906A,可向資料庫904提供單個表單906A,並且進程306B和308B都變為活躍且並行地執行。理解這一概念的一種方法是將表單902A比作具有三項的第一線性聯立方程,將表單902C比作具有三項的第二線性聯立方程。根據線性代數,可總結出,還沒有對兩個線性聯立方程的解,但是可將這這兩個線性聯立方程計算成一種形式,使得當給予額外的數據時(另一線性聯立方程),所有的項都得到解。表單906A表示兩個表單902A、902C的計算,在沒有更多數據的情況下對其無法作出進一步的計算。
圖10A-10C圖示出了用於進程的進展的另一可操作語義規則-提升規則(參考圖11U和附錄的3.2節更詳細討論)。如圖10A所示,進程302B單獨與資料庫1006、904進行通信來發送並接受消息(或查詢)。資料庫1006被命名為「U」,資料庫904被命名為「V」。假定進程306B向資料庫904提交查詢1002A,它包含表達名字「U」和名字「V」之間的關係的綁定。當提交查詢1002A時,進程302B將認識到名字「U」、「V」指同一資料庫。換言之,由進程302B在資料庫1006存入的消息將被轉發到資料庫904,並且對應地,由進程302B在資料庫904存入的消息將被轉發到資料庫1006。在進程302B可從查詢1002A解釋名字「U」、「V」指同一資料庫,或有兩個單獨的資料庫將彼此轉發由進程302B發送的消息之前,必須滿足某些條件(後文參考圖11U詳細討論)。
10C中示出了系統1010,示出多個計算設備在多個地理區域上分散。進程302B在舊金山地理區域1012中的計算設備302上執行。進程304B在西雅圖地理區域1016中的計算設備304上執行,進程308B在波特蘭地理區域1014的計算設備308上執行。進程302獲得進程304B的幫助來執行某些任務。由於對進程302B未知,進程304B無法完成進程302B指定的所有任務。由此,進程304B訂約了進程308B的幫助來執行進程304B範圍之外的任務。當向資料庫1006發出諸如查詢1002A等查詢時,諸如消息1020等從進程302B到資料庫1006的消息將被自動轉發到資料庫904,使得進程308B可執行需要的任務。可選地,進程302B可直接與資料庫904進行通信以交換消息。然而,進程302B不必如此,並可繼續與資料庫1006進行通信。
圖11A-11V示出了用於由諸如進程內核302C等進程內核編譯或執行,如web服務302A(後文稱為「程序302A」)的程序的方法1100。程序302A以語言400書寫。在對程序的分析中,方法1100將執行支配查詢表達式和進程表達式的結構和內容的一組句法規則。支配查詢表達式和進程表達式的結構等效性的等效法則組也由進程內核302C執行。語言400也包括支配依照語言400的句法規則組正確形成的查詢表達式和進程表達式的意義的可操作語義規則組。這些可操作語義規則組由進程內核302C執行。為清晰目的,以下方法1100的描述參考結合圖3A-3C所示的系統300中所示的各種元素。
從開始塊,方法1100前進到在延續終端(「終端A」)和退出終端(「終端B」)之間定義的一組方法步驟1102。該組方法步驟1102對照支配根據隊列句法402形成的查詢語句的結構和內容的句法規則來運行程序。從終端A(圖11C),方法1100前進到塊1114,進程內核302C從程序302A獲取查詢表達式(Q)。下一步,在判別塊1116,進程內核302C判斷,查詢表達式Q是否具有句法形式T*(C*)。
以語言400書寫的每一查詢具有句法形式T*(C*),其中,句法元素T*表示查詢的頭部,句法元素(C*)表示查詢的正文。以語言400書寫的每一查詢具有頭部和正文。頭部聲明參數的數量及其相應的類型。正文包含一組綁定。查詢可被比作傳統的編程過程,其中,查詢是具有關聯的常量、數據類型和變量的語句的命名序列(儘管可使用語言400來表達非命名查詢),它通常執行單個任務。例如,查詢的頭部類似於過程的籤名,而查詢的正文類似於過程內包含的語句的序列。頭部定界符中包含的是符號T*,它表示零個或多個查詢項(下文定義)。正文定界符中包含的是符號C*,它表示零個或多個約束(下文描述)。
如果對判別塊1116的測試的答覆是「否」,它意味著查詢Q未以可由語言400識別的句法形式書寫,則方法1100完成執行並終止。如果答覆是「是」,則方法1100前進到另一判別塊1118,進程內核302C確定查詢正文中的每一約束C是否具有句法形式T:=:T,其中,如上文描述並在下文進一步描述的T是查詢項,符號:=:表示定義兩個查詢項之間的關係的綁定。如果答覆是「否」,它意味著查詢正文的一個約束未以語言400可接受的形式書寫,則方法1100完成執行並終止。否則,判別塊1118的答覆是「是」,方法前進到另一判別塊1120。
在判別塊1120,進程內核302C確定查詢項T是否為文字(後文稱為「頂部」)。文字是在程序中使用的值,它被表達為其本身而非變量或表達式的結果。文字的示例包括數字「25」和「32.1」、字符「a」、串「Hello」以及布爾值「TRUE」。如果判別塊1120的答覆是「是」,則方法1110前進到另一延續終端(「終端A5」)。從終端A5,方法1100前進到判別塊1146,進程內核302C確定是否有另一查詢表達式需要分析。如果答覆是「否」,則方法1100前進到另一延續終端(「終端B」)。否則,判別塊1146的答覆是「是」,方法1100循環返回到塊1114來從程序302A獲取另一查詢表達式用於分析。
在判別塊1120,如果答覆是「否」,則方法1100前進到另一判別塊1122,進程內核302C確定查詢項T是否為互補文字(後文稱為「底部」)。互補文字是文字的反意。如果判別塊1122的答覆是「是」,則方法1100前進到終端A5(上文描述)。如果相反,判別塊1122的答覆是「否」,則方法1100前進到另一判別塊1124。此處,進程內核302C確定查詢項T是否為放棄(discarder)(由符號「_」定界)。放棄是僅包含輸入參數而不提供輸出參數的查詢。如果判別塊1124的答覆是「是」,則方法1100前進到上述終端A5。在判別塊1124,如果答覆是「否」,則方法1100前進到另一延續終端(「終端A1」)。
從終端A1(圖11D),如果答覆是「否」,則方法1100前進到判別塊1126,進程內核302C核實查詢項T是否為名字(或文字串,如「hello」)。較佳地,字母在句法上由語言400處理為變量,它是能夠包含在程序執行過程中能被修改的數據的命名存儲位置。如果在語言400中「名字」在字母前面,則由語言400將字母處理為文字串而非變量。如果判別塊1126的答覆是「是」,則方法1100前進到終端A5(上文描述)。在判別塊1126,如果答覆是「否」,則方法1100前進到另一判別塊1128,進程內核302C確定查詢項T是否為變量(如X)。如果答覆是「是」,則方法1100前進到終端A5(上文描述)。
在判別塊1128,如果答覆是「否」,則方法前進到判別塊1159,進程內核302C確定查詢項T是否為具有形式「X^」的局部變量。形式X^包含項X,它表示以語言400書寫的程序中的變量;脫字符號是通常在小型計算機鍵盤的頂行「6」鍵上方的指向上方的小符號(^),它表示變量X是局部變量(在計算機科學的習慣用語中,局部變量指其範圍限於給定的代碼塊,通常為子例程的變量,但是在本發明中,局部變量的範圍限於一個進程);項X^表示進程中局部變量X的創建,它能夠導出在延續進程中使用的信息。如果判別塊1159的答覆是「是」,則方法1100前進到終端A5(上文描述)。
在判別塊1159,如果答覆是「否」,則方法前進到判別塊1157,進程內核302C確定查詢項T是否為具有形式「^X」的局部變量。形式^X包含項X,它表示一個變量;項^是脫字符號;項^X表示進程中能夠從進程所進展的計算環境中導入信息(要被使用)的局部變量X。如果判別塊1157的答覆是「是」,則方法1100前進到終端A5(上文描述)。否則,判別是「否」,方法1100前進到另一延續終端(「終端A2」)。
從終端A2,方法流前進到判別塊1130,進程內核302C檢查查詢項T是否為倒置(由~符號定界)。如果判別是「是」,則方法流前進到終端A5(上文描述)。否則,判別是「否」,方法1100進入判別塊1132。在判別塊1132,進程內核302C確定查詢項T是否為元組,它是一組排序的元素。語言400中有兩個符號用於表示元組句法符號「★」和句法符號「#」。如果判別塊1132的答覆是「是」,則方法流前進到終端A5(上文描述)。否則,如果判別是「否」,則方法1100前進到判別塊1134。此處,進程內核302C檢查查詢項T是否為X*(Q,Q)的形式,其中X*表示一個或多個變量,Q表示查詢。由此,進程表達式X*(Q,Q)表示查詢的頭部的零個或多個變量,以及該查詢正文中由逗號分隔的兩個其它的查詢。如果在判別塊1134判別是「是」,則方法流前進到終端A5(上文描述)。如果判別是「否」,則方法1100前進到判別塊1136。此處,進程內核302C檢查查詢項T是否為左注入的(left injection)(INR(X))。傳統地,左注入操作符「inl」用於表明兩個集合的並中元素的來源。例如,假定集合A與集合B相加(表示為A+B)。實際上,集合A+B的每一元素以標籤inl來標記,以表明元素起源於集合A(這是可見的,因為字母A在集合A+B的左側)。在本發明中,構造函數inl較佳地用於表明在查詢表達式X*(Q,Q)的正文的左側Q上的操作(下文描述)。如果判別塊1136的答覆是「是」,則方法流前進到終端A5(上文描述)。否則,方法1100進入另一延續終端(「終端A3」)。
從終端A3,方法1100前進到判別塊1138,進程內核302C確定查詢項T是否為右注入的(right injection)(INR(X))。如上文簡要描述的,在X*(Q,Q)形式的查詢面前,左注入構造函數(INL(X))允許變量X綁定到約束QL,右注入構造函數(INR(X))允許變量X綁定到約束QR。如果判別塊1138的答覆是「是」,則方法1100前進到終端A5(如上述)。否則,方法流前進到判別塊1140,進程內核302C確定查詢項T是否為X*(Q)的形式。如果判別塊1140的答覆是「是」,則方法1100前進到終端A5。否則,方法流進入另一判別塊1142。此處,進程內核302C確定查詢項T是否為?T的形式。見判別塊1142。操作符「?」可被認為是將項T綁定到包含在查詢X*)(Q)的正文內的查詢Q的頭部中的第一項的讀操作符。如果判別塊1142的答覆是「是」,則方法流前進到終端A5(上文描述)。如果答覆是「否」,則方法確定查詢項T是否為複製操作(如,「T@T」)。如果判別塊1144的答覆是「是」,則方法1100進入終端A5(上文描述)。如果相反,答覆是「否」,它意味著查詢Q未以可由語言400識別的句法形式書寫,方法1100完成執行並終止。
從終端B(如11A),方法1100前進到在延續終端(「終端C」)和退出終端(「終端D」)之間定義的一組處理步驟。該組處理步驟1104對照支配進程語句的結構和內容的句法來運行程序302A。從終端C(圖11G),進程內核302C從程序302A獲取進程表達式(∏)。見塊1148。下一步,在判別塊1150,進程內核302C確定進程表達式∏是否為「0」,它指示進程停止或進程的不活動。如果答覆是「是」,則方法流前進到另一延續終端(「終端C3」)。否則,方法流前進到另一判別塊1152。進程內核302C判斷進程表達式∏是否具有X[Q].P的形式,其中,X是表示通道、隊列、資料庫或其它結構化存儲的變量;Q表示具有上文描述並在圖11C-11F中示出的句法的查詢;X[Q]表示查詢Q被提交或被存入X中;句點「.」表示從進程X[Q]到另一進程P的序列,或表示從進程的一部分X[Q]到同一進程的另一部分P的序列。如果判別塊1152的答覆是「是」,則方法1100前進到終端C3。否則,如果答覆是「否」,則方法1100前進到判別塊1154。進程內核302C確定進程表達式∏是否為若干X[Qi].Pi的總和,如X[Q0].P0+X[Q1].P1。該總和指示由進程表達式∏表示的進程可以執行多個選擇之一。例如,對於X[Q0].P0+X[Q1].P1的總和,由∏表示的進程可執行X[Q0].P0或X[Q1].P1。如果判別塊1154的答覆是「是」,則方法1100前進到終端C3。否則,如果答覆是「否」,則方法流前進到另一延續終端(「終端C1」)。
從終端C1(圖11H),方法1100前進到判別塊1156,進程內核302C確定進程表達式∏是否為(NEW X)P的形式,其中,NEW表示語言400中用於創建綁定到某一進程的新名字的操作符;(NEW X)表示在某一進程中創建新名字X;(NEWX)P表示創建了新變量X,並綁定到進程P。如果判別塊1156的判別是「是」,則方法1100在終端C3繼續。如果答覆是「否」,則方法1100進入判別塊1158。此處,進程內核302C確定進程表達式∏是否為P|P的形式,它表示一個進程與另一進程並行地執行。如果判別塊1158的答覆是「是」,則方法流前進到終端C3。否則,方法1100前進到判別塊1160。進程內核302C在判別塊1160確定進程表達式∏是否為!P的形式,其中,驚嘆號「!」表示重複操作符,!P表示無窮組合P|P|...。重複操作符!允許開發者使用語言400來表達進程的無窮行為。如果判別塊1160的判別是「是」,則方法1100前進到終端C3。否則,方法1100進入另一延續終端(「終端C2」)。
從終端C2(圖11I),方法1100前進到判別塊1162,進程內核302C確定進程表達式∏是否為X[P]的形式。句法形式X[P]指示使用語言400的開發者可在諸如上文所描述的包括通道、隊列和資料庫等其它結構化存儲的X處存入或提交進程P。如果判別塊1162的答覆是「是」,則方法1100前進到終端C3。否則,答覆是「否」,方法流前進到判別塊1164。進程內核302C確定進程表達式∏是否為Q的形式,它是提升查詢(後文更詳細描述)。如果判別塊1164的判別是「是」,則方法1100進入終端C3。否則,答覆是「否」,方法1100完成執行並終止。方法1100在這一點上終止的原因是因為進程表達式∏是以與語言400的語法不兼容的方式形成的。
從終端C3(圖11I),方法1100前進到判別塊1166,進程內核302C確定程序302A是否包含要檢查的其它進程表達式。如果答覆是「否」,則方法流前進到另一延續終端(「終端D」)。否則,答覆是「是」,方法1100前進到另一延續終端(「終端C4」),它循環返回到塊1148,重複上文描述的方法步驟。
從終端D(圖11A),方法1100前進到一組處理步驟1106,該方法使用支配查詢表達式的結構等效性的一組等效法則來運行程序(見圖11J)。處理步驟1106被定義在延續終端(「終端E」)和退出終端(「終端F」)之間。
從終端E(圖11J),方法1100前進到塊1168,進程內核302C獲取兩個或多個查詢表達式用於結構等效性比較目的。下一步,方法確定查詢上下文(K)是否為K[T:=:U]的形式。查詢上下文K表示具有適用於用一個或多個約束來填充的洞的多個查詢。如果判別塊1178的答覆是「是」,則查詢上下文K在結構上與另一查詢上下文K[U:=:T]等效。見塊1170B。然後,方法流前進到另一延續終端(「終端E1」)。否則,如果判別塊1170A的判別是「否」,則方法1100進入另一判別塊1172A。此處,進程內核302C確定查詢上下文K是否具有K[T0:=:U0,T1:=:U1]的形式。如果判別塊1172A的答覆是「是」,則查詢上下文K在結構上與另一查詢上下文K[T1:=:U1,T0:=:U0]等效。見塊1172B。下一步,方法流前進到終端E1。如果相反,判別塊1172A的答覆是「否」,則方法1100前進到終端E1,從而前進到另一判別塊1174。進程內核302C確定程序中是否有更多的查詢表達式要分析結構等效性。見塊1174。如果答覆是「否」,則方法1100前進到退出終端F。否則,答覆是「是」,方法1100循環返回到塊1168,重複上文描述的方法步驟。
從終端F(圖11A),方法1100前進到另一延續終端(「終端G」)。從終端G(圖11B),方法1100前進到一組在延續終端(「終端H」)和退出終端(「終端I」)之間定義的處理步驟1108。在這些處理步驟1108中,方法使用支配被處理的語句的結構等效性的一組等效法則來運行程序。
從終端H(圖11K),方法1100前進到塊1176,進程內核302C從程序302A獲取若干進程表達式(∏1和∏2)用於結構等效性分析。下一步,方法確定進程表達式∏1是否為P0|P1的形式。見判別塊1178A。如果判別是「是」,則如果∏2具有P0|P1的形式,進程表達式∏1在結構上與進程表達式∏2等效。見塊1178B。下一步,方法1100前進到另一延續終端(「終端H7」)。如果判別塊1178A的答覆是「否」,則方法1100前進到另一判別塊1180A,進程內核302C確定進程表達式∏1是否具有P|0的形式。如果判別塊1180A的答覆是「是」,則如果進程表達式∏2具有P的形式,進程表達式∏1在結構上與進程表達式∏2等效。見塊1180B。下一步,方法流前進到終端H7。如果判別塊1180A的答覆是「否」,則方法1100前進到另一判別塊1182A。此處,進程內核302C確定進程表達式∏1是否具有!P的形式。如果答覆是「否」,則方法1100前進到另一延續終端(「終端H2」)。如果判別塊1182A的答覆是「是」,則方法1100前進到再一延續終端(「終端H1」)。
從終端H1(圖11L),方法1100前進到塊1182B,如果進程表達式∏2具有P|!P的形式,則確定進程表達式∏1在結構上與進程表達式∏2等效。下一步,方法1100前進到終端H7。
從終端H2(圖11L),方法1100前進到判別塊1184A,進程內核302c確定進程表達式∏1是否具有P0+P1的形式。如果判別塊1184A的答覆是「是」,則如果進程表達式∏2具有P1+P0的形式,進程內核302C確定進程表達式∏1在結構上與進程表達式∏2等效。見塊1184B。下一步,方法流前進到終端H7。如果相反,判別塊1184A的答覆是「否」,則方法1100前進到另一判別塊1186A。此處,進程內核302C確定進程表達式∏1是否具有P0+0的形式。如果答覆是「是」,則方法1100流向塊1186B,如果進程表達式∏2具有形式P,則進程內核302C確定進程表達式∏1在結構上與進程表達式∏2等效。下一步,方法1100流向終端H7。如果答覆是「否」,則方法流前進到另一判別塊1188A。此處,進程內核302C確定進程表達式∏1是否具有(NEW X)(NEW Y)P的形式。如果答覆是「是」,則方法1100前進到另一延續終端(「終端H3」)。否則,如果答覆是「否」,則方法1100前進到另一延續終端(「終端H4」)。
從終端H3(圖11M),方法1100前進到塊1188B,如果進程表達式∏2具有(NEW X)(NEW Y)P的形式,則確定進程表達式∏1在結構上與進程表達式∏2等效。從終端H4(圖11M),方法1100前進到另一塊1190A,進程內核302c確定進程表達式∏1是否具有(NEW X)(NEW Y)P的形式。如果判別塊1190A的答覆是「是」,則如果進程表達式∏2具有(NEW X)P的形式,進程表達式∏1在結構上與進程表達式∏2等效。見塊1190B。下一步,方法1100前進到終端H7。如果判別塊1190A的答覆是「否」,則方法1100前進到另一判別塊1192A。此處,進程內核302C確定進程表達式∏1是否具有(NEW X)P|Q的形式。如果判別塊1192A的答覆是「是」,則過程前進到塊1192B,如果進程表達式∏2具有(NEW X)(P|Q)的形式,進程內核302C確定進程表達式∏1在結構上與進程表達式∏2等效。名字X較佳地為進程Q中的自由名字。換言之,名字X不被綁定到進程Q。下一步,方法1100前進到終端H7。
如果判別塊1192A的答覆是「否」,則方法1100進入判別塊1194A。此處,進程內核302C確定進程表達式∏1是否具有( 名字X:=:名字X′)|P的形式,其中表示不包含任何東西的查詢的頭部; 表示約束的列表或一組綁定;名字X:=:名字X′表示文字X被綁定到文字X′,或者文字X具有對文字X′的等效關係;( 名字X:=:名字X′)|P表示查詢( 名字X:=:名字X′)的頭部是與進程P並行運行的查詢。如果判別塊1194的測試的答覆是「否」,則方法1100前進到終端H7。如果相反,判別塊1194A的答覆是「是」,則方法1100前進到另一延續終端(「終端H6」)。
從終端H5(圖11N),方法1100前進到另一判別塊1194B。在判別塊1194B,進程內核302C確定查詢( 名字X:=:名字X′)是否是正則的。若且唯若查詢的所有約束(查詢正文中的綁定)是不可簡化的,且查詢不失敗,則可以說查詢是正則的,或者可選地說它是正則的形式。若且唯若有第二查詢使得該查詢映射或簡化成該第二查詢,並且約束是該第二查詢的元素時,查詢中的約束是不可簡化的。若且唯若查詢映射或簡化成另一查詢,且該另一查詢包含失敗時,可以說查詢失敗。如果L0不等效於L1的互補,則L0:=:L1形式的約束是失敗的,其中,L0、L1是文字。
如果判別塊1194B的答覆是「是」,則方法1100前進到塊1194C。此處,如果進程表達式∏2具有( 名字X:=:名字X′)|P{X′/X}的形式,則進程內核302C確定進程表達式∏1在結構上與進程表達式∏2等效。進程表達式P{X′/X}表示只要在進程P中出現名字X,這一出現可用名字X′來替換。在這一點上,可以回憶處理步驟1194A-1184C程序地描述替換等效物,這已在上文結合圖7A-7B討論。下一步,方法1100前進到終端H7。
如果判別塊1194B的答覆是「否」,則方法1100前進到終端H7。從終端H7,方法1100前進到另一判別塊1196,進程內核302C檢查是否有更多的進程表達式用於結構等效性分析。如果判別塊1196的答覆是「否」,則方法流前進到退出終端I。否則,方法1100前進到延續終端(「終端H8」)。從終端H8(圖11K),方法1100循環返回到塊1176,重複上述方法步驟。
從退出終端I(圖11B),方法1100前進到一組處理步驟1110,該方法對照支配程序302A中的查詢語句的意義的可操作語義規則來運行程序302A。該組處理步驟1110在延續終端(「終端J」)和退出終端(「終端K」)之間定義。在語言400中,可操作語義規則基本上是進程的一系列進展關係。進程本質上是動態的,使得從時間中的一點到下一點,進程在連續地變化或進展。語言400的可操作語義規則提供了以語言400表達的進程的仔細引導的進展。正是通過上文在圖11C-11I中描述的語義規則,開發者能通過語言400的可操作語義表達進程進展中的細微差別。
從終端J(圖11O),方法1100前進到塊1198,進程內核302C從程序中的查詢表達式獲取綁定。下一步,在判別塊1199A,進程內核302C確定綁定B是否包含綁定「頂部:=:底部」。如果答覆是「是」,則進程內核302C將綁定B簡化成什麼都沒有。見塊1199B。下一步,方法流前進到延續終端「終端J4」)。如果相反答覆是「否」,則方法流前進到判別塊1197A,進程內核302C確定綁定B是否包含綁定X:=:T,U:=:X。如果答覆是「是」,則進程內核302C將綁定B簡化成綁定T:=:U。見塊1197B。下一步,方法流前進到終端J4。如果答覆是「否」,則方法1100前進到另一延續終端(「終端J1」)。
從終端J1(圖11P),方法1100前進到另一判別塊1193A,進程內核302C確定綁定B是否包含T0★T1:=:U0#U1。如果答覆是「是」,則進程內核302C將綁定B簡化成T0:=:U0,T1:=:U1。見塊1193B。下一步,方法流前進到終端J4。如果判別塊1193A的答覆是「否」,則方法1100前進到另一判別塊1191A。進程內核302C確定綁定B是否包含綁定X>(T0:T0>C0>,T1:T1>(C1)):=:INL(U).]]>如果判別塊1191A的答覆是「是」,則進程內核302C將綁定B簡化成T0:=:U,X:=:T0,C0.]]>見塊1191B。下一步,方法1100前進到終端J4。如果判別塊1191A的答覆是「否」,則方法1100前進到另一判別塊1189A。
如果判別塊1191A的答覆是「否」,則方法1100前進到另一判別塊1189A。進程內核302C確定綁定B是否包含X>(T0:T0>C0>,T1:T1>(C1)):=:INL(U).]]>如果判別塊1189A的答覆是「是」,則方法1100前進到塊1189B,進程內核302c將綁定B簡化成T1:=:U,X:=:T0,C1.]]>下一步,方法流前進到終端J4。如果判別塊1189A的答覆是「否」,則方法1100前進到另一延續終端(「終端J2」)。
從終端J2,方法1100前進到另一判別塊1187A。此處,進程內核302C確定綁定B是否包含X>(T:T>(C)):=: U.]]>如果答覆是「是」,則進程內核302C將綁定B簡化成T:=:U,X:=:T,C.]]>見塊1187B。下一步,方法1100前進到終端J4。如果判別塊1187A的答覆是「否」,則方法1100前進到另一判別塊1185A。進程內核302C確定綁定B是否包含X>(T:T>(C)):=: U@V.]]>如果判別塊1185A的答覆是「是」,則進程內核302C將綁定B簡化成X>(T:T>(C))L:=:U,X>(T:T>(C))R:=:V,X:=:XL@XR.]]>見塊1185B。下一步,方法1100前進到終端J4。如果判別塊1185A的答覆是「否」,則方法1100前進到另一判別塊1183A。進程內核302C確定綁定B是否包含X>(T:T>(C)):=:_.]]>換言之,查詢X>(T:T>(C))]]>用放棄操作符來綁定。如果判別塊1183A的答覆是「是」,則進程內核302C將綁定B簡化成以下綁定X0:=:_,...,Xn:=:_。換言之,查詢X>(T:T>(C))]]>的頭部中列表 的每一項被綁定到放棄操作符。下一步,方法1100前進到終端J4。如果判別塊1183A的答覆是「否」,則方法流進入另一延續終端(「終端J3」)。
從終端J3(圖11R),方法1100前進到另一判別塊1181A,進程內核302C確定綁定B是否具有T>(C0,C,C1)]]>的形式。換言之,進程內核302C確定綁定B是否以在頭部具有列表 並在正文中具有三個約束列表(包括C0,C,C1]]>)的查詢的形式。如果判別塊1181A的答覆是「是」,則進程內核302C進一步確定列表 是否可被簡化成 見判別塊1181B。如果判別塊1181B的答覆是「是」,則綁定被簡化成查詢T>(C0,C,C1).]]>見塊1181C。方法流前進到終端J4。
如果判別塊1181A、1181B的答覆是「否」,則方法1100前進到另一判別塊1179A。進程內核302C確定綁定B是否包含以下查詢T>(U:=:X,C).]]>如果判別塊1179A的答覆是「是」,則綁定B被簡化成查詢T{U/X}>(C).]]>見塊1179B。換言之,如果名字U被綁定到查詢的正文中的名字X,則在列表 中具有名字X的每一處,名字X可由名字U來替換。下一步,方法流前進到終端J4。否則,判別塊1179A的答覆是「否」,則方法流前進到終端J4,從而前進到另一判別塊1177。此處,進程內核302C確定是否有另一查詢表達式要應用語言400的語義規則。如果答覆是「否」,則方法1100前進到退出終端K。如果判別塊1177的答覆是「是」,則方法1100前進到另一延續終端(「終端J5」)。從終端J5,方法1100循環返回到塊1198,重複上述方法步驟。
從退出終端K(圖11B),方法1100前進到一組處理步驟1112,該方法對照支配進程表達式的意義的可操作語義規則來運行程序302A。該組處理步驟1112在延續終端(「終端L」)和退出終端(「終端M」)之間定義。
從終端L(圖11S),方法1100前進到塊1175,進程內核302C獲取程序302A的進程表達式(∏)。下一步,在判別塊1173A,進程內核302C確定進程表達式∏是否包含總和X[Q0].P0+...+X[Q1].P1+...。如果判別塊1173A的答覆是「是」,則方法1100前進到另一判別塊1173B。此處,進程內核302C確定是否有σ0(Q0):=:σ1(Q1)形式的綁定,它可被正則地簡化為另一查詢Q。σ0、σ1都定義了映射或簡化項的置換(見附錄的3.2節的定義3.2.1)。σ0、σ1都較佳地被解釋為資料庫聯合。如果判別塊1173B的答覆是「是」,則進程內核302C將進程表達式∏簡化成進程X[Q].(P0|P1),它表示了經簡化的查詢Q被提交到結構化存儲X,並且隨後進程P0、P1都並行地執行。見塊1173C。處理步驟1173A-1173C在上文結合圖9A-9B討論。下一步,從塊1173C,方法1100前進到另一延續終端(「終端L6」)。
如果判別塊1173A、1173B的答覆是「否」,則方法1100前進到另一判別塊1171A。進程內核302C確定進程表達式∏是否包含P|P″。如果答覆是「是」,則方法1100前進到另一判別塊1171B,進程內核302C確定進程P是否可被簡化成進程P′。如果判別塊1171B的答覆是「是」,則方法1100前進到另一延續終端(「終端L1」)。如果判別塊1171A、1171B的答覆是「否」,則方法1100前進到另一延續終端(「終端L2」)。
從終端L1(圖11T),方法1100前進到塊1171C,進程內核302C將進程表達式∏簡化成P|P′。下一步,方法流前進到終端L6。從終端L2(圖11T),方法1100前進到另一判別塊1169A,進程內核302C確定進程表達式∏是否包含(NEWX)P。如果答覆是「是」,則方法流前進到判別塊1169B,進程內核302C確定進程P是否可被簡化成P′。如果判別塊1169B的答覆是「是」,則進程內核302C將進程表達式∏簡化成(NEW X)P′。見塊1169C。下一步,方法1100前進到終端L6。如果判別塊1169A、1169B的答覆是「否」,則方法流前進到另一判別塊1167A。此處,進程內核302C確定進程表達式∏是否包含X[P]。如果答覆是「是」,則方法1100前進到另一判別塊1167B。進程內核302C確定進程P是否可被簡化成另一進程P′。見判別塊1167B。如果判別塊1167B的答覆是「是」,則方法流前進到另一延續終端(「終端L3」)。如果判別塊1167A、1167B的答覆是「否」,則方法1100前進到另一延續終端(「終端L4」)。
從終端L3,方法1100前進到塊1167C,進程內核302C將進程表達式∏簡化成X[P′]。下一步,方法流前進到終端L6。從終端L4(圖11U),方法流前進到另一判別塊1165A,進程內核302C確定進程表達式∏是否包含進程X[Q].P。如果判別塊1165A的答覆是「是」,則進程內核302C在判別塊1165B確定查詢Q是否具有與>(C,X^:=:V)]]>形式的另一查詢的等效關係。項>(C,X^:=:V)]]>指在頭部沒有任何東西的查詢(查詢的頭部不包含任何項)。其正文包含項 它指示約束或綁定關係的列表(如將埠綁定到埠的條件),或者包含項X^:=:V,]]>它指示局部變量列表到與局部變量列表項關聯的值的列表的綁定關係。
如果判別塊1165B的答覆是「是」,則進程內核302C還確定查詢Q是否為正則形式。見判別塊1165C。如果判別塊1165C的測試是「是」,則進程內核302C將進程表達式∏簡化成Q>|P{V/^X}]]>形式的進程。見塊1165D。項Q′是提升查詢,它等效於 並且先前在圖10A-10C中討論。提升查詢 是頭部不包含任何東西,且正文包含在約束列表 中描述的全局已知的綁定關係的查詢。項 是一進程,它在提升約束列表 中的約束項的過程中用值列表 中對應的值替換局部變量列表 中每一局部變量。總言之,如果進程X[Q].P中的查詢Q等效於>(C,X^:=:V),]]>並且另外查詢Q是正則形式,則進程X[Q].P可被進展到形式Q>|P{V/^X}]]>的進程。下一步,方法1100前進到終端L6。
如果判別塊1165A-1165C的答覆是「否」,則方法1100進入另一判別塊1163A。進程內核302C確定進程表達式∏是否包含P0,它具有到P0′的等效關係。見判別塊1163A。如果答覆是「是」,則方法1100前進到另一延續終端(「終端L5」)。如果判別塊1163A的答覆是「否」,則方法1100前進到終端L6。
從終端L5(圖11V),方法1100前進到判別塊1163B,進程內核302C確定P0′是否可被簡化成P1′。如果答覆是「是」,則進程內核302C確定進程P1′是否具有與進程P1的等效關係。見判別塊1163C。如果判別塊1163C的測試是「是」,則進程內核302C將進程P0簡化成進程P1。見塊1163D。下一步,方法1100前進到終端L6。如果判別塊1163B、1163C的答覆是「否」,則方法1100也前進到終端L6。
從終端L6(圖11V),方法1100前進到另一判別塊1161,進程內核302C檢查是否由更多的進程表達式要在語言400的可操作語義規則下分析。如果答覆是「否」,則方法流前進到退出終端M。如果判別塊1161的答覆是「是」,則方法1100前進到另一延續終端(「終端L7」)。從終端L7,方法1100循環返回到塊1175,重複上述方法步驟。
儘管示出並描述了本發明的較佳實施例,然而可以理解,可以在不脫離本發明的精神和範圍的情況下作出各種變化。
Q∷=T★(C★)C∷=T:=:TT∷=頂部|底部|_|名字y|x|x^|^x|~T|T★T|T#T|x★)(Q,Q)|inl(x)|inr(x)|x★(Q)|?T|T@T
Q∷=T★(C★)C∷=T:=:TT∷=頂部|底部|_|名字y|x|x^|^x|~T|T★T|T#T|x★)(Q,Q)|inl(x)|inr(x)|x★(Q)|?T|T@T
結構等效性如上所述,句法作出了太多的區別。例如,在「:=:」的哪一側出現項是沒有區別的。我們引入結構等效性來消除這些不必要的區別。
對於查詢,使用查詢上下文來完成這一過程,查詢上下文只是在其中有可插入條件的位置的查詢。對於進程,明確地實現這一過程。
K[t:=:u]≡K[u:=t]K[t0:=:u0,t1:=:u1]≡K[t1:=:u1,t0:=:u0]P0|P1≡P1|P0P|0≡P!P≡P|!PP0+P1≡P1+P0P+0≡P(new x)(new y)P≡(new y)(new x)P(new x)(new y)P≡(new x)P(new x)P\Q(new x)(P\Q),xFN(Q)]]>對於熟悉進程代數的讀者,這些公式是普通的推測。一個令人感興趣的情況如下。當查詢是正則形式時,且其正文中有條件,則情況是那些條件是埠之間的等式,或局部變量及其值之間的等式。在提升時,用值替換局部變量以延續。當在提升查詢中呈現時,埠之間的等式擔當實現一種明確替換的過程。
簡化規則(匹配) 頂部:=:底部→(剪切) x:=:t,u:=:x→t:=:u(平均張量)t0at1:=:u0#u1t0:=:u0,t1:=:u]]>(左加)x>(t0:t0>(c0),t1:t1>(c1)):=:inl(u)t0:=:u,x:=:t0,c0]]>(右加)x>(t0:t0>(c0),t1:t1>(c1)):=:inr(u)t1:=:u,x:=:t1,c1]]>(讀)x>(t:t>(c)):=: ut:=:u,x:=:t,c]]>
(複製)x>(t:t>(c)):=:u@v]]>x>(t:t>(c))L:=:u,]]>x>(t:t>(c))R:=:v,]]>x:=:xL@xR]]>(放棄)x>(t:t>(c)):=:_x0:=:_,,xn:=:_]]>(上下文)cct>(c0,c,c1)t>(c0,cc1)]]>(清除)t>(u:=:x,c)t{u/x}>(c),]]>x不被 約束討論匹配匹配規則確實是一種規則模式。每當文字及其對偶共同到來,它們會消失。當不再需要檢查時這被解釋為是成功的。
剪切標識符在直觀上可以被認為是如線。當兩個項在線的每一端點上出現時,可以消除該線,並將兩個項直接插在一起。在這一點上,可以說線性類型確保在較佳類型的項中,標識符的確出現了兩次。
平均張力當元組提供的滿足對元組的[sic]需求時,對應的位置被連線在一起。
加當菜單(「具有聲稱(withClaim)」形式)提供的滿足對選擇(「注入(injectClaim)聲稱」形式)的需求時,作出選擇。這促使選擇的選項被連線到該需求的約束。
讀當記錄(「當然聲稱(ofCourseClaim)」)提供的滿足對回復(「為什麼不聲稱(whyNotClaim)」)的需求時,記錄上的數據被連線到該需求的約束。
複製當記錄提供的滿足對複製(「合約聲稱(contractClaim)」)的需求時,分別的副本被連線到該需求的分別的約束。
放棄當記錄提供的滿足對放棄記錄(「」)的需求時,該記錄被放棄。
上下文當條件的集合以某種方式進展時,它們可在查詢正文的上下文中以該方式進展。
清除當線的一端,即[sic]標識符的一個出現,在查詢的頭部出現時(具有某項),且另一端在正文中出現時,則在正文中綁定該標識符的項可被替代到頭部中。
定義3.2.1設σn→n是置換, 是查詢。取(t0,...,tn>(c))=t(0),...t(n)>(c).]]>定義3.2.2設Q0=t0,...,tn>(C0),]]>且Q1=u0,...,un>(C1).]]>取Q0:=:Q1=t1,...,tn,u1,...,un>(t0:=:u0,C0,C1).]]>定義3.2.3在文字l0,l1上形式l0:=:l1的約束,如果l0≠~l1,則失敗。
定義3.2.4若且唯若Q→*Q′,且Q′包含失敗,則Q失敗。
定義3.2.5若且唯若Q′.Q→*Q′.c∈Q′,則查詢Q中約束c是不可簡化的。
定義3.2.6若且唯若查詢Q的所有約束都是不可簡化,且Q不失敗時,查詢Q是正則的(可選地,以正則形式)。
(常用) (同等)PPP|PP|P]]>(新)PP(new x)P(new x)P]]>(提升)
(等效)P0P0,P0P1,P1P1P0P1]]>常用如果兩個查詢分別具有在頭部中的某一位置匹配的項,且對應的剪切查詢進展到不能再繼續進展的查詢,但是尚未失敗,則將這些查詢放入同一隊列的兩個進程將進行通信。其相應的延續將等候簡化的查詢的完成。
同等如果進程可自己進展,則它可能仍與另一進程組合併行地進展。
新如果進程可自己進展,則如果其埠之一不再對外部交互可用,它可能仍繼續進展。
提升如果在正文中具有任何綁定,則頭部沒有項的查詢僅具有將埠綁定到埠或將局部變量綁定到值的條件。這一查詢可被提升。在提升時,局部變量被替換出延續的正文。
在局部變量被替換出去之後,等式的剩餘部分在埠之間。這一查詢然後變成一進程,它擔當一種明確替換,或換算的埠之間的線。
等效在等效性關係上進展是緊密的。
權利要求
1.一種用於處理基於協議的應用程式的模塊化集合以通過網絡連接提供服務的計算機系統,其特徵在於,所述系統包括一用於儲存程序的計算機可讀裝置,所述程序包括以基於進程的語言書寫的表達式,用於將基於協議的應用程式表示為進程;以及一用於執行所述程序中的所述表達式的進程內核,所述表達式通過允許以可定製、基於標籤的語言書寫的數據的命名組織模式作為進程在進程之間交換而指定所述進程的交互,所述數據的命名組織模式被綁定到發送和接收數據的所述命名組織模式的進程的範圍。
2.如權利要求1所述的計算機系統,其特徵在於,它還包括一耦合至所述進程內核的作業系統內核,所述作業系統內核提供硬體資源的分配和使用,所述硬體資源包括存儲器、中央處理單元時間、盤空間和外圍設備。
3.如權利要求1所述的計算機系統,其特徵在於,它還包括耦合至所述進程內核的設備驅動器,所述設備驅動器提供準許所述計算機系統與所述硬體設備進行通信的軟體組件。
4.如權利要求1所述的計算機系統,其特徵在於,它還包括一目錄框架,它提供查找並註冊網際網路上的web服務的方法。
5.如權利要求4所述的計算機系統,其特徵在於,它還包括一所述目錄框架中的發現組件,所述發現組件擔當進程之間的代理程序以查找期望的web服務。
6.一種用於處理基於協議的應用程式的模塊化集合以通過網絡連接提供服務的計算機可執行方法,其特徵在於,所述方法包括當執行以基於進程的語言書寫的程序中的進程表達式時,將基於協議的應用程式表示為進程;當執行查詢表達式時,將以可定製、基於標籤的語言書寫的數據的命名組織模式表示為進程;以及當進程發送或接收所述數據的命名組織模式作為去往隊列或來自隊列的查詢時,促使所述進程進行通信,所述數據的命名組織模式被綁定到發送或接收所述數據的命名組織模式的進程的範圍。
7.如權利要求6所述的方法,其特徵在於,它還包括與一作業系統內核進行交互,所述作業系統內核提供硬體資源的分配和使用,所述硬體資源包括存儲器、中央處理單元時間、盤空間和外圍設備。
8.如權利要求6所述的方法,其特徵在於,它還包括與設備驅動器進行交互,所述設備驅動器準許實現所述方法的計算機系統與所述硬體設備進行通信。
9.如權利要求6所述的方法,其特徵在於,它還包括通過一目錄框架查找基於協議的應用程式並將其註冊為網際網路上的web服務的。
10.如權利要求9所述的方法,其特徵在於,它還包括在所述進程之間進行代理,以由所述目錄框架中的一發現組件查找期望的web服務。
11.一種具有用於執行處理基於協議的應用程式的模塊化集合以通過網絡連接提供服務的方法的計算機可執行指令的計算機可讀媒質,其特徵在於,所述方法包括當執行以基於進程的語言書寫的程序中的進程表達式時,將基於協議的應用程式表示為進程;當執行查詢表達式時,將以可定製、基於標籤的語言書寫的數據的命名組織模式表示為進程;以及當進程發送或接收所述數據的命名組織模式作為去往隊列或來自隊列的查詢時,促使所述諸進程進行通信,所述數據的命名組織模式被綁定到發送和接收所述數據的命名組織模式的進程的範圍。
12.如權利要求11所述的計算機可讀媒質,其特徵在於,它還包括與一作業系統內核進行交互,所述作業系統內核提供硬體資源的分配和使用,所述硬體資源包括存儲器、中央處理單元時間、盤空間和外圍設備。
13.如權利要求11所述的計算機可讀媒質,其特徵在於,它還包括與設備驅動器進行交互,所述設備驅動器準許實現所述方法的計算機系統與所述硬體設備進行通信。
14.如權利要求11所述的計算機可讀媒質,其特徵在於,它還包括通過一目錄框架查找基於協議的應用程式並將其註冊為網際網路上的web服務。
15.如權利要求14所述的計算機可讀媒質,其特徵在於,它還包括在所述進程之間進行代理,以由所述目錄框架中的一發現組件查找期望的web服務。
16.一種計算機系統,其特徵在於,它包括一查詢虛擬機器,用於定義查詢,並用於支配在以基於進程的語言書寫的程序中的查詢和隊列之間的交互;一進程虛擬機器,用於定義進程,並用於支配程序中進程之間的交互,進程包括基於協議的應用程式;以及一反應虛擬機器,用於定義查詢、隊列和進程之間的有效交互,還用於通過將查詢解釋為進程來支配查詢、隊列和進程之間的交互。
17.如權利要求16所述的系統,其特徵在於,它還包括一過渡虛擬機器,用於將所述查詢虛擬機器、所述進程虛擬機器和所述反應虛擬機器與所述計算機系統的其它系統軟體組件隔離。
18.如權利要求16所述的系統,其特徵在於,所述隊列包括資料庫、通道或結構化存儲,它們使運行在不同時刻或同一時刻的進程能夠跨異構網絡和可能暫時離線的系統進行通信。
19.如權利要求16所述的系統,其特徵在於,所述查詢包括以數據操縱語言書寫的指令,用於彙編和反彙編其它查詢、操縱隊列並檢測查詢中的模式。
20.如權利要求16所述的系統,其特徵在於,所述進程包括能夠通過執行行動或通過允許其它進程進展來進展的計算實體。
21.一種用於編譯以基於進程的語言書寫的表達式的計算機可執行方法,其特徵在於,所述方法包括對所述表達式進行句法分析以獲取表示隊列、一組隊列定界符、查詢、序列定界符和其它行動的句法元素;以及將所述表達式翻譯成進程,所述進程的第一行動是將所述查詢作為另一進程提交給所述隊列,並隨後所述進程以其它行動繼續,所述查詢包括從一包含數據並描述數據的可定製、基於標籤的語言形成的組織模式。
22.如權利要求21所述的方法,其特徵在於,表示所述查詢的所述表達式的部分包括一頭部和一正文,所述頭部由第一和第二查詢頭部定界符來定界,所述正文由第一和第二查詢正文定界符來定界。
23.如權利要求22所述的方法,其特徵在於,包含在所述第一和第二查詢頭部定界符之間的是零個或多個查詢項。
24.如權利要求22所述的方法,其特徵在於,包含在所述第一和第二查詢正文定界符之間的是零個或多個約束項。
25.如權利要求24所述的方法,其特徵在於,每一所述約束項是定義一個查詢項和另一查詢項之間的關係的綁定。
26.如權利要求25所述的方法,其特徵在於,所述查詢項包括文字。
27.如權利要求25所述的方法,其特徵在於,所述查詢項包括互補文字。
28.如權利要求25所述的方法,其特徵在於,所述查詢項包括放棄。
29.如權利要求25所述的方法,其特徵在於,所述查詢項包括變量名。
30.如權利要求25所述的方法,其特徵在於,所述查詢項包括變量。
31.如權利要求25所述的方法,其特徵在於,所述查詢項包括查詢項的倒置。
32.如權利要求25所述的方法,其特徵在於,所述查詢項包括查詢項的元組。
33.如權利要求25所述的方法,其特徵在於,所述查詢項包括查詢項的互補元組。
34.如權利要求25所述的方法,其特徵在於,所述查詢項在頭部包括具有零個或多個變量的第二查詢,並在正文中包括由逗號分隔的第三和第四查詢。
35.如權利要求34所述的方法,其特徵在於,所述查詢項包括採用變量作為自變量的左注入符。
36.如權利要求25所述的方法,其特徵在於,所述查詢項包括採用變量作為自變量的右注入符。
37.如權利要求25所述的方法,其特徵在於,所述查詢項在頭部包括具有零個或多個變量的第五查詢,並在正文中包括第六查詢。
38.如權利要求37所述的方法,其特徵在於,所述查詢項包括操作查詢項的讀操作符。
39.如權利要求37所述的方法,其特徵在於,所述查詢項包括操作查詢項的複製操作符。
40.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括一非活動操作符,所述非活動操作符允許表達所述進程的非活動性。
41.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括對一組進程求和的求和操作符,所述求和操作符允許表達所述進程可從該組進程中選擇以進行的選項。
42.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括新操作符,所述新操作符允許表達被綁定到所述進程的名字的創建。
43.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括並行操作符,所述並行操作符允許表達並行執行的兩個進程。
44.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括重複操作符,所述重複操作符允許表達所述進程的無窮行為。
45.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括第二隊列、第二組隊列定界符以及進程。
46.如權利要求21所述的方法,其特徵在於,表示所述進程的所述表達式的部分包括提升查詢。
47.一種具有用於執行編譯以基於進程的語言書寫的表達式的方法的計算機可執行指令的計算機可讀媒質,其特徵在於,所述方法包括對所述表達式進行句法分析以獲取表示隊列、一組隊列定界符、查詢、序列定界符以及其它行動的句法元素;以及將所述表達式翻譯成進程,所述進程的第一行動是將所述查詢作為另一進程提交給所述隊列,並且隨後所述進程以其它行動繼續,所述查詢包括從一包含數據並描述數據的可定製、基於標籤的語言形成的組織模式。
48.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述查詢的所述表達式的部分包括頭部和正文,所述頭部由第一和第二查詢頭部定界符來定界,所述正文由第一和第二查詢正文定界符來定界。
49.如權利要求48所述的計算機可讀媒質,其特徵在於,包含在所述第一和第二查詢頭部定界符之間的是零個或多個查詢項。
50.如權利要求48所述的計算機可讀媒質,其特徵在於,包含在所述第一和第二查詢正文定界符之間的是零個或多個約束項。
51.如權利要求50所述的計算機可讀媒質,其特徵在於,每一所述約束項是定義一個查詢項與另一查詢項之間的關係的綁定。
52.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括文字。
53.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括互補文字。
54.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括放棄。
55.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括變量名。
56.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括變量。
57.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括查詢項的倒置。
58.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括查詢項的元組。
59.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項包括查詢項的互補元組。
60.如權利要求51所述的計算機可讀媒質,其特徵在於,所述查詢項在頭部包括具有零個或多個變量的第二查詢,並在正文包括由逗號分隔的第三和第四查詢。
61.如權利要求60所述的計算機可讀媒質,其特徵在於,所述查詢項包括採用變量作為自變量的左注入符。
62.如權利要求61所述的計算機可讀媒質,其特徵在於,所述查詢項包括採用變量作為自變量的右注入符。
63.如權利要求61所述的計算機可讀媒質,其特徵在於,所述查詢項在頭部包括具有零個或多個變量的第五查詢,並在正文中包括第六查詢。
64.如權利要求63所述的計算機可讀媒質,其特徵在於,所述查詢項包括操作查詢項的讀操作符。
65.如權利要求63所述的計算機可讀媒質,其特徵在於,所述查詢項包括操作查詢項的複製操作符。
66.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括非活動操作符,所述非活動操作符允許表達所述進程的非活動性。
67.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括對一組進程求和的求和操作符,所述求和操作符允許表達所述進程可從所述進程組中選擇以進行的選項。
68.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括新操作符,所述新操作符允許表達被綁定到所述進程的名字的創建。
69.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括並行操作符,所述並行操作符允許表達並行執行的兩個進程。
70.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括重複操作符,所述重複操作符允許表達所述進程的無窮行為。
71.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括第二隊列、第二組隊列定界符以及進程。
72.如權利要求47所述的計算機可讀媒質,其特徵在於,表示所述進程的所述表達式的部分包括提升查詢。
73.一種用於執行支配以基於進程的語言書寫的表達式的結構等效性的一組等效法則的計算機可執行方法,其特徵在於,所述方法包括對第一表達式進行句法分析,所述第一表達式描述一查詢正在與一進程並行地執行,所述查詢具有頭部和正文,所述頭部為空,所述正文包含被綁定到第二名字的第一名字;以及將所述第一表達式翻譯成在結構上等效於第二表達式,所述第二表達式描述如果所述查詢是正則形式,則所述查詢與所述進程並行地執行,所述進程中所述第一名字的每一出現可用所述第二名字來替換。
74.如權利要求73所述的方法,其特徵在於,若且唯若所述查詢的正文中的所有約束為不可簡化,且所述查詢不失敗時,所述查詢是正則形式。
75.如權利要求74所述的方法,其特徵在於,若且唯若存在第二查詢,使得當所述查詢被簡化成所述第二查詢時,約束是所述第二查詢的元素,則所述約束是不可簡化的。
76.如權利要求74所述的方法,其特徵在於,若且唯若所述查詢可被簡化成第二查詢,且所述第二查詢包括失敗時,所述查詢失敗。
77.如權利要求76所述的方法,其特徵在於,如果約束被定義為被綁定到第二文字的第一文字,並且如果所述第一文字不是所述第二文字的互補,則所述約束失敗。
78.一種具有用於實現執行支配以基於進程的語言書寫的表達式的結構等效性的一組等效法則的方法的計算機可執行指令的計算機可讀媒質,其特徵在於,所述方法包括對第一表達式進行句法分析,所述第一表達式描述一查詢正在與一進程並行地執行,所述查詢具有頭部和正文,所述頭部為空,所述正文包含被綁定到第二名字的第一名字;以及將所述第一表達式翻譯成在結構上等效於第二表達式,所述第二表達式描述如果所述查詢是正則形式,則所述查詢與所述進程並行地執行,所述進程中的所述第一名字的每一出現可用所述第二名字來替換。
79.如權利要求78所述的計算機可讀媒質,其特徵在於,若且唯若所述查詢的正文中的所有約束為不可簡化,且所述查詢不失敗時,所述查詢是正則形式。
80.如權利要求79所述的計算機可讀媒質,其特徵在於,若且唯若存在第二查詢,使得當所述查詢被簡化成所述第二查詢時,約束是所述第二查詢的元素,則所述約束是不可簡化的。
81.如權利要求79所述的計算機可讀媒質,其特徵在於,若且唯若所述查詢可被簡化成第二查詢,且所述第二查詢包含失敗時,所述查詢失敗。
82.如權利要求79所述的計算機可讀媒質,其特徵在於,如果約束被定義為被綁定到第二文字的第一文字,並且如果所述第一文字不是所述第二文字的互補,則所述約束失敗。
83.一種用於執行支配以基於進程的語言書寫的表達式的意義的可操作語義規則組的計算機執行的方法,其特徵在於,所述方法包括對第一表達式進行句法分析,所述第一表達式描述一進程是兩個進程的選擇,所述兩個進程的第一進程表達第一查詢被提交到隊列,並且隨後所述第一進程以第一組行動繼續,所述兩個進程的第二進程表達第二查詢被提交到所述隊列,並且隨後所述第二進程以第二組行動繼續;以及將所述第一表達式簡化成第二表達式,所述第二表達式描述第三查詢被提交到所述隊列,並且隨後如果所述第三查詢是正則形式,則所述第一進程與所述第二進程並行地執行。
84.如權利要求83所述的方法,其特徵在於,所述第三查詢是兩個項的綁定的簡化,所述兩個項的第一項包括對所述第一查詢應用第一置換功能,所述第二項包括對所述第二查詢應用第二置換。
85.如權利要求83所述的方法,其特徵在於,若且唯若所述第三查詢的正文中的所有約束都為不可簡化,且所述第三查詢不失敗時,所述第三查詢是正則形式。
86.如權利要求85所述的方法,其特徵在於,若且唯若存在第四查詢,使得當所述第三查詢被簡化成所述第四查詢時,約束是所述第四查詢的元素,則所述第三查詢中的約束是不可簡化的。
87.如權利要求85所述的方法,其特徵在於,若且唯若所述第三查詢可被簡化成第四查詢,且所述第四查詢包含失敗時,所述第三查詢失敗。
88.如權利要求87所述的方法,其特徵在於,如果約束被定義為被綁定到第二文字的第一文字,並且如果所述第一文字不是所述第二文字的互補,則所述約束失敗。
89.一種具有用於實現執行支配以基於進程的語言書寫的表達式的意義的可操作語義規則組的方法的計算機可執行指令的計算機可讀媒質,其特徵在於,所述方法包括對第一表達式進行句法分析,所述第一表達式描述一進程是兩個進程的選擇,所述兩個進程的第一進程表達第一查詢被提交到隊列,並且隨後所述第一進程以第一組行動繼續,所述兩個進程的第二進程表達第二查詢被提交到所述隊列,並且隨後所述第二進程以第二組行動繼續;以及將所述第一表達式簡化成第二表達式,所述第二表達式描述第三查詢被提交到所述隊列,隨後如果所述第三查詢是正則形式,則所述第一進程與所述第二進程並行地執行。
90.如權利要求89所述的計算機可讀媒質,其特徵在於,所述第三查詢是兩個項的綁定的簡化,所述兩個項的第一項包括對所述第一查詢應用第一置換功能,所述第二項包括對所述第二查詢應用第二置換。
91.如權利要求89所述的計算機可讀媒質,其特徵在於,若且唯若所述第三查詢的正文中的所有約束為不可簡化,且所述第三查詢不失敗時,所述第三查詢是正則形式。
92.如權利要求91所述的計算機可讀媒質,其特徵在於,若且唯若存在第四查詢,使得當所述第三查詢被簡化成所述第四查詢時,約束是所述第四查詢的元素,則所述第三查詢中的約束是不可簡化的。
93.如權利要求91所述的計算機可讀媒質,其特徵在於,若且唯若所述第三查詢可被簡化成第四查詢,且所述第四查詢包含失敗時,所述第三查詢失敗。
94.如權利要求93所述的計算機可讀媒質,其特徵在於,如果約束被定義為被綁定到第二文字的第一文字,並且如果所述第一文字不是所述第二文字的互補,則所述約束失敗。
95.一種用於執行支配以基於進程的語言書寫的表達式的意義的一組可操作語義規則的計算機可執行方法,其特徵在於,所述方法包括對第一表達式進行句法分析,所述第一表達式描述第一進程,其第一行動是向隊列提交查詢,並且隨後所述第一進程以第二進程繼續;以及將所述第一表達式簡化成第二表達式,所述第二表達式描述當所述第一查詢是正則形式時與所述第二進程並行運行的提升查詢。
96.如權利要求95所述的方法,其特徵在於,所述第一查詢在結構上等效於其頭部為空且正文為約束列表的另一查詢。
97.如權利要求96所述的方法,其特徵在於,所述約束列表中的每一約束是兩個名字之間的綁定。
98.如權利要求95所述的方法,其特徵在於,若且唯若所述第一查詢的正文中的所有約束為不可簡化,且所述第一查詢不失敗時,所述第一查詢是正則形式。
99.如權利要求98所述的方法,其特徵在於,若且唯若存在第二查詢,使得當所述第一查詢被簡化成所述第二查詢時,約束是所述第二查詢的元素,則所述約束在所述第一查詢中是不可簡化的。
100.如權利要求98所述的方法,其特徵在於,若且唯若所述第一查詢可被簡化成所述第二查詢,且所述第二查詢包含失敗時,所述第一查詢失敗。
101.如權利要求100所述的方法,其特徵在於,如果約束被定義為被綁定到第二文字的第一文字,並且如果所述第一文字不是所述第二文字的互補,則所述約束失敗。
102.一種具有用於實現執行支配以基於進程的語言書寫的表達式的意義的可操作語義規則組的方法的計算機可執行指令的計算機可讀媒質,其特徵在於,所述方法包括對第一表達式進行句法分析,所述第一表達式描述第一進程,其第一行動是向隊列提交查詢,並且隨後所述第一進程以第二進程繼續;以及將所述第一表達式簡化成第二表達式,所述第二表達式描述當所述第一查詢是正則形式時與所述第二進程並行運行的提升查詢。
103.如權利要求102所述的計算機可讀媒質,其特徵在於,所述第一查詢在結構上等效於其頭部為空且正文為約束列表的另一查詢。
104.如權利要求103所述的計算機可讀媒質,其特徵在於,所述約束列表中的每一約束是兩個名字之間的綁定。
105.如權利要求102所述的計算機可讀媒質,其特徵在於,若且唯若所述第一查詢的正文中的所有約束為不可簡化,且所述第一查詢不失敗時,所述第一查詢是正則形式。
106.如權利要求105所述的計算機可讀媒質,其特徵在於,若且唯若存在第二查詢,使得當所述第一查詢被簡化成所述第二查詢時,約束是所述第二查詢的元素,則所述約束在所述第一查詢中是不可簡化的。
107.如權利要求105所述的計算機可讀媒質,其特徵在於,若且唯若所述第一查詢可被簡化成所述第二查詢,且所述第二查詢包含失敗時,所述第一查詢失敗。
108.如權利要求107所述的計算機可讀媒質,其特徵在於,如果約束被定義為被綁定到第二文字的第一文字,並且如果所述第一文字不是所述第二文字的互補,則所述約束失敗。
全文摘要
揭示了一種包括用於將基於協議的應用程式表示為進程的以基於進程的語言書寫的表達式的程序。一進程內核執行該程序中的表達式。該表達式通過允許以可定製、基於標籤的語言書寫的數據的命名組織模式作為進程在進程之間交換,而指定了進程的交互。數據的命名組織模式被綁定到發送並接收數據的命名組織模式的進程的範圍。
文檔編號G06F9/44GK1653439SQ03810372
公開日2005年8月10日 申請日期2003年5月9日 優先權日2002年5月10日
發明者G·L·麥瑞迪斯, S·布卓格, D·裡奇特 申請人:微軟公司