国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用數(shù)據(jù)庫運(yùn)算符的狀態(tài)機(jī)表達(dá)的制作方法

      文檔序號(hào):6327739閱讀:336來源:國(guó)知局
      專利名稱:用數(shù)據(jù)庫運(yùn)算符的狀態(tài)機(jī)表達(dá)的制作方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及系統(tǒng)設(shè)計(jì),尤其涉及使用狀態(tài)機(jī)的系統(tǒng)設(shè)計(jì)。
      背景技術(shù)
      狀態(tài)機(jī)是用于設(shè)計(jì)實(shí)時(shí)系統(tǒng)和硬件的一種機(jī)制。雖然沒有在軟件中的多,但已經(jīng)在硬件中開發(fā)并廣泛地采用狀態(tài)機(jī)理論和優(yōu)化。

      發(fā)明內(nèi)容
      狀態(tài)機(jī)可以使用數(shù)據(jù)庫查詢語言的事件驅(qū)動(dòng)對(duì)象來表示??梢詫碜詳?shù)據(jù)庫查詢語言的綁定運(yùn)算符用作狀態(tài)轉(zhuǎn)移函數(shù),其中轉(zhuǎn)移函數(shù)具有定義狀態(tài)的副效應(yīng)。對(duì)象可以用事件驅(qū)動(dòng)表達(dá)式和運(yùn)算符來操縱并且執(zhí)行原本對(duì)于簡(jiǎn)單狀態(tài)機(jī)而言復(fù)雜的操作。提供本發(fā)明內(nèi)容以便以簡(jiǎn)化形式介紹將在以下的具體實(shí)施方式
      中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。


      在附圖中,圖1是示出可以使用數(shù)據(jù)庫查詢語言來執(zhí)行狀態(tài)機(jī)的設(shè)備的實(shí)施例的圖示。圖2是示出用于使用數(shù)據(jù)庫查詢語言來表達(dá)狀態(tài)機(jī)的方法的實(shí)施例的流程圖示。圖3是示出在反饋機(jī)制中使用的有限狀態(tài)機(jī)的實(shí)施例的圖示。圖4是示出簡(jiǎn)單的有限狀態(tài)機(jī)的實(shí)施例的圖示。
      具體實(shí)施例方式可以一般化關(guān)系數(shù)據(jù)庫的概念并將其用來實(shí)現(xiàn)狀態(tài)機(jī)。一般化的關(guān)系數(shù)據(jù)庫概念可以允許來自關(guān)系數(shù)據(jù)庫應(yīng)用程序的增強(qiáng)的表達(dá)能力,以及允許使用狀態(tài)機(jī)來實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫。標(biāo)準(zhǔn)關(guān)系數(shù)據(jù)庫可以由行的集合以及行的元組來表示,我們可以將行的集合定義為‘集合’,我們可以將行的元組定義為‘類’。貫穿本文,使用符號(hào)M<T>來討論集合,其中M表示集合而T表示存儲(chǔ)在集合中的項(xiàng)的數(shù)據(jù)類型。為了使集合工作,存在若干公理0::Μ<Τ>-空集U: :MXT>x M<T> — M<T>-兩個(gè)集合的并集產(chǎn)生另一集合。{J :T — Μ<Τ>-將值注入到集合中。在這種情況下,可以創(chuàng)建單個(gè)元素或單元素
      皇A
      朱口 ο在關(guān)系代數(shù)中使用若干公共運(yùn)算符來對(duì)數(shù)據(jù)庫執(zhí)行操作σ :Μ<Τ>χ(Τ — bool) — M<T>-從關(guān)系代數(shù)的過濾或選擇操作。
      函數(shù)(T — bool)是過濾函數(shù)。Ji :Μ<Τ>χ (Τ - S) - M<S>-投影或變換操作將集合從類型T變?yōu)轭愋蚐。X: :M<T>x M<S> — M<TxS>- 一對(duì)集合可被變成對(duì)的集合。定義了又一個(gè)運(yùn)算符klectMany (選擇許多)M<T>x(T —M<S>) — M<S>-來自關(guān)系代數(shù)的相關(guān)子查詢。函數(shù)(T —M<S>)定義了如何將M<T>的元素分成S型元素的集合,隨后被展平成S元素的集合。可以使用klectMany運(yùn)算符來表達(dá)以上定義的以上關(guān)系代數(shù)操作中的任一個(gè)。σ (as) = as. SelectMany ( λ a — P (a) ? {a} :0)-使用函數(shù) P (a)從集合 ‘a(chǎn)s,中過濾項(xiàng)‘a(chǎn)’。P (a)處理每一項(xiàng)λ a,并創(chuàng)建單元素集合{a}或創(chuàng)建空集。隨后將各項(xiàng)展平成帶有與原始集合相同類型的新的集合或?qū)⑵浼尤氲叫碌募现小i (as) = as. SelectMany ( λ a — {F (a)})-通過應(yīng)用函數(shù)F (a)來投影各項(xiàng)并創(chuàng)建單元素集合。隨后將單元素集展平成帶有與原始集合相同類型的新的集合或?qū)⑵浼尤氲叫碌募现?。as X bs = as. SelectMany ( λ a ^ σ λ b ^ (a,b) (bs))-結(jié)合一對(duì)集合 ‘a(chǎn)s,禾口 ‘bs,。klectMany中使用的函數(shù)可以是代碼的任意表示。在某些情況下,函數(shù)可以是對(duì)象或在某些情況下可以是描述以及可執(zhí)行函數(shù)。通過使用以上的klectMany符號(hào),出現(xiàn)了多個(gè)一元體(monad)集合M<_>對(duì)應(yīng)于算符運(yùn)算符kIectMany對(duì)應(yīng)于綁定單元素集合U對(duì)應(yīng)于返回或η結(jié)合一元體取各集合的集合(a collection of collections)并將結(jié)果展平為單
      小隹A
      I朱口。μ :M<M<T>> — M<T>結(jié)合一元體可以使用kIectMany來表示。μ tss = tss. SelectMany ( λ ts — ts)因此,數(shù)據(jù)庫描述符和運(yùn)算符可以被一般化為一元體。可以將數(shù)據(jù)庫查詢引擎的技術(shù)應(yīng)用于更一般化的一元體概念。Mealy機(jī)是有限狀態(tài)機(jī),它可以被一般化為一元體的概念。Mealy機(jī)是由以下各項(xiàng)組成的6_元組(S,S0,Σ,Λ,T,G)狀態(tài)的有限集(S)開始狀態(tài)或初始狀態(tài)(SO),它是S的一個(gè)元素被稱為輸入字母表的有限集(Σ )被稱為輸出字母表的有限集(Λ)將狀態(tài)和輸入字母表映射到下一狀態(tài)的轉(zhuǎn)移函數(shù)(Τ :S χ Σ — S)將每一狀態(tài)和輸入字母表映射到輸出字母表的輸出函數(shù)(G :S χ Σ— Λ)Mealy機(jī)的函數(shù)可以如下表達(dá),其中*指示各項(xiàng)的集合Next (下一個(gè))狀態(tài)χ輸入一狀態(tài)
      Out (輸出)狀態(tài)χ輸入一輸出Run(運(yùn)行)狀態(tài)χ輸入*x((狀態(tài)χ輸入一狀態(tài))x(狀態(tài)χ輸入一輸出))一(輸出X狀態(tài))*Rim的表達(dá)式指示輸入和狀態(tài)的集合得到輸出和狀態(tài)的集合??梢赃M(jìn)一步一般化這些表達(dá)式,其中可以組合狀態(tài)χ輸入一狀態(tài)函數(shù)以及狀態(tài)χ 輸入一輸出函數(shù)來創(chuàng)建產(chǎn)生輸出對(duì)的單個(gè)函數(shù) 狀態(tài)χ輸入一輸出χ狀態(tài)輸出可以是輸出的集合。狀態(tài)χ輸入一輸出*x狀態(tài)Mealy機(jī)Run表達(dá)式可以被重寫為狀態(tài)χ輸入*x(狀態(tài)χ輸入一輸出*x狀態(tài))一(輸出χ狀態(tài))*在編程語言中,全局狀態(tài)是隱式的,將以上表達(dá)式簡(jiǎn)化為輸入*x (輸入一輸出*)—輸出*輸入序列的集合,將輸入轉(zhuǎn)換為輸出序列的函數(shù)得到輸出序列。該表達(dá)式可以使用.NET框架中的klectMany來定義為IEnumerable (可枚舉)<T>SelectMany (該 IEnumerable<S>src (源),F(xiàn)unc (函數(shù))<S,IEnumerable<T 選擇器)當(dāng)選擇器函數(shù)產(chǎn)生副效應(yīng)時(shí),可以使用該表達(dá)式來實(shí)現(xiàn)狀態(tài)機(jī)。以上所述的Mealy 機(jī)被示為有限狀態(tài)機(jī),但該表達(dá)式還可用于實(shí)現(xiàn)無限狀態(tài)機(jī)。副效應(yīng)函數(shù)可以是改變輸入和輸出參數(shù)以外(即,環(huán)境中的)的狀態(tài)的任何函數(shù)。可以在常規(guī)數(shù)據(jù)庫語言系統(tǒng)中使用副效應(yīng)函數(shù)來表達(dá)狀態(tài)機(jī)。狀態(tài)機(jī)的輸入可以被認(rèn)為是狀態(tài)機(jī)可以處理的‘事件’。在處理事件時(shí),可以更新狀態(tài)并生成輸出??梢允褂脭?shù)據(jù)庫查詢語言處理器通過將查詢輸入定義為狀態(tài)序列來表達(dá)狀態(tài)機(jī)。 可以使用變換函數(shù)將狀態(tài)序列綁定到序列輸入以創(chuàng)建輸出事件流。當(dāng)變換函數(shù)具有副效應(yīng)時(shí),那些副效應(yīng)在對(duì)輸入事件流作出響應(yīng)時(shí)可以定義狀態(tài)機(jī)的狀態(tài)。在某些情況下,輸入類型可以與輸出類型不同。當(dāng)且僅當(dāng)N<T> — M<T>時(shí)以下語句保持為真M<I>x(I — Ν<0 — Μ<0>類似地,當(dāng)且僅當(dāng)Μ<Ν<0>> — Ν<0>時(shí)以下語句保持為真Μ<Ι>χ(Ι — Ν<0 — Ν<0>在某些實(shí)施例中,輸入可以被創(chuàng)建為推或拉輸入。拉輸入可以請(qǐng)求輸入并在處理輸入之前可以等待直到接收到輸入。在推輸入中,狀態(tài)機(jī)可以在任意時(shí)刻接收輸入并且在其到達(dá)后處理輸入。本說明書通篇中,在所有附圖的描述中,相似的附圖標(biāo)記表示相同的元素。在將元素稱為被“連接”或“耦合”時(shí),這些元素可以直接連接或耦合在一起,或者也可以存在一個(gè)或多個(gè)中間元素。相反,在將元素稱為被“直接連接”或“直接耦合”時(shí),不存在中間元素。本發(fā)明主題可被具體化為設(shè)備、系統(tǒng)、方法、和/或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的部分或全部能以硬件和/或軟件(包括固件、常駐軟件、微碼、狀態(tài)機(jī)、門陣列等)來具體化。此外,本發(fā)明可以采用其上包含有供指令執(zhí)行系統(tǒng)使用或結(jié)合其使用的計(jì)算機(jī)可使用或計(jì)算機(jī)可讀程序代碼的計(jì)算機(jī)可使用或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的計(jì)算機(jī)程序產(chǎn)品的形式。在本文的上下文中,計(jì)算機(jī)可使用或計(jì)算機(jī)可讀介質(zhì)可以是可包含、存儲(chǔ)、通信、傳播、 或傳輸程序以供指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或結(jié)合其使用的任何介質(zhì)。計(jì)算機(jī)可使用或計(jì)算機(jī)可讀介質(zhì)可以是,例如,但不限于,電、磁、光、電磁、紅外、 或半導(dǎo)體系統(tǒng)、裝置、設(shè)備或傳播介質(zhì)。作為示例而非限制,計(jì)算機(jī)可讀介質(zhì)可以包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)這樣的信息的任意方法或技術(shù)來實(shí)現(xiàn)的易失性和非易失性、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括,但不限于,RAM、ROM、EEPR0M、閃存或其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ)、磁帶盒、磁帶、磁盤存儲(chǔ)或其它磁性存儲(chǔ)設(shè)備、或能用于存儲(chǔ)所需信息且可以由指令執(zhí)行系統(tǒng)訪問的任何其它介質(zhì)。注意,計(jì)算機(jī)可使用或計(jì)算機(jī)可讀介質(zhì)可以是其上打印有程序的紙張或其它合適的介質(zhì),因?yàn)槌绦蚩梢越?jīng)由例如對(duì)紙張或其它介質(zhì)的光學(xué)掃描而電子地捕獲,隨后如有必要被編譯、解釋,或以其它合適的方式處理,并隨后存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)器中。通信介質(zhì)通常以諸如載波或其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)來體現(xiàn)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并包括任一信息傳送介質(zhì)。術(shù)語“已調(diào)制數(shù)據(jù)信號(hào)” 可以被定義為其一個(gè)或多個(gè)特征以在信號(hào)中編碼信息的方式被設(shè)定或更改的信號(hào)。作為示例而非限制,通信介質(zhì)包括有線介質(zhì),如有線網(wǎng)絡(luò)或直接線連接,以及諸如聲學(xué)、RF、紅外及其它無線介質(zhì)之類的無線介質(zhì)。上述的任意組合也應(yīng)包含在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。當(dāng)本發(fā)明主題在計(jì)算機(jī)可執(zhí)行指令的一般上下文中具體化時(shí),該實(shí)施例可以包括由一個(gè)或多個(gè)系統(tǒng)、計(jì)算機(jī)、或其它設(shè)備執(zhí)行的程序模塊。一般而言,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。通常,程序模塊的功能可以在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。圖1是示出可用于開發(fā)和執(zhí)行實(shí)現(xiàn)狀態(tài)機(jī)的計(jì)算機(jī)程序的設(shè)備的實(shí)施例100的圖。實(shí)施例100是其上可以創(chuàng)建和調(diào)試狀態(tài)機(jī)的通用計(jì)算機(jī)的簡(jiǎn)化示例。所得可執(zhí)行文件可以在同一設(shè)備或另一設(shè)備上執(zhí)行。圖1的示圖示出系統(tǒng)的各個(gè)功能組件。在某些情況下,組件可以是硬件組件、軟件組件、或硬件和軟件的組合。某些組件可以是應(yīng)用層軟件,而其他組件可以是操作系統(tǒng)層組件。在某些情況下,一個(gè)組件到另一個(gè)組件的連接可以是緊密連接,其中兩個(gè)或更多個(gè)組件在單個(gè)硬件平臺(tái)上操作。在其它情況下,連接可以通過跨長(zhǎng)距離的網(wǎng)絡(luò)連接來形成。各實(shí)施例可以使用不同的硬件、軟件、以及互連體系結(jié)構(gòu)來實(shí)現(xiàn)所描述的功能。設(shè)備102可以是可用于開發(fā)、編輯、測(cè)試和執(zhí)行計(jì)算機(jī)程序的常規(guī)計(jì)算機(jī)設(shè)備。設(shè)備102示出其上可以創(chuàng)建和執(zhí)行可執(zhí)行計(jì)算機(jī)程序的開發(fā)平臺(tái)。其他設(shè)備可以在不能夠編輯或改變計(jì)算機(jī)程序的情況下執(zhí)行在設(shè)備102上開發(fā)的計(jì)算機(jī)程序。設(shè)備102可具有一組硬件組件104和軟件組件106。各個(gè)組件表示通用計(jì)算設(shè)備, 該通用計(jì)算設(shè)備可以是服務(wù)器計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、游戲控制臺(tái)或其他計(jì)算機(jī)設(shè)備。在某些情況下,計(jì)算設(shè)備可以是便攜式設(shè)備,例如膝上型計(jì)算機(jī)、上網(wǎng)本計(jì)算機(jī)、手持式移動(dòng)電話或其他設(shè)備。
      設(shè)備102所創(chuàng)建的計(jì)算機(jī)程序可以在任何類型的硬件或軟件平臺(tái)上執(zhí)行,這些平臺(tái)包括以上所述的設(shè)備,以及諸如路由器、交換機(jī)、存儲(chǔ)設(shè)備和其他網(wǎng)絡(luò)基礎(chǔ)結(jié)構(gòu)等的網(wǎng)絡(luò)設(shè)備,諸如手持式診斷儀或遠(yuǎn)程傳感儀等數(shù)據(jù)收集設(shè)備,諸如移動(dòng)電話和手持式游戲設(shè)備等的便攜式設(shè)備,或任何其他類型的計(jì)算設(shè)備。所列設(shè)備的類型不旨在窮舉可能選項(xiàng),只是說明可以使用設(shè)備102來執(zhí)行所開發(fā)的程序的設(shè)備類型的寬度。硬件組件104可包括可以使用隨機(jī)存取存儲(chǔ)器110和非易失性存儲(chǔ)112的處理器 108。硬件組件104還可以包括網(wǎng)絡(luò)接口 114和用戶接口 116。軟件組件106可包括開發(fā)環(huán)境120可在其上執(zhí)行的操作系統(tǒng)118。開發(fā)環(huán)境120 可具有編輯器121和編譯器130,并且可以由程序員使用來創(chuàng)建源代碼122。在某些實(shí)施例中,編譯器130可以將源代碼122編譯成中間代碼132,可以使用運(yùn)行時(shí)執(zhí)行器134來執(zhí)行中間代碼以處理輸入136并生成輸出138。在其他實(shí)施例中,源代碼122可以在不使用解釋器進(jìn)行編譯的情況下來解釋。貫穿本說明書,計(jì)算機(jī)代碼的示例使用C#和部分.NET框架來說明。其他語言可具有執(zhí)行類似功能的不同句法和不同命令。源代碼122可以使用數(shù)據(jù)庫查詢語言1 來表示狀態(tài)機(jī)124。在某些情況下,數(shù)據(jù)庫查詢語言126可以與數(shù)據(jù)庫1 交互。這些狀態(tài)機(jī)的示例在本說明書的后文中說明。圖2是示出用于使用數(shù)據(jù)庫查詢語言來表達(dá)狀態(tài)機(jī)的方法的實(shí)施例200的流程圖示。實(shí)施例200是用于使用數(shù)據(jù)庫查詢語言和狀態(tài)機(jī)技術(shù)來創(chuàng)建、編譯和優(yōu)化程序的過程的簡(jiǎn)化示例。其它實(shí)施例可以使用不同順序的、附加的或更少的步驟以及不同的名稱或術(shù)語來實(shí)現(xiàn)類似的功能。在一些實(shí)施方式中,各種操作或一組操作可以按同步或異步的方式與其它操作并行執(zhí)行。在此選擇的這些步驟被挑選來以簡(jiǎn)化的形式示出操作的一些原理。在框202中,可以定義狀態(tài)機(jī)狀態(tài),并且可以在框204中定義狀態(tài)機(jī)的轉(zhuǎn)移函數(shù)。 可以在框206中定義輸出函數(shù)???02到206的操作示出在定義狀態(tài)機(jī)時(shí)程序員可以采用的步驟。在本說明書的后文中示出了簡(jiǎn)單狀態(tài)機(jī)的兩個(gè)示例,盡管狀態(tài)機(jī)技術(shù)已經(jīng)廣泛實(shí)施。在框208中,可以使用數(shù)據(jù)庫查詢語言來定義狀態(tài)機(jī)。如本說明以上所示,許多數(shù)據(jù)庫查詢語言運(yùn)算符可以被一般化為一元體,還將這些一元體示為狀態(tài)機(jī)的一般化形式。 具體地,可以使用許多數(shù)據(jù)庫查詢語言中使用的綁定運(yùn)算符來表達(dá)常規(guī)地用于函數(shù)型編程和用于表達(dá)狀態(tài)機(jī)的所有一元體運(yùn)算符。在C#語言和.NET框架中,等價(jià)的綁定運(yùn)算符是 SelectMany0在框210中,可以編譯狀態(tài)機(jī)。在編譯期間,如果在框212中檢測(cè)到副效應(yīng)函數(shù), 則編譯器可以在框214中標(biāo)識(shí)副效應(yīng)函數(shù)。在許多編程環(huán)境中,數(shù)據(jù)庫查詢語言中的副效應(yīng)函數(shù)可以是用于執(zhí)行數(shù)據(jù)庫查詢的非常規(guī)機(jī)制。某些數(shù)據(jù)庫系統(tǒng)可以執(zhí)行以變換函數(shù)不產(chǎn)生副效應(yīng)的假定為基礎(chǔ)的某些查詢優(yōu)化。這些優(yōu)化可以包括例如重定序輸入序列來優(yōu)化搜索??赡軣o法對(duì)定義狀態(tài)機(jī)的副效應(yīng)函數(shù)執(zhí)行這些優(yōu)化,因?yàn)闋顟B(tài)機(jī)使用定序的一組輸入來創(chuàng)建定序的一組輸出。可以在框214中標(biāo)識(shí)副效應(yīng)函數(shù)從而使得程序員可以識(shí)別或批準(zhǔn)副效應(yīng)函數(shù)的使用。如果在框216中程序員不打算使用副效應(yīng)函數(shù),則過程可以返回至框208,在那里程序員可以編輯源代碼。如果在框216中程序員選擇忽略標(biāo)識(shí)消息并且在框218中不執(zhí)行優(yōu)化,則在框220 中可以存儲(chǔ)經(jīng)編譯代碼,在框224中執(zhí)行經(jīng)編譯代碼,并且在框226中操作狀態(tài)機(jī)。在在框212中未發(fā)現(xiàn)副效應(yīng)函數(shù)的某些實(shí)施例中,可以在框220中存儲(chǔ)程序并且在框222中執(zhí)行程序。在該實(shí)施例中,所執(zhí)行的程序可能不操作狀態(tài)機(jī)。在框218中選擇時(shí),某些實(shí)施例可以執(zhí)行各種優(yōu)化例程。在框2 中,編譯器可以標(biāo)識(shí)有限狀態(tài)機(jī)并且可以在框228中將各種有限狀態(tài)機(jī)優(yōu)化應(yīng)用于代碼。可以將若干不同的有限狀態(tài)機(jī)優(yōu)化應(yīng)用于代碼來優(yōu)化有限狀態(tài)機(jī)的性能。這些優(yōu)化包括Hopcrof最小化算法、使用隱含表以及Moore簡(jiǎn)化過程。也可以將其他優(yōu)化機(jī)制應(yīng)用于狀態(tài)機(jī)并且可以最小化存儲(chǔ)器消耗,提升響應(yīng)事件,減少代碼大小以及其他性能增強(qiáng)。圖3是示出可以使用數(shù)據(jù)庫查詢語言來實(shí)現(xiàn)的狀態(tài)機(jī)的示例實(shí)施例300的圖示。實(shí)施例300的狀態(tài)機(jī)示出簡(jiǎn)單的反饋循環(huán)。輸入302進(jìn)入存儲(chǔ)器304,存儲(chǔ)器可以存儲(chǔ)當(dāng)前狀態(tài)。變換函數(shù)306可以產(chǎn)生輸出308和新的狀態(tài)310。新的狀態(tài)310被反饋回到存儲(chǔ)器304中??梢远x實(shí)施例300的狀態(tài)機(jī)的反饋循環(huán),其中輸入302被定義為集合,而函數(shù) 306的結(jié)果可以被定義為(輸出和狀態(tài))對(duì)的集合。以上定義的函數(shù)可以將實(shí)施例300表達(dá)為狀態(tài)χ輸入*x(狀態(tài)χ輸入一輸出*x狀態(tài))一(輸出χ狀態(tài))*輸入302可以被定義為輸入的推集合。輸入的推集合在啟動(dòng)函數(shù)306之前可以等待直到接收到新的輸入。存儲(chǔ)器304可以將狀態(tài)310的改變與輸入302的改變同步。圖4是示出簡(jiǎn)單狀態(tài)機(jī)的示例實(shí)施例400的圖示。實(shí)施例400是可以僅使用數(shù)據(jù)庫查詢語言來實(shí)現(xiàn)的雙態(tài)狀態(tài)機(jī)的簡(jiǎn)單示例。實(shí)施例400的狀態(tài)機(jī)是可以分析數(shù)據(jù)庫表和移除表的奇數(shù)行的狀態(tài)機(jī)。該狀態(tài)機(jī)具有兩個(gè)狀態(tài)。第一狀態(tài)404是‘偶’而第二狀態(tài)406是‘奇’。從狀態(tài)402到狀態(tài)404的轉(zhuǎn)移函數(shù)具有‘值’的輸入406和‘返回(值),的輸出408。從狀態(tài)404到狀態(tài)402的轉(zhuǎn)移函數(shù)具有‘值’的輸入410和‘空(),的輸出412。實(shí)施例400的狀態(tài)機(jī)可以用C#表示為
      class OnlyEvenElements<T> {
      bool Even = true; IEnumerable<T> Next (T value) { if(Even){ Even=false; return Return(value); } else { Even^true; return Empty<T>();}
      }以上的類OnlyEvenElements (僅偶元素)使用由IEnumerableCD定義的輸入集合并產(chǎn)生IEnumerableCD中的項(xiàng)的偶數(shù)元素的輸出。狀態(tài)機(jī)的狀態(tài)是布爾表達(dá)式非偶即奇,其中奇數(shù)被定義為Even = false (偶=假)。
      對(duì)象‘ IEnumerable<T>’可以表示來自集合T的單個(gè)值,而運(yùn)算符‘Next’可以將集合遞增至該集合中的下一對(duì)象。集合具有數(shù)據(jù)類型T。隨后執(zhí)行狀態(tài)機(jī),保留數(shù)據(jù)類型T的偶數(shù)編號(hào)元素而丟棄奇數(shù)編號(hào)元素。由OnlyEvenElementsCD表示的狀態(tài)機(jī)將難以使用其他方法來編寫,但當(dāng)數(shù)據(jù)庫查詢語言用來表達(dá)狀態(tài)機(jī)時(shí)得到單個(gè)且優(yōu)雅的解決方法以上對(duì)本發(fā)明主題的描述是出于說明和描述的目的而提出的。它不旨在窮舉本主題或?qū)⒈局黝}限于所公開的精確形式,且鑒于以上教導(dǎo)其它修改和變形都是可能的。選擇并描述實(shí)施方式來最好地解釋本發(fā)明的原理及其實(shí)踐應(yīng)用,從而使本領(lǐng)域的其它技術(shù)人員能夠在各種實(shí)施方式和各種適于所構(gòu)想的特定用途的修改中最好地利用本發(fā)明。所附權(quán)利要求書旨在包括除受現(xiàn)有技術(shù)所限的范圍之外的其它替換實(shí)施方式。
      權(quán)利要求
      1.一種系統(tǒng),包括 處理器(108);數(shù)據(jù)庫查詢語言處理器(126),用于接收包括含有事件流的事件對(duì)象的輸入定義以及包括變換函數(shù)和創(chuàng)建輸出事件流的綁定運(yùn)算符;所述系統(tǒng)被配置成執(zhí)行一種包括以下動(dòng)作的方法通過定義帶有副效應(yīng)的所述變換函數(shù)來表示狀態(tài)機(jī)O08),所述副效應(yīng)定義所述狀態(tài)機(jī)中的至少一個(gè)狀態(tài);通過提供所述輸入定義并使用所述數(shù)據(jù)庫查詢語言處理器來對(duì)所述輸入定義執(zhí)行所述變換函數(shù)來操作所述狀態(tài)機(jī)(224)。
      2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫查詢語言處理器還 識(shí)別所述函數(shù)中的所述副效應(yīng)。
      3.如權(quán)利要求2所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫查詢語言處理器還 提供關(guān)于所述副效應(yīng)的用戶通知。
      4.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述狀態(tài)機(jī)具有 一組狀態(tài);定義從第一狀態(tài)變?yōu)榈诙顟B(tài)的條件的轉(zhuǎn)移函數(shù); 產(chǎn)生在給定狀態(tài)和輸入下的輸出的輸出函數(shù); 所述函數(shù)包括所述轉(zhuǎn)移函數(shù)。
      5.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述輸入定義是推輸入。
      6.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述輸入定義是拉輸入。
      7.如權(quán)利要求4所述的系統(tǒng),其特征在于,所述一組狀態(tài)包括開始狀態(tài)和結(jié)束狀態(tài)。
      8.如權(quán)利要求7所述的系統(tǒng),其特征在于,還包括中間狀態(tài)。
      9.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫查詢語言處理器包括 包括用于映射、過濾、綁定和交叉操作的運(yùn)算符的一組標(biāo)準(zhǔn)查詢運(yùn)算符;對(duì)包括具有數(shù)據(jù)類型的項(xiàng)的集合的序列數(shù)據(jù)類型執(zhí)行所述運(yùn)算符的所述數(shù)據(jù)庫查詢語言處理器。
      10.如權(quán)利要求9所述的系統(tǒng),其特征在于,所述數(shù)據(jù)庫查詢語言處理器還 從所述函數(shù)中識(shí)別所述狀態(tài)機(jī);以及在執(zhí)行所述狀態(tài)機(jī)時(shí)執(zhí)行有限狀態(tài)機(jī)優(yōu)化。
      11.如權(quán)利要求10所述的系統(tǒng),其特征在于,所述優(yōu)化是下列各項(xiàng)組成的組中的一個(gè) Hopcroft最小化算法;隱含表;以及 Moore簡(jiǎn)化過程。
      12.一種方法,包括通過定義帶有副效應(yīng)的函數(shù)來表示狀態(tài)機(jī)O04),所述副效應(yīng)定義所述狀態(tài)機(jī)中的至少一個(gè)狀態(tài);用數(shù)據(jù)庫查詢語言來表達(dá)所述函數(shù)O08); 定義包括事件序列的所述狀態(tài)機(jī)的輸入;使用所述輸入用所述數(shù)據(jù)庫查詢語言來執(zhí)行所述狀態(tài)機(jī)(224)。
      13.如權(quán)利要求12所述的方法,其特征在于,還包括 將所述函數(shù)編譯成經(jīng)編譯代碼;以及在所述編譯期間檢測(cè)所述函數(shù)中的所述副效應(yīng)。
      14.如權(quán)利要求13所述的方法,其特征在于,還包括 在用戶界面中呈現(xiàn)注明所述副效應(yīng)的警告。
      15.如權(quán)利要求13所述的方法,其特征在于,還包括 對(duì)所述經(jīng)編譯代碼執(zhí)行有限狀態(tài)機(jī)優(yōu)化。
      全文摘要
      本發(fā)明描述了用數(shù)據(jù)庫運(yùn)算符的狀態(tài)機(jī)表達(dá)。狀態(tài)機(jī)可以使用數(shù)據(jù)庫查詢語言的事件驅(qū)動(dòng)對(duì)象來表示??梢詫碜詳?shù)據(jù)庫查詢語言的綁定運(yùn)算符用作狀態(tài)轉(zhuǎn)移函數(shù),其中轉(zhuǎn)移函數(shù)具有定義狀態(tài)的副效應(yīng)。對(duì)象可以用事件驅(qū)動(dòng)表達(dá)式和運(yùn)算符來操縱并且執(zhí)行原本對(duì)于簡(jiǎn)單狀態(tài)機(jī)而言復(fù)雜的操作。
      文檔編號(hào)G05B19/048GK102323772SQ20111009610
      公開日2012年1月18日 申請(qǐng)日期2011年4月1日 優(yōu)先權(quán)日2010年4月5日
      發(fā)明者B·C·貝克曼, D·A·馬諾列斯庫, H·J·M·梅杰, J·W·戴爾, 格格 J·范 申請(qǐng)人:微軟公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1