計(jì)算機(jī)系統(tǒng)處的較不易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)。因而,應(yīng)當(dāng)理解,計(jì)算機(jī)存儲(chǔ)介質(zhì)可被包括在還利用(或甚至主要利用)傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。
[0035]計(jì)算機(jī)可執(zhí)行指令例如包括,當(dāng)在處理器處執(zhí)行時(shí)使通用計(jì)算機(jī)、專(zhuān)用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼、諸如匯編語(yǔ)言之類(lèi)的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專(zhuān)用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書(shū)中定義的主題不必限于上述特征或動(dòng)作。更具體而言,上述特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開(kāi)的。
[0036]本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類(lèi)型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)、路由器、交換機(jī)等等。本發(fā)明也可在其中通過(guò)網(wǎng)絡(luò)鏈接(或者通過(guò)硬連線數(shù)據(jù)鏈路、無(wú)線數(shù)據(jù)鏈路,或者通過(guò)硬連線和無(wú)線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)施。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。
[0037]在本說(shuō)明書(shū)以及權(quán)利要求書(shū)中,“重算用戶(hù)接口”是用戶(hù)可與之交互的且出現(xiàn)于其中存在一個(gè)或多個(gè)數(shù)據(jù)源和一個(gè)或多個(gè)數(shù)據(jù)宿的環(huán)境中的接口。此外,存在一組變換,每個(gè)變換可被聲明性地定義在一個(gè)或多個(gè)數(shù)據(jù)源與一數(shù)據(jù)宿之間。例如,一個(gè)數(shù)據(jù)源的輸出被饋入變換,變換的結(jié)果然后被提供給數(shù)據(jù)宿,從而潛在地導(dǎo)致對(duì)用戶(hù)的可視化中的某種改變。
[0038]變換是“聲明性的”,意義在于用戶(hù)無(wú)需具體的編碼知識(shí)就能編寫(xiě)定義變換的聲明。由于變換被聲明性地定義,用戶(hù)可改變聲明性變換。作為響應(yīng),重算被執(zhí)行,導(dǎo)致可能不同的數(shù)據(jù)被提供給數(shù)據(jù)宿。
[0039]重算用戶(hù)接口的一種經(jīng)典示例是電子數(shù)據(jù)表文檔。電子數(shù)據(jù)表文檔包括單元格網(wǎng)格。最初,單元格是空的,從而電子數(shù)據(jù)表程序的任一單元格都具有成為數(shù)據(jù)源或數(shù)據(jù)宿的可能性,這取決于用戶(hù)輸入的聲明性表達(dá)式的含義和上下文。例如,用戶(hù)可能選擇一給定單元格,并將一表達(dá)式鍵入該單元格中。該表達(dá)式可能與被賦予該單元格的表達(dá)出的標(biāo)量值一樣簡(jiǎn)單。該單元格可稍后被用作數(shù)據(jù)源。替代地,某一給定單元格的表達(dá)式可能采用等式的形式,其中輸入值取自一個(gè)或多個(gè)其他單元格。在該情況下,該給定單元格是顯示變換結(jié)果的數(shù)據(jù)宿。然而,在持續(xù)創(chuàng)作期間,該單元格可被用作用于創(chuàng)作者聲明性作出的又一些其他變換的數(shù)據(jù)宿。
[0040]電子數(shù)據(jù)表文檔的創(chuàng)作者不需要是命令式代碼方面的專(zhuān)家。創(chuàng)作者僅僅是作出定義變換的聲明,以及選擇相應(yīng)的數(shù)據(jù)宿和數(shù)據(jù)源。下文描述的圖6至10提供了更一般化的聲明性創(chuàng)作環(huán)境,其中描述了更一般化的重算用戶(hù)接口。在該后續(xù)描述的環(huán)境中,可視化的控件可充當(dāng)數(shù)據(jù)源和數(shù)據(jù)宿兩者。此外,可通過(guò)對(duì)那些控件的簡(jiǎn)單操縱來(lái)更直觀地創(chuàng)作聲明性變換。
[0041]現(xiàn)在將參考圖2至圖4描述重算用戶(hù)接口的一示例編譯機(jī)制。圖2抽象地例示出一示例重算用戶(hù)接口 200,它是為解釋本文所述的更寬泛原理而提供的具體示例。重算用戶(hù)接口 200僅僅是一示例,因?yàn)楸疚乃龅脑砜杀粦?yīng)用于任何重算用戶(hù)接口來(lái)為無(wú)數(shù)種類(lèi)的應(yīng)用創(chuàng)建無(wú)數(shù)種類(lèi)的重算用戶(hù)接口。
[0042]重算用戶(hù)接口 200包括若干聲明性變換211至215。圍繞表示變換211至215的箭頭中每一個(gè)箭頭的虛線環(huán)象征變換各自采用聲明性形式。
[0043]在圖2的該具體示例中,變換211包括相應(yīng)的數(shù)據(jù)源201和數(shù)據(jù)宿202。注意,一個(gè)變換的數(shù)據(jù)宿也可以是另一變換的數(shù)據(jù)源。例如,變換211的數(shù)據(jù)宿202也充當(dāng)變換212的數(shù)據(jù)源。此外,變換可具有多個(gè)數(shù)據(jù)源。從而,可使得變換鏈?zhǔn)欠謱拥?,從而相?dāng)復(fù)雜。例如,變換212包括數(shù)據(jù)源202和數(shù)據(jù)宿203。數(shù)據(jù)宿203包括兩個(gè)數(shù)據(jù)源;即變換212的數(shù)據(jù)源202以及變換214的數(shù)據(jù)源205。也就是說(shuō),也許單個(gè)變換將兩個(gè)數(shù)據(jù)源202和205引入數(shù)據(jù)宿203。變換213包括數(shù)據(jù)源204和數(shù)據(jù)宿205。
[0044]如果重算用戶(hù)接口是例如電子數(shù)據(jù)表文檔,則各種數(shù)據(jù)源/宿201至205可能是電子數(shù)據(jù)表單元格,在這種情況下,變換表示將與每個(gè)數(shù)據(jù)宿相關(guān)聯(lián)的表達(dá)式。每個(gè)表達(dá)式的輸出被顯示在單元格內(nèi)。從而,在電子數(shù)據(jù)表的情況下。數(shù)據(jù)源/宿可能是復(fù)雜的可視化的控件,既包括到變換鏈的輸入?yún)?shù)也包括來(lái)自變換鏈的輸出參數(shù)。例如,在圖2中,存在從數(shù)據(jù)源205引導(dǎo)到數(shù)據(jù)宿201中的附加的聲明性變換215。從而,數(shù)據(jù)源/宿201可能可視化表示來(lái)自變換215的輸出的信息,以及向其他數(shù)據(jù)宿提供進(jìn)一步數(shù)據(jù)。
[0045]重算用戶(hù)接口不需要具有可視化控件。一個(gè)示例是意圖執(zhí)行基于變換的計(jì)算的重算用戶(hù)接口,它消耗源數(shù)據(jù)以及更新宿數(shù)據(jù),正常情況下不向用戶(hù)顯示關(guān)于計(jì)算的信息。例如,該重算用戶(hù)接口可能支持后臺(tái)計(jì)算。第二示例是具有操作諸如流程控制示例中的閥之類(lèi)的外部執(zhí)行器(actuator)的輸出控件的重算用戶(hù)接口。這樣的控件類(lèi)似于顯示控件,因?yàn)樗鼈兊臓顟B(tài)受到變換計(jì)算的結(jié)果以及信號(hào)輸入的控制。然而,這里,輸出是對(duì)某一設(shè)備的控制信號(hào),而不是對(duì)顯示器的可視化。例如,考慮用于控制機(jī)器人的重算用戶(hù)接口。該重算用戶(hù)接口可能具有針對(duì)依賴(lài)于輸入機(jī)器人傳感器(如伺服位置和速度、超聲測(cè)距測(cè)量等)的機(jī)器人動(dòng)作和行為的規(guī)則?;蛘呖紤]基于獲取來(lái)自設(shè)備傳感器的信號(hào)(如閥位置、流體流速等)的重算用戶(hù)接口的流程控制應(yīng)用。
[0046]圖3例示出包括訪問(wèn)變換鏈301的編譯器310的示例編譯環(huán)境300。變換鏈301的一示例是圖2的變換鏈200。圖4例示出用于編譯重算用戶(hù)接口的變換鏈的方法400的流程圖。方法400可由圖3的編譯器310執(zhí)行。在一個(gè)實(shí)施例中,方法400可響應(yīng)于處理器(一個(gè)或多個(gè))102執(zhí)行體現(xiàn)在一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上的計(jì)算機(jī)可執(zhí)行指令由計(jì)算系統(tǒng)100來(lái)執(zhí)行。
[0047]方法400包括就依賴(lài)關(guān)系來(lái)分析重算用戶(hù)接口的變換鏈(動(dòng)作401)。例如,參考圖2,編譯器300可分析變換211至215中的每一個(gè)。變換是聲明性的,因此依賴(lài)關(guān)系可比使用命令式計(jì)算機(jī)語(yǔ)言表達(dá)變換的情況更容易地被提取。
[0048]基于該分析,在變換中所引用的實(shí)體之間創(chuàng)建依賴(lài)關(guān)系圖(動(dòng)作402)。本質(zhì)上,依賴(lài)關(guān)系具有源實(shí)體和目標(biāo)實(shí)體,源實(shí)體表示某一事件,目標(biāo)實(shí)體表示對(duì)該目標(biāo)實(shí)體的評(píng)估依賴(lài)于該事件。該事件的示例可以是一用戶(hù)事件,其中用戶(hù)以特定的方式與重算用戶(hù)接口交互。作為另一示例,該事件可以是一實(shí)體間事件,其中如果源實(shí)體被評(píng)估,則該依賴(lài)關(guān)系的目標(biāo)實(shí)體也應(yīng)被評(píng)估。
[0049]編譯器然后基于該依賴(lài)關(guān)系圖來(lái)創(chuàng)建較低級(jí)別的執(zhí)行步驟(動(dòng)作403)。較低級(jí)別的執(zhí)行步驟可以是例如命令式語(yǔ)言代碼。命令式語(yǔ)言代碼適合于響應(yīng)來(lái)檢測(cè)事件、引用某一事件圖表來(lái)確定要執(zhí)行的功能、以及執(zhí)行該功能。因此,依賴(lài)關(guān)系圖中的每一個(gè)依賴(lài)關(guān)系可被簡(jiǎn)化為一功能。依賴(lài)關(guān)系圖本身可被提供給運(yùn)行時(shí)(動(dòng)作404)。命令式語(yǔ)言代碼可以是例如腳本語(yǔ)言,諸如JAVASCRIPT。然而,本文所述的原理并不限制命令式語(yǔ)言代碼是任何特定語(yǔ)言。
[0050]作為一示例,圖3例示出編譯器310也生成較低級(jí)別代碼311。這樣的較低級(jí)別代碼311包括對(duì)變換鏈中每個(gè)變換的編譯。例如,較低級(jí)別代碼311被例示為包括表示變換鏈中每個(gè)變換的編譯的元素321。在圖2的上下文中,元素321將包括對(duì)變換211至215中每個(gè)變換的編譯。較低級(jí)別代碼311還包括各種各樣的功能322。對(duì)依賴(lài)關(guān)系圖中的每個(gè)依賴(lài)關(guān)系生成一功能。功能可以是命令式語(yǔ)言功能。
[0051]當(dāng)命令式語(yǔ)言運(yùn)行時(shí)檢測(cè)到依賴(lài)關(guān)系圖中所列出的某一事件時(shí),經(jīng)編譯的功能322內(nèi)的相應(yīng)功能也被執(zhí)行。因此,隨著所有變換被適當(dāng)?shù)鼐幾g以及隨著關(guān)于特定事件的每個(gè)依賴(lài)關(guān)系被專(zhuān)門(mén)的功能所強(qiáng)制執(zhí)行,聲明性重算用戶(hù)接口被適當(dāng)?shù)乇硎緸槊钍秸Z(yǔ)言代碼。
[0052]因此,已經(jīng)描述了一種用于編譯聲明性重算用戶(hù)接口的有效機(jī)制。此外,運(yùn)行時(shí)被提供有依賴(lài)關(guān)系圖,而不是更廣泛的解釋器。
[0053]參考圖2至圖4描述的環(huán)境不僅允許對(duì)重算用戶(hù)接口的編譯,還允許對(duì)重算用戶(hù)接口的增量式改變被增量式地編譯。這促進(jìn)了增量式創(chuàng)作體驗(yàn),其中用戶(hù)可更快速地驗(yàn)證重算用戶(hù)接口的行為而不要求解釋器與最終產(chǎn)品一起部署,且不要求在增量式改變之間對(duì)重算用戶(hù)接口進(jìn)行完全重編譯。
[0054]當(dāng)用戶(hù)與重算用戶(hù)接口交互時(shí),用戶(hù)可對(duì)變換鏈造成一個(gè)或多個(gè)改變。例如,用戶(hù)可能造成對(duì)聲明性變換的添加、去除或修改。在電子數(shù)據(jù)表的情況下,用戶(hù)可編輯、添加或從電子數(shù)據(jù)表單元格中移除表達(dá)式。在一替代的重算用戶(hù)接口(其中用戶(hù)與可視化的控件交互)中,用戶(hù)可能通過(guò)對(duì)控件的操縱來(lái)致使聲明性變換改變。
[0055]作為響應(yīng),變換鏈的經(jīng)變更部分被重新分析。由于聲明性變換傾向于在變換的粒度上被編輯,且由于聲明性變換可在非典型地不影響其他變換的同時(shí)被編輯,與變換相關(guān)聯(lián)的依賴(lài)關(guān)系可被標(biāo)識(shí)。編譯器然后可編譯一個(gè)或多個(gè)受影響的依賴(lài)關(guān)系,而無(wú)需編譯整個(gè)重算用戶(hù)接口。
[0056]參考圖3,編譯環(huán)境300還包括用于幫助用戶(hù)創(chuàng)作包括變換鏈200或301的重算用戶(hù)接口的創(chuàng)作組件331。編譯環(huán)境3