聲明性程序的增量式編譯的制作方法
【專利說明】聲明性程序的増量式編譯
[0001]
[0002]傳統(tǒng)上,軟件創(chuàng)作者使用源代碼來生成程序。程序然后可被編譯并構(gòu)建,此后程序被運行來評估程序的行為。然而,對于程序的增量式創(chuàng)作而言,更為重要的是程序創(chuàng)作者頻繁地(如果不是持續(xù)地)知道他們剛構(gòu)建了什么,以及因此增量式創(chuàng)作環(huán)境提供關(guān)于至今為止生成的代碼的行為的頻繁視圖。存在兩種常規(guī)方式來提供這種增量式創(chuàng)作環(huán)境。
[0003]—種方式是創(chuàng)作者使用在程序被部署之后將被使用的相同的解釋環(huán)境。這允許有利于解釋器而避免編譯步驟。然而,這將要求與程序一起交付的運行時包括相同的解釋環(huán)境。從而,程序?qū)⑴c包括被用于創(chuàng)作的相同解釋器的重要運行時一起被交付。在運行時,解釋器也將被用于解釋該程序。
[0004]另一種方式是使用富創(chuàng)作環(huán)境,在富創(chuàng)作環(huán)境中創(chuàng)作者創(chuàng)建源代碼,且對于每個創(chuàng)作增量具有單獨的編譯和運行步驟,這允許創(chuàng)作者看到至此為止該程序表現(xiàn)如何。在某些環(huán)境中,每當程序創(chuàng)作者對程序作出改變時,該單獨的編譯和運行步驟可被自動執(zhí)行。即使如此,整個程序常常被重編譯。被編譯的程序越大,編譯步驟花費的時間越長,從而劣化增量式創(chuàng)作體驗。
[0005]當然,如果例如程序中有有限數(shù)量的模塊,并且它們以已知的方式交互且創(chuàng)作者恰好知道創(chuàng)作者正在改變模塊的方式不會影響其他模塊,則創(chuàng)作者可避免重新編譯整個程序。在該情況下,創(chuàng)作者可能不需要重新編譯整個程序,但是將必定重新編譯正被創(chuàng)作的模塊。然而,減少正被編譯的程序的粒度的機會是有限度的。這些限度取決于創(chuàng)作者可用的知識以及程序的整體粒度(如模塊)。
[0006]簡要概沐
[0007]本文描述的至少一些實施例涉及重算用戶接口的增量式編譯。作為一示例,該重算用戶接口可以是一電子數(shù)據(jù)表程序,但是這些原理可適用于經(jīng)變換鏈與數(shù)據(jù)源互連的數(shù)據(jù)宿的任何可視化。變換鏈包括多個聲明性變換。通過對變換鏈的聲明性變換的分析生成依賴關(guān)系圖。
[0008]當用戶與重算用戶接口交互時,用戶可對變換鏈造成一個或多個改變。例如,用戶可能造成對聲明性變換的添加、去除或修改。在電子數(shù)據(jù)表的情況下,用戶可編輯、添加或從電子數(shù)據(jù)表單元格中移除表達式。在一替代的重算用戶接口(其中用戶與可視化的控件交互)中,用戶可能通過對控件的操縱來致使聲明性變換改變。
[0009]作為響應(yīng),變換鏈的經(jīng)變更的部分被重新分析。由于聲明性變換傾向于在變換的粒度上被編輯,且由于聲明性變換可在典型地不影響其他變換的同時被編輯,與變換相關(guān)聯(lián)的依賴關(guān)系可被標識。編譯器然后可編譯一個或多個受影響的依賴關(guān)系,而無需編譯整個重算用戶接口。
[0010]該概述不旨在標識所要求保護的主題的關(guān)鍵特征或基本特征,也不旨在被用來幫助確定所要求保護的主題的范圍。
[0011]附圖簡沐
[0012]為了描述可獲得以上記載的及其他好處和特征的方式,將參照附圖呈現(xiàn)各個實施例的更具體描述??梢岳斫?,這些附圖只描繪了示例實施例,并且因此不被認為是對其范圍的限制,將通過使用附圖并利用附加特征和細節(jié)來描述和解釋各實施例,在附圖中:
[0013]圖1抽象地例示出其中可采用本文描述的一些實施例的計算系統(tǒng);
[0014]圖2抽象地例示出示例重算用戶接口,它例示出帶有中介變換的若干數(shù)據(jù)源和數(shù)據(jù)宿,且被用作為解釋本文所述的更寬泛原理而提供的具體示例;
[0015]圖3例示出示例編譯環(huán)境,該示例編譯環(huán)境包括訪問變換鏈以及產(chǎn)生編譯代碼以及依賴關(guān)系鏈的編譯器;以及
[0016]圖4例示出用于編譯重算用戶接口的變換鏈的方法的流程圖;
[0017]圖5例示出用于增量式編譯重算用戶接口的方法的流程圖。
[0018]圖6例示出其中可采用本發(fā)明的原理的環(huán)境,該環(huán)境包括構(gòu)造依賴于輸入數(shù)據(jù)的視圖合成的數(shù)據(jù)驅(qū)動的合成框架(composit1n framework);
[0019]圖7例示出表示圖6的環(huán)境的一個示例的流水線環(huán)境;
[0020]圖8圖示地例示出圖7的流水線的數(shù)據(jù)部分的一實施例;
[0021]圖9圖示地例示出圖7的流水線的分析部分的一實施例;以及
[0022]圖10圖示地例示出圖7的流水線的視圖部分的一實施例。
[0023]詳細描沐
[0024]本文所述的實施例涉及重算用戶接口的增量式編譯。作為一示例,該重算用戶接口可以是一電子數(shù)據(jù)表程序,但是這些原理可適用于經(jīng)變換鏈與數(shù)據(jù)源互連的數(shù)據(jù)宿的任何可視化。變換鏈包括多個聲明性變換。通過對變換鏈的聲明性變換的分析生成依賴關(guān)系圖。
[0025]當用戶與重算用戶接口交互時,用戶可對變換鏈造成一個或多個改變。例如,用戶可能造成對聲明性變換的添加、去除或修改。在電子數(shù)據(jù)表的情況下,用戶可編輯、添加表達式或從電子數(shù)據(jù)表單元格中移除表達式。在一替代的重算用戶接口(其中用戶與可視化的控件交互)中,用戶可能通過對控件的操縱來致使聲明性變換改變。
[0026]作為響應(yīng),變換鏈的經(jīng)變更部分被重新分析。由于聲明性變換傾向于在變換的粒度上被編輯,且由于聲明性變換可在非典型地不影響其他變換的同時被編輯,與變換相關(guān)聯(lián)的依賴關(guān)系可被標識。編譯器然后可編譯一個或多個受影響的依賴關(guān)系,而無需編譯整個重算用戶接口。
[0027]將參考圖1來描述對計算系統(tǒng)的一些介紹性討論。然后,將參考圖2至圖4描述重算用戶接口的變換鏈的編譯。然后將參考圖5描述增量式編譯。最后,將參考圖6至圖10來描述示例重算用戶接口。
[0028]計算系統(tǒng)現(xiàn)在越來越多地采取多種多樣的形式。例如,計算系統(tǒng)可以是手持式設(shè)備、電器、膝上型計算機、臺式計算機、大型機、分布式計算系統(tǒng)或甚至常規(guī)上不被認為是計算系統(tǒng)的設(shè)備。在本說明書以及權(quán)利要求書中,術(shù)語“計算系統(tǒng)”被廣義地定義為包括任何設(shè)備或系統(tǒng)(或其組合),該設(shè)備或系統(tǒng)包含至少一個物理有形的處理器以及其上能具有可由處理器執(zhí)行的計算機可執(zhí)行指令的物理有形的存儲器。存儲器可以采取任何形式,并可以取決于計算系統(tǒng)的性質(zhì)和形式。計算系統(tǒng)可以分布在網(wǎng)絡(luò)環(huán)境中,并可包括多個組分計算系統(tǒng)。
[0029]如圖1所示,在其最基本的配置中,計算系統(tǒng)100通常包括至少一個處理單元102和存儲器104。存儲器104可以是物理系統(tǒng)存儲器,該物理系統(tǒng)存儲器可以是易失性、非易失性、或兩者的某種組合。術(shù)語“存儲器”也可在此用來指示諸如物理存儲介質(zhì)這樣的非易失性大容量存儲器。如果計算系統(tǒng)是分布式的,則處理、存儲器和/或存儲能力也可以是分布式的。如本文中所使用的,術(shù)語“可執(zhí)行模塊”或“可執(zhí)行組件”可以指可以在計算系統(tǒng)上執(zhí)行的軟件對象、例程或方法。此處所描述的不同組件、模塊、引擎以及服務(wù)可以實現(xiàn)為在計算系統(tǒng)上執(zhí)行的對象或進程(例如,作為分開的線程)。
[0030]在隨后的描述中,參考由一個或多個計算系統(tǒng)執(zhí)行的動作描述了各實施例。如果這樣的動作是以軟件實現(xiàn)的,則執(zhí)行動作的相關(guān)聯(lián)計算系統(tǒng)的一個或多個處理器響應(yīng)于已經(jīng)執(zhí)行了計算機可執(zhí)行指令來引導(dǎo)計算系統(tǒng)的操作。例如,這樣的計算機可執(zhí)行指令可以在形成計算機程序產(chǎn)品的一個或多個計算機可讀介質(zhì)上實現(xiàn)。這樣的操作的示例涉及對數(shù)據(jù)的操縱。計算機可執(zhí)行指令(以及被操縱的數(shù)據(jù))可被存儲在計算系統(tǒng)100的存儲器104中。計算系統(tǒng)100還可包含允許計算系統(tǒng)100例如通過網(wǎng)絡(luò)110與其他消息處理器通信的通信信道108。計算系統(tǒng)100還包括顯示器112,顯示器112可被用于向用戶顯示視覺表不。
[0031]本文中描述的各實施例可包括或利用專用或通用計算機,該專用或通用計算機包括諸如例如一個或多個處理器和系統(tǒng)存儲器等計算機硬件,如以下更詳細討論的。本文中描述的各實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計算機可讀介質(zhì)。這樣的計算機可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用介質(zhì)。存儲計算機可執(zhí)行指令的計算機可讀介質(zhì)是物理存儲介質(zhì)。承載計算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施例可包括至少兩種顯著不同的計算機可讀介質(zhì):計算機存儲介質(zhì)和傳輸介質(zhì)。
[0032]計算機存儲介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤存儲、磁盤存儲或其他磁存儲設(shè)備、或可用于存儲計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜嬎銠C訪問的任何其他有形介質(zhì)。
[0033]“網(wǎng)絡(luò)”被定義為使得電子數(shù)據(jù)能夠在計算機系統(tǒng)和/或模塊和/或其它電子設(shè)備之間傳輸?shù)囊粋€或多個數(shù)據(jù)鏈路。當信息通過網(wǎng)絡(luò)或另一個通信連接(硬連線、無線、或者硬連線或無線的組合)傳輸或提供給計算機時,該計算機將該連接適當?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可以包括可用于攜帶計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的期望程序代碼裝置并可被通用或?qū)S糜嬎銠C訪問的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合應(yīng)當也被包括在計算機可讀介質(zhì)的范圍內(nèi)。
[0034]此外,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動傳輸?shù)接嬎銠C存儲介質(zhì)(或反之亦然)。例如,通過網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可以在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中被緩沖,然后最終被傳輸至計算機系統(tǒng)RAM和/或