用于計(jì)算用于在連續(xù)分布式構(gòu)建中有效高速緩存的校驗(yàn)和的方法和裝置制造方法
【專利摘要】用于確定配置文件的依賴關(guān)系是否已經(jīng)改變、以使得應(yīng)當(dāng)重新計(jì)算編譯策略的方法、系統(tǒng)和計(jì)算機(jī)可讀介質(zhì)。為個(gè)別配置文件計(jì)算局部構(gòu)建校驗(yàn)和。通過(guò)對(duì)通向配置文件的輸入路徑加上指示路徑是引用文件還是目錄的數(shù)據(jù)以及在配置文件本身上計(jì)算的校驗(yàn)和進(jìn)行排序,來(lái)計(jì)算局部構(gòu)建校驗(yàn)和。局部構(gòu)建校驗(yàn)和的傳遞閉包繼而用來(lái)計(jì)算全局構(gòu)建校驗(yàn)和;對(duì)局部構(gòu)建校驗(yàn)和進(jìn)行排序以便計(jì)算全局構(gòu)建校驗(yàn)和。如果全局構(gòu)建校驗(yàn)和與先前計(jì)算的全局構(gòu)建校驗(yàn)和不同,則應(yīng)當(dāng)重新計(jì)算編譯策略,因?yàn)檫@是編譯策略可能不再有效的信號(hào),例如因?yàn)樵谂渲梦募械囊恍┮蕾囮P(guān)系已經(jīng)改變。
【專利說(shuō)明】用于計(jì)算用于在連續(xù)分布式構(gòu)建中有效高速緩存的校驗(yàn)和的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明的方面涉及用于構(gòu)建軟件的方法、系統(tǒng)和計(jì)算機(jī)可讀介質(zhì)。具體而言,本發(fā)明的方面涉及計(jì)算校驗(yàn)和以確定為更早配置文件計(jì)算的構(gòu)建策略是否可以被重用于更晚配置文件。
【背景技術(shù)】
[0002]在開(kāi)發(fā)軟件時(shí),經(jīng)常首先以人類(lèi)可以容易理解的編程語(yǔ)言將其編寫(xiě)為編程代碼。編程代碼然后經(jīng)過(guò)編譯過(guò)程以便創(chuàng)建計(jì)算機(jī)可以容易理解的可執(zhí)行代碼。執(zhí)行編譯和鏈接過(guò)程以便生成可執(zhí)行代碼。計(jì)算機(jī)遵循可執(zhí)行代碼中的指令以便執(zhí)行所有計(jì)算機(jī)功能、包括顯示用戶界面、連接到因特網(wǎng)和執(zhí)行其它計(jì)算任務(wù)、比如實(shí)現(xiàn)字處理和web瀏覽、提供web服務(wù)等。
[0003]程序員使用與字處理程序相似的編輯器以便編寫(xiě)計(jì)算機(jī)軟件。編輯器通常允許程序員鍵入他們的程序、編譯程序并且運(yùn)行程序以便測(cè)試它。為了管理大型軟件程序,程序經(jīng)常被劃分成稱為模塊的分離單位。模塊是被編寫(xiě)為處置一個(gè)或者多個(gè)有關(guān)任務(wù)的計(jì)算機(jī)代碼,并且代碼經(jīng)常可以作為單個(gè)單位被一起管理。不同模塊然后可以被編寫(xiě)為管理特定任務(wù)。例如為了編寫(xiě)web瀏覽程序,可以有用于管理書(shū)簽的模塊、用于處置與因特網(wǎng)服務(wù)的通信的模塊等。
[0004]在編程代碼中編寫(xiě)的軟件程序或者模塊可以引用其它軟件程序或者模塊。這是一種用于編寫(xiě)計(jì)算機(jī)程序的高效方式,因?yàn)樗试S計(jì)算機(jī)程序員引用已經(jīng)創(chuàng)建的代碼、并且因此無(wú)需從暫存器重建所有代碼。取而代之,計(jì)算機(jī)程序員能夠并入或者依賴于其他人先前可能已經(jīng)編寫(xiě)的代碼部分或者庫(kù)。程序員然后可以關(guān)注于編寫(xiě)他們自己的具體軟件模塊的操作部分。
[0005]在從編程代碼生成可執(zhí)行代碼時(shí),代碼生成器需要知道編譯模塊的順序。依托于第二模塊的第一模塊應(yīng)當(dāng)在第二模塊之后被編譯。程序員編寫(xiě)配置文件以便向代碼生成器通知哪些配置文件依托或者依賴于其它配置文件。配置文件是聲明模塊的依賴關(guān)系的文檔,以便使得代碼生成器可以恰當(dāng)?shù)仨樞蚧K的編譯。配置文件因此聲明軟件模塊的依賴關(guān)系。軟件模塊的依賴關(guān)系可以影響模塊被編譯的順序化。在一些情況下,模塊并不相互依賴、因此可以被并行編譯。
[0006]傳統(tǒng)上,定義模塊為集合,其中項(xiàng)是單文件和/或其它模塊。如果有對(duì)模塊中的項(xiàng)中的任何項(xiàng)的改變,則需要重新編譯完整模塊。因而,也需要重新編譯依賴于重新編譯的特定模塊的所有模塊。另外,每當(dāng)重新編譯模塊時(shí)重新計(jì)算編譯計(jì)劃,該編譯計(jì)劃是用于編譯、鏈接和其它任務(wù)的策略。
[0007]這樣的重新編譯可能對(duì)于大型軟件產(chǎn)品而言計(jì)算成本高從而花費(fèi)寶貴時(shí)間和資源。因此希望有一種用于減少計(jì)算開(kāi)支的更好的重新編譯技術(shù)。在一種方式中,檢查文件的時(shí)間戳以確定重新編譯是否必需。如果時(shí)間戳自從先前編譯起尚未改變,則可以略過(guò)編譯過(guò)程,因?yàn)闊o(wú)對(duì)軟件模塊的更新或者改變。然而這樣的方式的一個(gè)缺點(diǎn)是如果未更新時(shí)間戳則不會(huì)在可執(zhí)行代碼中更新對(duì)軟件模塊中的編程代碼的改變。另外,時(shí)間戳中的錯(cuò)誤信號(hào)、例如在機(jī)器具有不同時(shí)間時(shí)可能導(dǎo)致非密封構(gòu)建,在這些非密封構(gòu)建中未包括一些依賴關(guān)系,從而導(dǎo)致不希望的結(jié)果。鑒于這樣的缺點(diǎn),尋求一種用于減少重新編譯的計(jì)算開(kāi)支的更好方式。
【發(fā)明內(nèi)容】
[0008]在本發(fā)明的一個(gè)方面中,本發(fā)明可以包括一種由數(shù)據(jù)處理裝置執(zhí)行的方法,該方法包括:創(chuàng)建用于第一構(gòu)建的第一編譯策略;使用第一編譯策略來(lái)執(zhí)行第一構(gòu)建;計(jì)算用于第一構(gòu)建的第一校驗(yàn)和;存儲(chǔ)第一編譯策略和第一校驗(yàn)和;計(jì)算用于第二構(gòu)建的第二校驗(yàn)和;確定第二校驗(yàn)和是否等于第一校驗(yàn)和;響應(yīng)于確定第二校驗(yàn)和不等于第一校驗(yàn)和,創(chuàng)建第二編譯策略;存儲(chǔ)第二編譯策略和第二校驗(yàn)和,并且使用第二編譯策略來(lái)執(zhí)行第二構(gòu)建;并且響應(yīng)于確定第二校驗(yàn)和等于第一校驗(yàn)和,取回第一編譯策略并且使用第一編譯策略來(lái)執(zhí)行第二構(gòu)建。
[0009]在本發(fā)明的又一方面中,該方法包括其中第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和;并且全局構(gòu)建校驗(yàn)和通過(guò)使用一個(gè)或者多個(gè)局部構(gòu)建校驗(yàn)和來(lái)計(jì)算。
[0010]在本發(fā)明的又一方面中,該方法包括確定為第一構(gòu)建計(jì)算的局部構(gòu)建校驗(yàn)和對(duì)于第二構(gòu)建尚未改變并且在第二編譯策略中重新使用第一編譯策略的與局部構(gòu)建校驗(yàn)和關(guān)聯(lián)的部分。
[0011]在本發(fā)明的又一方面中,該方法包括其中文件系統(tǒng)信息按照路徑名被排序以便計(jì)算局部構(gòu)建校驗(yàn)和。
[0012]在本發(fā)明的又一方面中,該方法包括其中文件系統(tǒng)信息包括校驗(yàn)和。
[0013]在本發(fā)明的又一方面中,該方法包括其中使用第一編譯策略來(lái)執(zhí)行第一構(gòu)建還包括檢查配置文件的內(nèi)容以確定依賴關(guān)系;并且為配置文件的每個(gè)依賴關(guān)系計(jì)算局部構(gòu)建校驗(yàn)和。
[0014]在本發(fā)明的又一方面中,該方法包括基于配置文件的依賴關(guān)系來(lái)計(jì)算傳遞閉包。
[0015]在本發(fā)明的又一方面中,該方法其中包括為計(jì)算的傳遞閉包的每個(gè)配置文件計(jì)算局部構(gòu)建校驗(yàn)和。
[0016]在本發(fā)明的又一方面中,該方法包括其中校驗(yàn)和通過(guò)使用XOR函數(shù)來(lái)計(jì)算。
[0017]在本發(fā)明的又一方面中,該方法包括其中計(jì)算第一校驗(yàn)和還包括執(zhí)行確定性排序;用確定性排序來(lái)計(jì)算局部構(gòu)建校驗(yàn)和;并且使用局部構(gòu)建校驗(yàn)和來(lái)計(jì)算第一校驗(yàn)和,第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和。
[0018]在本發(fā)明的另一方面中,本發(fā)明可以包括一種系統(tǒng),該系統(tǒng)包括:一個(gè)或者多個(gè)計(jì)算機(jī);耦合到一個(gè)或者多個(gè)計(jì)算機(jī)的計(jì)算機(jī)可讀介質(zhì),具有在其上存儲(chǔ)的指令,指令在由一個(gè)或者多個(gè)計(jì)算機(jī)執(zhí)行時(shí)使一個(gè)或者多個(gè)計(jì)算機(jī)執(zhí)行操作,操作包括:創(chuàng)建用于第一構(gòu)建的第一編譯策略;使用第一編譯策略來(lái)執(zhí)行第一構(gòu)建;計(jì)算用于第一構(gòu)建的第一校驗(yàn)和;存儲(chǔ)第一編譯策略和第一校驗(yàn)和;計(jì)算用于第二構(gòu)建的第二校驗(yàn)和;確定第二校驗(yàn)和是否等于第一校驗(yàn)和;響應(yīng)于確定第二校驗(yàn)和不等于第一校驗(yàn)和,創(chuàng)建第二編譯策略;存儲(chǔ)第二編譯策略和第二校驗(yàn)和并且使用第二編譯策略來(lái)執(zhí)行第二構(gòu)建;以及響應(yīng)于確定第二校驗(yàn)和等于第一校驗(yàn)和,取回第一編譯策略、并且使用第一編譯策略來(lái)執(zhí)行第二構(gòu)建。
[0019]在本發(fā)明的又一方面中,該系統(tǒng)包括其中第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和;并且全局構(gòu)建校驗(yàn)和通過(guò)使用一個(gè)或者多個(gè)局部構(gòu)建校驗(yàn)和來(lái)計(jì)算。
[0020]在本發(fā)明的又一方面中,該系統(tǒng)的計(jì)算機(jī)可讀介質(zhì)包括在其上存儲(chǔ)的附加指令,附加指令在由一個(gè)或者多個(gè)處理器執(zhí)行時(shí)使一個(gè)或者多個(gè)處理器執(zhí)行附加操作,附加操作包括:確定為第一構(gòu)建計(jì)算的局部構(gòu)建校驗(yàn)和對(duì)于第二構(gòu)建尚未改變,并且在第二編譯策略中重新使用第一編譯策略的與局部構(gòu)建校驗(yàn)和關(guān)聯(lián)的部分。
[0021]在本發(fā)明的又一方面中,該系統(tǒng)包括其中文件系統(tǒng)信息按照路徑名被排序以便計(jì)算局部構(gòu)建校驗(yàn)和。
[0022]在本發(fā)明的又一方面中,該系統(tǒng)包括其中文件系統(tǒng)信息包括校驗(yàn)和。
[0023]在本發(fā)明的又一方面中,該系統(tǒng)包括其中使用第一編譯策略來(lái)執(zhí)行第一構(gòu)建還包括檢查配置文件的內(nèi)容以確定依賴關(guān)系;并且為配置文件的每個(gè)依賴關(guān)系計(jì)算局部構(gòu)建校驗(yàn)和。
[0024]在本發(fā)明的又一方面中,該系統(tǒng)的計(jì)算機(jī)可讀介質(zhì)包括在其上存儲(chǔ)的附加指令,附加指令在由一個(gè)或者多個(gè)處理器執(zhí)行時(shí)使一個(gè)或者多個(gè)處理器執(zhí)行附加操作,附加操作包括:基于配置文件的依賴關(guān)系來(lái)計(jì)算傳遞閉包。
[0025]在本發(fā)明的又一方面中,該系統(tǒng)包括其中為計(jì)算的傳遞閉包的每個(gè)配置文件計(jì)算局部構(gòu)建校驗(yàn)和。
[0026]在本發(fā)明的又一方面中,該系統(tǒng)包括其中校驗(yàn)和通過(guò)使用XOR函數(shù)來(lái)計(jì)算。
[0027]在本發(fā)明的又一方面中,該系統(tǒng)包括其中計(jì)算第一校驗(yàn)和還包括執(zhí)行確定性排序;用確定性排序來(lái)計(jì)算局部構(gòu)建校驗(yàn)和;并且使用局部構(gòu)建校驗(yàn)和來(lái)計(jì)算第一校驗(yàn)和,第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和。
[0028]在本發(fā)明的另一方面中,本發(fā)明可以包括一種耦合到一個(gè)或者多個(gè)處理器的計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)具有在其上存儲(chǔ)的指令,指令在由一個(gè)或者多個(gè)計(jì)算機(jī)執(zhí)行時(shí)使一個(gè)或者多個(gè)計(jì)算機(jī)執(zhí)行操作,操作包括:創(chuàng)建用于第一構(gòu)建的第一編譯策略;使用第一編譯策略來(lái)執(zhí)行第一構(gòu)建;計(jì)算用于第一構(gòu)建的第一校驗(yàn)和;存儲(chǔ)第一編譯策略和第一校驗(yàn)和;計(jì)算用于第二構(gòu)建的第二校驗(yàn)和;確定第二校驗(yàn)和是否等于第一校驗(yàn)和;響應(yīng)于確定第二校驗(yàn)和不等于第一校驗(yàn)和,創(chuàng)建第二編譯策略;存儲(chǔ)第二編譯策略和第二校驗(yàn)和并且使用第二編譯策略來(lái)執(zhí)行第二構(gòu)建;以及響應(yīng)于確定第二校驗(yàn)和等于第一校驗(yàn)和,取回第一編譯策略、并且使用第一編譯策略來(lái)執(zhí)行第二構(gòu)建。
[0029]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和;并且全局構(gòu)建校驗(yàn)和通過(guò)使用一個(gè)或者多個(gè)局部構(gòu)建校驗(yàn)和來(lái)計(jì)算。
[0030]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括在其上存儲(chǔ)的附加指令,附加指令在由一個(gè)或者多個(gè)處理器執(zhí)行時(shí)使一個(gè)或者多個(gè)處理器執(zhí)行附加操作,附加操作包括:確定為第一構(gòu)建計(jì)算的局部構(gòu)建校驗(yàn)和對(duì)于第二構(gòu)建尚未改變并且在第二編譯策略中重新使用第一編譯策略的與局部構(gòu)建校驗(yàn)和關(guān)聯(lián)的部分。
[0031]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中文件系統(tǒng)信息按照路徑名被排序以便計(jì)算局部構(gòu)建校驗(yàn)和。
[0032]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中文件系統(tǒng)信息包括校驗(yàn)和。[0033]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中使用第一編譯策略來(lái)執(zhí)行第一構(gòu)建還包括檢查配置文件的內(nèi)容以確定依賴關(guān)系;并且為配置文件的每個(gè)依賴關(guān)系計(jì)算局部構(gòu)建校驗(yàn)和。
[0034]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括在其上存儲(chǔ)的附加指令,附加指令在由一個(gè)或者多個(gè)處理器執(zhí)行時(shí)使一個(gè)或者多個(gè)處理器執(zhí)行附加操作,附加操作包括:基于配置文件的依賴關(guān)系來(lái)計(jì)算傳遞閉包。
[0035]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中為計(jì)算的傳遞閉包的每個(gè)配置文件計(jì)算局部構(gòu)建校驗(yàn)和。
[0036]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中校驗(yàn)和使用XOR函數(shù)來(lái)計(jì)
笪
ο
[0037]在本發(fā)明的又一方面中,該計(jì)算機(jī)可讀介質(zhì)包括其中計(jì)算第一校驗(yàn)和還包括執(zhí)行確定性排序;用確定性排序計(jì)算局部構(gòu)建校驗(yàn)和;并且使用局部構(gòu)建校驗(yàn)和來(lái)計(jì)算第一校驗(yàn)和,第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和。
[0038]討論的方法、裝置和計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的進(jìn)一步適用范圍將從下文給出的具體描述中變得清楚。然而應(yīng)當(dāng)理解具體描述和具體示例在指示實(shí)施例之時(shí)僅通過(guò)示例來(lái)給出,因?yàn)樵谶@里公開(kāi)的概念的精神實(shí)質(zhì)和范圍內(nèi)的各種改變和修改將從這一具體描述中變得為本領(lǐng)域技術(shù)人員所 清楚。
【專利附圖】
【附圖說(shuō)明】
[0039]討論的系統(tǒng)和方法將從下文給出的具體描述以及附圖中變得被更完全理解,這些附圖僅通過(guò)示例來(lái)給出、因此并非限制,并且在附圖中:
[0040]將在具體描述的過(guò)程中具體描述附圖。
[0041]圖1是圖示根據(jù)一個(gè)實(shí)施例的配置文件的示例依賴關(guān)系的框圖。
[0042]圖2是圖示根據(jù)一個(gè)實(shí)施例的用于構(gòu)造編譯策略的步驟的流程圖。
[0043]圖3是圖示根據(jù)一個(gè)實(shí)施例的用于確定是否重用先前計(jì)算的編譯策略的步驟的流程圖。
[0044]圖4是圖示根據(jù)一個(gè)實(shí)施例的用于計(jì)算局部構(gòu)建校驗(yàn)和的步驟的流程圖。
[0045]圖5是圖示根據(jù)一個(gè)實(shí)施例的用于計(jì)算全局構(gòu)建校驗(yàn)和的步驟的流程圖。
[0046]圖6圖示根據(jù)一個(gè)實(shí)施例的file_info數(shù)組。
[0047]圖7是圖示構(gòu)建服務(wù)器的一個(gè)示例實(shí)施例的框圖。
【具體實(shí)施方式】
[0048]以下具體描述參照附圖。在不同附圖中的相同標(biāo)號(hào)標(biāo)識(shí)相同或者相似要素。以下具體描述也未限制討論的概念。取而代之,這里討論的概念的范圍由所附權(quán)利要求及其等效含義限定。
[0049]概述
[0050]在用戶(例如計(jì)算機(jī)程序員)想要從編程代碼創(chuàng)建可執(zhí)行代碼時(shí),他們?cè)跇?gòu)建服務(wù)器計(jì)算系統(tǒng)上發(fā)起構(gòu)建過(guò)程,該構(gòu)建過(guò)程創(chuàng)建用于編譯編程代碼的計(jì)劃(即編譯策略)。構(gòu)建服務(wù)器計(jì)算系統(tǒng)可以是可以執(zhí)行構(gòu)建過(guò)程的任何計(jì)算系統(tǒng)。在構(gòu)建過(guò)程期間,構(gòu)建模塊可以處理配置文件以便確定編譯策略。初始地處理的配置文件可以引用其它配置文件。在一些實(shí)施例中,在進(jìn)行引用的配置文件之前處理引用的配置文件。按照串行順序處理配置文件中的一些配置文件,而可以并行處理其它配置文件。構(gòu)建服務(wù)器使用配置文件的內(nèi)容來(lái)確定編譯策略。在一些情況下,編譯策略并不改變自先秦的計(jì)算策略。例如在一些情況下,配置文件中的依賴關(guān)系可以尚未改變,因此編譯策略未改變。為了節(jié)省時(shí)間和減少計(jì)算資源的浪費(fèi),如果可能則應(yīng)當(dāng)重用編譯策略。
[0051]為了檢測(cè)是否可以重用編譯策略,引入符號(hào)表示“全局構(gòu)建校驗(yàn)和”。直觀地,這是如下值,該值捕獲構(gòu)建輸入的狀態(tài)及其依賴關(guān)系。在這一個(gè)值未改變時(shí),重用先前編譯策略是安全的。如果這一個(gè)值改變,則重用先前編譯策略柄部安全。通過(guò)比較為當(dāng)前全局構(gòu)建而計(jì)算的全局構(gòu)建校驗(yàn)和與用于先前全局構(gòu)建的先前全局構(gòu)建校驗(yàn)和,構(gòu)建服務(wù)器可以確定重用編譯策略是可能的。
[0052]“校驗(yàn)和”是將算法用于任何數(shù)據(jù)而計(jì)算的值。如果數(shù)據(jù)改變,則校驗(yàn)和的值對(duì)于后續(xù)編譯而言改變。這樣的數(shù)據(jù)可以例如是代表配置文件的數(shù)據(jù)。在一些實(shí)施例中,用來(lái)計(jì)算校驗(yàn)和的算法是MD5算法。本發(fā)明的實(shí)施例不限于使用MD5算法。其它算法也可以用于計(jì)算校驗(yàn)和。如果兩個(gè)配置文件的校驗(yàn)和不同,則兩個(gè)配置文件的內(nèi)容不同。另外,由于可以為任何數(shù)據(jù)計(jì)算校驗(yàn)和,所以也可以為配置文件校驗(yàn)和的匯集計(jì)算校驗(yàn)和。
[0053]在本發(fā)明的一個(gè)實(shí)施例中,為局部構(gòu)建校驗(yàn)和集合確定全局構(gòu)建校驗(yàn)和。如果用于更晚構(gòu)建的全局構(gòu)建校驗(yàn)和與用于更早構(gòu)建的全局構(gòu)建校驗(yàn)和不同,則更晚構(gòu)建的編譯策略可能必須與更早構(gòu)建的編譯策略不同。由于全局構(gòu)建校驗(yàn)和并入局部構(gòu)建的校驗(yàn)和,所以全局構(gòu)建校驗(yàn)和反映局部構(gòu)建中發(fā)生的任何改變。因此,有可能使用局部構(gòu)建校驗(yàn)和來(lái)檢測(cè)局部構(gòu)建的依賴關(guān)系的改變,并且也有可能使用全局構(gòu)建校驗(yàn)和來(lái)檢測(cè)改變。例如在一個(gè)實(shí)施例中,如果刪除文件并且使用與文件相同的名稱來(lái)創(chuàng)建目錄,則應(yīng)當(dāng)重新計(jì)算編譯策略(也稱為構(gòu)建策略)。在這樣的實(shí)施例中,局部構(gòu)建校驗(yàn)和由于從文件到目錄的改變而應(yīng)當(dāng)在計(jì)算時(shí)不同。
[0054]在一些實(shí)施例中,即使更早構(gòu)建和更晚構(gòu)建具有不同全局構(gòu)建校驗(yàn)和,仍然可以在用于更晚構(gòu)建的編譯策略中重用為更早構(gòu)建計(jì)算的編譯策略的部分??梢詸z查校驗(yàn)和(例如局部構(gòu)建校驗(yàn)和)以便確定可以重用更早構(gòu)建的哪些部分??梢灾赜镁哂邢嗤谝痪植繕?gòu)建校驗(yàn)和和相同第二局部構(gòu)建校驗(yàn)和的、第一構(gòu)建的部分和第二構(gòu)建的部分。因此,即使第一全局校驗(yàn)和和第二全局校驗(yàn)和不同,仍然可以重用第一編譯策略的部分。
[0055]在一個(gè)實(shí)施例中,基于在配置文件的“傳遞閉包”中的配置文件{b_l,-b_n}計(jì)算可以用于計(jì)算全局構(gòu)建校驗(yàn)和的局部構(gòu)建校驗(yàn)和集合?!凹稀笔鞘挛飬R集??梢岳斫膺@里使用的符號(hào)表示13_1為第一個(gè)b( %_1”)、第二個(gè)13( %_2”)、第11個(gè)13( “b_n”)等。在形式上,有向圖G= (V, E)——V是頂點(diǎn)集,并且E是邊集——的傳遞閉包是圖G+= (V, E+),從而對(duì)于V中的所有V、w,當(dāng)且僅當(dāng)在G中有從V到w的非空路徑時(shí),在E+中有邊(V,w)。傳遞閉包包括在有向圖中從頂點(diǎn)可達(dá)的每個(gè)頂點(diǎn)和邊。
[0056]“傳遞閉包”術(shù)語(yǔ)的傳遞方面對(duì)于一對(duì)節(jié)點(diǎn)X和Y基本上意味著如果在圖G中有從X到Y(jié)的有向邊、并且如果有一對(duì)節(jié)點(diǎn)Y和Z而且如果在圖形G中有從Y到Z的有向邊,則在圖形G+中也有從X到Z的有向邊。
[0057]通過(guò)描述頂點(diǎn)匯集來(lái)最好地理解“閉包”方面。從包含單個(gè)頂點(diǎn)R的集合開(kāi)始,然后從圖收集滿足X = R的所有邊(X,Y),這給予也向原有集合添加的附加頂點(diǎn)((Χ,y)對(duì)的Y)。然后保持對(duì)于集合的所有元素重復(fù)這一過(guò)程直至在圖中無(wú)要添加的更多邊,在這一點(diǎn)已經(jīng)達(dá)到閉包。已經(jīng)基本上連接圖中的可以沿著圖中的現(xiàn)有邊從原有頂點(diǎn)R到達(dá)的每個(gè)頂點(diǎn)。
[0058]例如這里有在美國(guó)內(nèi)的城市之間的一個(gè)航班集合:{(西雅圖,芝加哥),(芝加哥,紐約)}。這里有用于相同城市的示例傳遞閉包:{(西雅圖,芝加哥),(芝加哥,紐約),(西雅圖,紐約)}。(西雅圖,紐約)是傳遞閉包的集合的一部分,因?yàn)?西雅圖,芝加哥)和(芝加哥,紐約)在原有集合中存在。在配置文件方面,如果構(gòu)建A依賴于構(gòu)建B、即(Α,Β),并且構(gòu)建B依賴于構(gòu)建C、即(B,C),則(A,C)也是傳遞閉包的一部分。
[0059]通過(guò)使用配置文件的傳遞閉包,構(gòu)建模塊可以確定是否已經(jīng)有對(duì)在配置文件之間的依賴關(guān)系中的任何依賴關(guān)系的改變。根據(jù)本發(fā)明的一個(gè)實(shí)施例,構(gòu)建模塊114可以確定是否已經(jīng)有對(duì)向配置文件的輸入中的任何輸入的改變或者是否已經(jīng)改變依賴關(guān)系,從而應(yīng)當(dāng)重新計(jì)算編譯策略。
[0060]由于構(gòu)建模塊可以確定是否已經(jīng)有對(duì)配置文件、包括在配置文件之間的依賴關(guān)系的任何改變,所以構(gòu)建模塊可以在沒(méi)有將影響編譯策略的有效性的改變時(shí)略過(guò)創(chuàng)建編譯策略的步驟。在無(wú)需改變編譯策略時(shí),不再延遲軟件工程師等待編譯策略的重新計(jì)算??梢钥缭讲煌绦騿T重用構(gòu)建策略。重用先前創(chuàng)建的編譯策略尤其在其中頻繁地執(zhí)行許多構(gòu)建的大型公司中節(jié)省大量計(jì)算時(shí)間和開(kāi)支。
[0061]圖1是圖示根據(jù)一個(gè)實(shí)施例的配置文件的示例依賴關(guān)系的框圖。如圖1中所示,配置文件(CF) 102引用并且依賴于CF104和106。CF 106依賴于CF108。在一個(gè)實(shí)施例中,在處理CF106之前處理CF108??梢栽谔幚鞢F102之前處理CF104、106和108。配置文件聲明軟件模塊的依賴關(guān)系。配置文件中的每個(gè)配置文件可以由構(gòu)建模塊(BM)處理。對(duì)于引用其它配置文件并且依賴于其它配置文件的這些配置文件,構(gòu)建模塊也可以加載其它配置文件。
[0062]構(gòu)建模塊可以是執(zhí)行軟件以執(zhí)行構(gòu)建過(guò)程的服務(wù)器。如圖1中所示,CF102可以由BMl 14處理。CF104可以由BM116處理。CF106和CF108可以由BM120處理。在一些實(shí)施例中,可以實(shí)施分離構(gòu)建模塊中的一個(gè)或者多個(gè)構(gòu)建模塊為單個(gè)構(gòu)建模塊。在一些實(shí)施例中,可以實(shí)施所有分離構(gòu)建模塊為單個(gè)構(gòu)建模塊。例如BM114也可以是為所有配置文件執(zhí)行構(gòu)建過(guò)程的單個(gè)構(gòu)建模塊。為了描述簡(jiǎn)化,描述執(zhí)行這里描述的動(dòng)作的一個(gè)或者多個(gè)構(gòu)建模塊為由BMl 14執(zhí)行,但是在不同實(shí)施例中,任何數(shù)目或者組合的構(gòu)建模塊、比如BMl 14與BMl 16和BM120結(jié)合可以執(zhí)行這里描述的過(guò)程。
[0063]構(gòu)造編譯策略
[0064]圖2是圖示根據(jù)一個(gè)實(shí)施例的用于構(gòu)造編譯策略的步驟的流程圖。
[0065]在步驟202中,構(gòu)建模塊114加載用于編譯目標(biāo)的配置文件。構(gòu)建模塊114加載初始配置文件集合。這些配置文件是頂級(jí)配置文件,并且配置文件中的一些配置文件可以依賴于其它配置文件。例如構(gòu)建模塊114可以加載圖1的配置文件CF102。
[0066]在步驟204中,構(gòu)建模塊114加載用于所有引用的目標(biāo)的配置文件。構(gòu)建模塊114也加載初始地加載的配置文件集合引用的其它配置文件。構(gòu)建模塊114檢查初始地加載的配置文件集合的內(nèi)容以便確定用于加載的其它配置文件。例如構(gòu)建模塊114(或者在一些實(shí)施例中構(gòu)建模塊120)可以加載CF104和CF106,因?yàn)檫@些配置文件被CF102引用。
[0067]在步驟206中,構(gòu)建模塊114重復(fù)加載配置文件直至編譯目標(biāo)的傳遞閉包被加載。例如構(gòu)建模塊114 (或者在一些實(shí)施例中構(gòu)建模塊120)可以基于來(lái)自CF106的依賴關(guān)系鏈接加載CF108。在一些實(shí)施例中,為了加載傳遞閉包,如果配置文件A引用配置文件B并且配置文件B也引用配置文件C,則基于傳遞閉包中的在配置文件A與配置文件C之間的連接來(lái)加載配置文件C。也可以基于在配置文件A與配置文件B之間的連接來(lái)加載配置文件C。構(gòu)建模塊114加載配置文件直至在任何其它配置文件中引用的所有配置文件被加載。以這一方式,未從加載過(guò)程遺漏和忽略依賴關(guān)系。可以使用任何常規(guī)算法來(lái)計(jì)算傳遞閉包??梢曰谂渲梦募囊蕾囮P(guān)系計(jì)算傳遞閉包??梢酝ㄟ^(guò)檢查配置文件來(lái)確定依賴關(guān)系。一旦已經(jīng)加載所有配置文件并且在也已經(jīng)檢查所有依賴關(guān)系時(shí),則對(duì)編譯目標(biāo)的傳遞閉包的加載完成。
[0068]在步驟208中,構(gòu)建模塊114計(jì)算編譯策略。編譯策略是用于編譯源代碼、鏈接對(duì)象文件的步驟和為了完成編譯而需要的其它步驟的計(jì)劃??梢圆⑿袌?zhí)行步驟中的一些步驟、比如編譯某個(gè)源代碼。在一些情況下,如果兩個(gè)軟件模塊相互獨(dú)立,則可以獨(dú)立編譯兩個(gè)軟件模塊。其它步驟僅可以被依次執(zhí)行。在一些實(shí)施例中,如果一個(gè)軟件模塊的編譯依靠于另一軟件模塊的編譯的完成,則編譯步驟僅可以被依次執(zhí)行。編譯策略可以指定哪些輸入和輸出文件必須在每級(jí)可用。編譯策略可以指定可以并行執(zhí)行編譯的哪些級(jí)而必須依次執(zhí)行編譯的哪些級(jí)。編譯策略也可以指定將執(zhí)行的源代碼編譯、鏈接和其它步驟。編譯策略也可以在地理上調(diào)度將在構(gòu)建機(jī)器云中執(zhí)行的工作和執(zhí)行的動(dòng)作。
[0069]確定是否重用先前計(jì)算的編譯策略
[0070]圖3是圖示根據(jù)一個(gè)實(shí)施例的用于確定是否重用先前計(jì)算的編譯策略的步驟的流程圖。
[0071]在步驟302中,構(gòu)建模塊114加載用于編譯目標(biāo)的配置文件。這一步驟等效于圖2的步驟202。構(gòu)建模塊114加載初始配置文件集合。這些配置文件是頂級(jí)配置文件并且配置文件中的一些配置文件可以依賴于其它配置文件。例如構(gòu)建模塊114可以加載BF102。
[0072]在步驟304中,構(gòu)建模塊114加載用于所有引用的目標(biāo)的配置文件。該步驟等效于圖2的步驟204。構(gòu)建模塊114也加載初始地加載的配置文件集合引用的其它配置文件。構(gòu)建模塊114檢查初始地加載的配置文件集合的內(nèi)容以便確定用于加載的其它配置文件。例如構(gòu)建模塊114可以加載CF104和CF106,因?yàn)檫@些配置文件在CF102中被引用。
[0073]在步驟306中,構(gòu)建模塊114重復(fù)加載配置文件直至加載編譯目標(biāo)的傳遞閉包。這一步驟等效于圖2的步驟206。構(gòu)建模塊114加載配置文件直至加載在任何其它配置文件中引用的所有配置文件。例如構(gòu)建模塊114可以加載CF108。
[0074]在步驟308中,對(duì)于在傳遞閉包中的每個(gè)配置文件,構(gòu)建模塊114計(jì)算局部構(gòu)建校驗(yàn)和。為了執(zhí)行步驟308,構(gòu)建模塊114執(zhí)行如圖4中描述的步驟。構(gòu)建模塊114計(jì)算將在計(jì)算全局構(gòu)建校驗(yàn)和時(shí)使用的局部構(gòu)建校驗(yàn)和。
[0075]在步驟310中,構(gòu)建模塊114使用局部構(gòu)建校驗(yàn)和來(lái)計(jì)算全局構(gòu)建校驗(yàn)和。為了執(zhí)行步驟310,構(gòu)建模塊114執(zhí)行如圖5中描述的步驟。在圖5中,構(gòu)建模塊114對(duì)局部構(gòu)建校驗(yàn)和進(jìn)行排序并且使用排序的局部構(gòu)建校驗(yàn)和來(lái)計(jì)算全局構(gòu)建校驗(yàn)和。比較全局構(gòu)建校驗(yàn)和與先前全局構(gòu)建校驗(yàn)和以便確定是否需要新編譯策略。如果全局構(gòu)建校驗(yàn)和已經(jīng)改變,則應(yīng)當(dāng)重新計(jì)算新編譯策略。
[0076]計(jì)算局部構(gòu)建校驗(yàn)和
[0077]圖4是圖示根據(jù)一個(gè)實(shí)施例的用于計(jì)算局部構(gòu)建校驗(yàn)和的步驟的流程圖??梢詾樵趥鬟f閉包中的所有配置文件計(jì)算局部構(gòu)建校驗(yàn)和以便計(jì)算全局構(gòu)建校驗(yàn)和。
[0078]在步驟402中,構(gòu)建模塊114確定在配置文件中聲明的輸入列表。配置文件可以引用其它配置文件或者目錄。對(duì)于m個(gè)引用,可以表示在配置文件中聲明的引用的配置文件或者目錄為{in_l,…,in_m}。對(duì)于CF102的示例,in_l可以是/dir3/fire2, in_2可以是/dirl/firel,并且in_3可以是/dir2。在一些實(shí)施例中,構(gòu)建模塊114可以通過(guò)檢查配置文件的內(nèi)容來(lái)確定引用的配置文件或者目錄的列表。在一些實(shí)施例中,構(gòu)建模塊114可以在構(gòu)建過(guò)程期間檢查構(gòu)建文件以確定哪些文件受到訪問(wèn),以便確定引用的文件或者目錄的列表。
[0079]在步驟404中,構(gòu)建模塊114確定用于配置文件的文件系統(tǒng)信息的列表。在一個(gè)實(shí)施例中,在數(shù)組file_info中存儲(chǔ)系統(tǒng)信息的列表。例如file_info(l)引用file_info數(shù)組的第一槽(slot)并且可以存儲(chǔ)/dir3/file2, file_info (2)可以存儲(chǔ)/dirl/firel,并且file_info(3)可以存儲(chǔ)/dir2。在一些實(shí)施例中,每個(gè)槽保持類(lèi)型結(jié)構(gòu)的內(nèi)容。類(lèi)型結(jié)構(gòu)可以例如包括代表路徑名的串類(lèi)型。類(lèi)型結(jié)構(gòu)也可以包括整數(shù)或者布爾類(lèi)型或者某個(gè)其它類(lèi)型,該類(lèi)型指示文件信息系統(tǒng)槽是否存儲(chǔ)用于文件或者目錄的數(shù)據(jù)。在一些實(shí)施例中,file_info O槽可以存儲(chǔ)用于文件的所有信息,這些文件可以觸發(fā)重新計(jì)算構(gòu)建步驟。
[0080]在一個(gè)實(shí)施例中,數(shù)組file_info如圖6中描繪的那樣具有m個(gè)槽。在file_info中的槽可以各自稱為 file_info (I)、file_info (2)、file_info (3)、…file_info (k)、…file_info(m)。k代表在數(shù)組的中間的某個(gè)槽。構(gòu)建模塊114可以檢查配置文件的內(nèi)容以便填充數(shù)組 file_infoo
[0081]File_info的槽中的每個(gè)槽可以存儲(chǔ)關(guān)于配置文件的輸入的信息。存儲(chǔ)的信息可以是包括路徑和數(shù)據(jù)的文件系統(tǒng)信息,該數(shù)據(jù)指示輸入是為目錄還是文件。對(duì)于每個(gè)輸入in_k,構(gòu)建模塊114可以在用于in_k的數(shù)組位置向數(shù)組file_info指派以下信息:1)通向文件的路徑和2)指示輸入是為文件還是目錄的數(shù)據(jù)。例如在一個(gè)類(lèi)型的計(jì)算系統(tǒng)中,路徑可以是可以向 file_info (I)指派的"C:\root\builds\configuration filel02.cf〃。作為另一示例,在另一類(lèi)型的計(jì)算系統(tǒng)中,路徑可以是〃/r00t/U/j0el23/配置文件102.cf〃。路徑格式的其它變化存在,并且本發(fā)明的實(shí)施例不限于特定路徑格式。
[0082]在一個(gè)實(shí)施例中,可以在變量中存儲(chǔ)指示輸入是為文件還是目錄的數(shù)據(jù)。這樣的變量可以是布爾型變量、整型變量或者任何其它類(lèi)型的變量。例如file_info(l)可以具有指示文件的值。如果路徑是目錄,即"C:\root\builds\buildl02"或者"/root/builds/buildl02〃,則file_info (I)也可以存儲(chǔ)指示目錄的值。例如file_info (I)可以存儲(chǔ)〃/dir3/file2〃——它是通向文件的路徑——并且也可以存儲(chǔ)指示file_info(l)存儲(chǔ)文件的數(shù)據(jù)。
[0083]在步驟406中,構(gòu)建模塊114可選地對(duì)文件系統(tǒng)信息列表排序。在一個(gè)實(shí)施例中,構(gòu)建模塊114對(duì)于配置文件c_i將以下各項(xiàng)一起排序:
[0084]I)用于所有輸入{in_l,..., in_m}的 file_info (in_k)。換而言之,file_info 的槽在每個(gè)槽中存儲(chǔ)關(guān)于配置文件c_i的輸入的數(shù)據(jù)。
[0085] 2) checksum(c_i)。換而言之,用于配置文件c_i的校驗(yàn)和值,以及[0086]3)file_info(c_i)。換而言之,配置文件c_i的file_info,它可以包括配置文件c_i的路徑和指示配置文件c_i是文件的數(shù)據(jù)。在一些實(shí)施例中,可以使用任何創(chuàng)建規(guī)范順序的算法來(lái)執(zhí)行排序??梢允褂么_定性排序技術(shù)來(lái)實(shí)現(xiàn)規(guī)范排序。即使輸入順序改變,如果排序返回來(lái)自相同輸入的相同結(jié)果,則排序仍然是確定性的。例如給出以下file_info槽值:
[0087]file_info (I) /Vroot/u/ joe 123/configuration file 110.cf〃
[0088]file_info (2) /Vroot/u/joel23/configuration filel44.cf"
[0089]file_info (3) /Vroot/u/joel23/configuration filel22.cf"
[0090]file_info (4) /Vroot/u/ joe 123/configuration filelll.cf"
[0091]局部配置文件的file_info 數(shù)據(jù):〃/root/u/joel23/configuration file34.cf"
[0092]局部配置文件的校驗(yàn)和checksum(c_i):234233
[0093]在執(zhí)行排序之后,在該例中的排序的結(jié)果可以是:{234233,〃/root/u/joel23/configuration file34.cf〃、〃/root/u/joel23/configuration filel10.cf〃、〃/root/u/joel23/configuration filelll.cf〃、^/root/u/joel23/configuration filel22.cf〃、〃/root/u/joel23/configuration filel44.cf〃}。
[0094]在步驟408中,構(gòu)建模塊114在排序的文件系統(tǒng)信息列表之上計(jì)算校驗(yàn)和。用于計(jì)算局部構(gòu)建校驗(yàn)和的排序的數(shù)據(jù)包括具有排序的值的filejnfo、配置文件c_i的file_info和在配置文件的內(nèi)容之上的校 驗(yàn)和。構(gòu)建模塊114可以使用排序的數(shù)據(jù)結(jié)果作為向計(jì)算校驗(yàn)和的算法中的輸入。在一些實(shí)施例中,構(gòu)建模塊114使用MD5算法以計(jì)算校驗(yàn)和。例如向局部構(gòu)建校驗(yàn)和計(jì)算的輸入可以包括/dir 1/file 1、/dir2、/dir3/file2、/package I/configuration filel和校驗(yàn)和(通常為數(shù)值)。校驗(yàn)和可以是數(shù)、比如2342342,并且如果向校驗(yàn)和計(jì)算的輸入不同,則校驗(yàn)和不同。
[0095]在一些實(shí)施例中,構(gòu)建模塊114計(jì)算獨(dú)立于順序的校驗(yàn)和而未排序。例如構(gòu)建模塊114可以使用XOR函數(shù)以計(jì)算校驗(yàn)和。在這樣的實(shí)施例中,構(gòu)建模塊114驗(yàn)證在列表中無(wú)用于計(jì)算校驗(yàn)和的重復(fù)條目
[0096]計(jì)算全局構(gòu)建校驗(yàn)和
[0097]圖5是圖示根據(jù)一個(gè)實(shí)施例的用于計(jì)算全局構(gòu)建校驗(yàn)和的步驟的流程圖。構(gòu)建模塊114可以執(zhí)行圖5的步驟以便確定是否可以重用先前編譯策略。如果不能重用先前編譯策略,則應(yīng)當(dāng)計(jì)算新編譯策略。
[0098]在步驟502中,構(gòu)建模塊114取回局部構(gòu)建校驗(yàn)和列表。為了計(jì)算全局構(gòu)建校驗(yàn)和,構(gòu)建模塊114取回已經(jīng)計(jì)算的局部構(gòu)建校驗(yàn)和。局部構(gòu)建校驗(yàn)和可以來(lái)自傳遞閉包中的配置文件集合{b_l,...,b_n}。在一個(gè)實(shí)施例中,每個(gè)局部構(gòu)建校驗(yàn)和可以是已經(jīng)為特定配置文件計(jì)算的數(shù)值。例如為BF104、BF102和BF106計(jì)算的局部構(gòu)建校驗(yàn)和可以分別是980456,234231 和 343243。
[0099]在步驟504中,構(gòu)建模塊114對(duì)局部構(gòu)建校驗(yàn)和列表進(jìn)行排序。在一些實(shí)施例中,構(gòu)建模塊114按照封裝名稱(也稱為模塊名稱或者目標(biāo)名稱)排序。按照封裝名稱對(duì)局部構(gòu)建校驗(yàn)和的排序可以例如產(chǎn)生排序?yàn)?34231、980456和343243的局部構(gòu)建校驗(yàn)和列表。
[0100]在步驟506中,構(gòu)建模塊114在排序的數(shù)據(jù)之上計(jì)算校驗(yàn)和。構(gòu)建模塊114可以處理排序的局部構(gòu)建校驗(yàn)和以計(jì)算全局校驗(yàn)和。如果排序算法是確定性的,則只要配置文件校驗(yàn)和未改變,向全局校驗(yàn)和計(jì)算的輸入就相同。例如使用排序?yàn)?34231、343243和980456的排序的局部構(gòu)建校驗(yàn)和列表,計(jì)算的全局構(gòu)建校驗(yàn)和可以是108934。
[0101]在步驟508中,構(gòu)建模塊114存儲(chǔ)計(jì)算的校驗(yàn)和為全局校驗(yàn)和。構(gòu)建模塊114可以存儲(chǔ)全局校驗(yàn)和。構(gòu)建模塊114然后可以比較全局校驗(yàn)和與計(jì)算的先前全局校驗(yàn)和以便確定是否創(chuàng)建新編譯策略。如果全局校驗(yàn)和與先前全局校驗(yàn)和相同,則可以重用編譯策略。如果全局校驗(yàn)和與先前全局校驗(yàn)和不同,則重新計(jì)算編譯策略。例如,如果先前全局構(gòu)建校驗(yàn)和是546675并且當(dāng)前計(jì)算的全局構(gòu)建校驗(yàn)和是108934,則應(yīng)當(dāng)重新計(jì)算編譯計(jì)劃,因?yàn)楦淖兊男r?yàn)和指示先前編譯計(jì)劃可能不再有效,例如因?yàn)橐恍┮蕾囮P(guān)系已經(jīng)改變或者輸入的性質(zhì)已經(jīng)改變。
[0102]FILE_INF0 數(shù)組
[0103]圖6圖示根據(jù)一個(gè)實(shí)施例的file_info數(shù)組。如圖6中所示,file_info600具有m個(gè)槽,槽中的每個(gè)槽可以稱為file_info(k),其中“k”引用第k個(gè)槽。例如file_info⑴引用file_info 數(shù)組的第一槽,file_info (2)引用 file_info 數(shù)組的第二槽,等等。File_info(m)引用file_info數(shù)組的最后槽。
[0104]文件系統(tǒng)服務(wù)
[0105]在一些實(shí)施例中,可以向文件系統(tǒng)添加局部構(gòu)建校驗(yàn)和和全局構(gòu)建校驗(yàn)和的計(jì)算作為服務(wù)。這樣的文件系統(tǒng)可以添加用于計(jì)算和監(jiān)視這一服務(wù)的很少開(kāi)銷(xiāo)。在這樣的實(shí)施例中,向文件系統(tǒng)輪詢構(gòu)建目標(biāo)的全局構(gòu)建校驗(yàn)和在計(jì)算上成本低并且可以在計(jì)算編譯策略之前被執(zhí)行。
[0106]文件系統(tǒng)可以執(zhí)行圖4和圖5的步驟。文件系統(tǒng)可以在所有改變發(fā)生時(shí)意識(shí)到改變,并且可以當(dāng)時(shí)重新計(jì)算任何數(shù)據(jù)。然后在更晚時(shí)間,可以從文件系統(tǒng)查詢而不是重新計(jì)算數(shù)據(jù)。文件系統(tǒng)可以比在用戶空間中運(yùn)行的任何應(yīng)用更快和成本更低地計(jì)算校驗(yàn)和。另夕卜,可以高速緩存、重用編譯策略,并且可以為并行工作的用戶加速編譯。
[0107]示例實(shí)施例
[0108]圖7是圖示構(gòu)建服務(wù)器的一個(gè)示例實(shí)施例的框圖。在很基本配置701中,計(jì)算設(shè)備700通常包括一個(gè)或者多個(gè)處理器710和系統(tǒng)存儲(chǔ)器720。存儲(chǔ)器總線730可以用于在處理器710與系統(tǒng)存儲(chǔ)器720之間通信。
[0109]根據(jù)希望的配置,處理器710可以是任何類(lèi)型、包括但不限于微處理器(μ P)、微控制器(μ P)、數(shù)字信號(hào)處理器(DSP)或者其任何組合。處理器710可以包括一個(gè)或者多個(gè)高速緩存級(jí)、比如一級(jí)高速緩存711和二級(jí)高速緩存712、處理器核713和寄存器714。處理器核713可以包括算術(shù)邏輯單元(ALU)、浮點(diǎn)單元(FPU)、數(shù)字信號(hào)處理核(DSP核)或者其任何組合。存儲(chǔ)器控制器715也可以與處理器710使用,或者在一些實(shí)現(xiàn)方式中,存儲(chǔ)器控制器715可以是處理器710的內(nèi)部部分。
[0110]根據(jù)希望的配置,系統(tǒng)存儲(chǔ)器720可以是任何類(lèi)型、包括但不限于易失性存儲(chǔ)器(比如RAM)、非易失性存儲(chǔ)器(比如ROM、閃存等)或者其任何組合。系統(tǒng)存儲(chǔ)器720通常包括操作系統(tǒng)721、一個(gè)或者多個(gè)應(yīng)用722和程序數(shù)據(jù)724。應(yīng)用722包括多意圖局部目標(biāo)通報(bào)處理算法723。如以下將進(jìn)一步描述的那樣,程序數(shù)據(jù)724包括多意圖局部目標(biāo)通報(bào)數(shù)據(jù)725。在一些實(shí)施例中,應(yīng)用722可以被布置為在操作系統(tǒng)721上與程序數(shù)據(jù)724操作。這一描述的基本配置在圖7中由在虛線701內(nèi)的那些部件圖示。[0111]計(jì)算設(shè)備700可以具有附加特征或者功能以及用于有助于在基本配置701與任何需要的設(shè)備和接口之間的通信的附加接口。例如總線/接口控制器740可以用來(lái)有助于經(jīng)由存儲(chǔ)接口總線741在基本配置701與一個(gè)或者多個(gè)數(shù)據(jù)存儲(chǔ)設(shè)備750之間的通信。數(shù)據(jù)存儲(chǔ)設(shè)備750可以是可拆卸存儲(chǔ)設(shè)備751、非可拆卸存儲(chǔ)設(shè)備752或者其組合。可移除存儲(chǔ)裝置和非可移除存儲(chǔ)裝置的示例,聊舉數(shù)例包括磁盤(pán)設(shè)備、比如軟盤(pán)驅(qū)動(dòng)和硬盤(pán)驅(qū)動(dòng)(HDD)、光盤(pán)驅(qū)動(dòng)、比如緊致盤(pán)(CD)驅(qū)動(dòng)或者數(shù)字萬(wàn)用盤(pán)(DVD)驅(qū)動(dòng)、固態(tài)驅(qū)動(dòng)(SSD)和待驅(qū)動(dòng)。示例計(jì)算機(jī)存儲(chǔ)介質(zhì)可以包括在用存儲(chǔ)信息、比如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者其它數(shù)據(jù)的任何方法或者技術(shù)中實(shí)施的易失性和非易失性、可拆卸和非可拆卸介質(zhì)。
[0112]系統(tǒng)存儲(chǔ)器720、可拆卸存儲(chǔ)裝置751和非可拆卸存儲(chǔ)裝置752都是計(jì)算機(jī)存儲(chǔ)介質(zhì)的示例。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于RAM、ROM、EEPR0M、閃存或者其它存儲(chǔ)器技術(shù)、CD-ROM、數(shù)字萬(wàn)用盤(pán)(DVD)或者其它光學(xué)存儲(chǔ)裝置、磁盒、磁帶、磁盤(pán)存儲(chǔ)裝置或者其它磁存儲(chǔ)設(shè)備或者可以用來(lái)存儲(chǔ)希望的信息并且可以由計(jì)算設(shè)備700訪問(wèn)的任何其它介質(zhì)。任何這樣的計(jì)算機(jī)存儲(chǔ)介質(zhì)可以是設(shè)備700的一部分。
[0113]計(jì)算設(shè)備700也可以包括用于有助于經(jīng)由總線/接口控制器740從各種接口設(shè)備(例如輸出接口、外圍接口和通信接口)到基本配置701的通信的接口總線742。示例輸出設(shè)備760包括可以被配置為經(jīng)由一個(gè)或者多個(gè)Α/V端口 763向各種外部設(shè)備、比如顯示器或者揚(yáng)聲器通信的圖形處理單元761和音頻處理單元762。示例外圍接口 770包括可以被配置為經(jīng)由一個(gè)或者多個(gè)I/O端口 773與外部設(shè)備、比如輸入設(shè)備(例如鍵盤(pán)、鼠標(biāo)、筆、語(yǔ)音輸入設(shè)備、觸摸輸入設(shè)備等)或者其它外圍設(shè)備(例如打印機(jī)、掃描儀等)通信的串行接口控制器771或者并行接口控制器772。示例通信設(shè)備780包括尅被布置為有助于經(jīng)由一個(gè)或者多個(gè)通信端口 782通過(guò)網(wǎng)絡(luò)通信與一個(gè)或者多個(gè)其它計(jì)算設(shè)備790的通信的網(wǎng)絡(luò)控制器781。通信連接是通信介質(zhì)的一個(gè)示例。通信介質(zhì)可以通常由計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或者在調(diào)制的數(shù)據(jù)信號(hào)、比如載波或者其它傳送機(jī)制中的其它數(shù)據(jù)體現(xiàn)并且包括任何信息遞送介質(zhì)?!罢{(diào)制的數(shù)據(jù)信號(hào)”可以是如下信號(hào),該信號(hào)讓它的特性中的一個(gè)或者多個(gè)特性以對(duì)信號(hào)中的信息進(jìn)行編碼這樣的方式來(lái)設(shè)置或者改變。舉例而言而非限制,通信介質(zhì)可以包括有線介質(zhì)、比如有線網(wǎng)絡(luò)或者直接接線連接以及無(wú)線介質(zhì)、t匕如聲學(xué)、射頻(RF)、紅外線(IR)和其它無(wú)線介質(zhì)。如這里所用術(shù)語(yǔ)計(jì)算機(jī)可讀介質(zhì)可以包括存儲(chǔ)介質(zhì)和通信介質(zhì)二者。
[0114]可以實(shí)施計(jì)算設(shè)備700為小型規(guī)格的便攜(或者移動(dòng))電子設(shè)備、比如蜂窩電話、個(gè)人數(shù)據(jù)助理(PDA)、個(gè)人媒體播放器設(shè)備、無(wú)線web監(jiān)視設(shè)備、個(gè)人頭戴式受話器設(shè)備、專用設(shè)備或者包括以上功能中的任何功能的混合設(shè)備的部分。也可以實(shí)施計(jì)算設(shè)備700為包括膝上型計(jì)算機(jī)和非膝上型計(jì)算機(jī)配置的個(gè)人計(jì)算機(jī)。
[0115]在系統(tǒng)的方面的硬件與軟件實(shí)現(xiàn)方式方面留有很少區(qū)分;硬件或者軟件的使用一般(但是并非總是,因?yàn)樵谀承┣榫持?,在硬件與軟件之間的選擇可以變得有意義)是代表成本比對(duì)效率折衷的設(shè)計(jì)選擇。有各種手段,通過(guò)這些手段實(shí)現(xiàn)這里描述的過(guò)程和/或系統(tǒng)和/或其它技術(shù)(例如硬件、軟件和/或固件),并且優(yōu)選手段將隨著在其中部署過(guò)程和/或系統(tǒng)和/或其它技術(shù)的情境變化。例如如果實(shí)施者確定速度和準(zhǔn)確性至關(guān)重要,則實(shí)施者可以選擇主要為硬件和/或固件的手段;如果靈活性至關(guān)重要,則實(shí)施者可以選擇主要為軟件的實(shí)現(xiàn)方式;或者另外同樣備選地,實(shí)施者可以選擇硬件、軟件和/或固件的某個(gè)組
口 O
[0116]前文具體描述已經(jīng)經(jīng)由使用框圖、流程圖和/或示例闡述設(shè)備和/或過(guò)程的各種實(shí)施例。在這樣的框圖、流程圖和/或示例包含一個(gè)或者多個(gè)功能和/或操作的范圍內(nèi),本領(lǐng)域技術(shù)人員將理解在這樣的框圖、流程圖或者示例內(nèi)的每個(gè)功能和/或操作可以個(gè)別地和/或共同地由廣泛硬件、軟件、固件或者實(shí)質(zhì)上其任何組合實(shí)施。在一個(gè)實(shí)施例中,可以經(jīng)由專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)、數(shù)字信號(hào)處理器(DSP)或者其它集成形式實(shí)施這里描述的主題內(nèi)容的若干部分。然而本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到這里公開(kāi)的實(shí)施例的一些方面全部或者部分可以被等效地實(shí)施于集成電路中、實(shí)施為在一個(gè)或者多個(gè)計(jì)算機(jī)上運(yùn)行的一個(gè)或者多個(gè)計(jì)算機(jī)程序(例如為在一個(gè)或者多個(gè)計(jì)算機(jī)系統(tǒng)上運(yùn)行的一個(gè)或者多個(gè)程序)、為在一個(gè)或者多個(gè)處理器上運(yùn)行的一個(gè)或者多個(gè)程序(例如為在一個(gè)或者多個(gè)微處理器上運(yùn)行的一個(gè)或者多個(gè)程序)、為固件或者為實(shí)質(zhì)上其任何組合,并且設(shè)計(jì)電路裝置和/或編寫(xiě)用于軟件和/或固件的代碼按照本公開(kāi)內(nèi)容將合理地在本領(lǐng)域技術(shù)人員的技能內(nèi)。此外,本領(lǐng)域技術(shù)人員將認(rèn)識(shí)這里描述的主題內(nèi)容的機(jī)制能夠以多種形式被分布為程序產(chǎn)品并且這里描述的主題內(nèi)容的示例實(shí)施例無(wú)論用來(lái)實(shí)際實(shí)現(xiàn)分布的特定信號(hào)承載介質(zhì)類(lèi)型如何都適用。信號(hào)承載介質(zhì)的示例包括但不限于以下各項(xiàng):可記錄型介質(zhì)、比如軟盤(pán)、硬盤(pán)驅(qū)動(dòng)、緊致盤(pán)(⑶)、數(shù)字視頻盤(pán)(DVD)、數(shù)字帶、計(jì)算機(jī)存儲(chǔ)器等;以及傳輸型介質(zhì)、比如數(shù)字和/或模擬通信介質(zhì)(例如光纖線纜、波導(dǎo)、有線通信鏈路、無(wú)線通信鏈路等)。
[0117]本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到在本領(lǐng)域內(nèi)普遍以這里闡述的方式描述設(shè)備和/或過(guò)程、隨后使用工程實(shí)踐以將這樣描述的設(shè)備和/或過(guò)程集成到數(shù)據(jù)處理系統(tǒng)中。也就是說(shuō),這里描述的設(shè)備和/或過(guò)程的至少部分可以經(jīng)由合理數(shù)量的實(shí)驗(yàn)被集成到數(shù)據(jù)處理系統(tǒng)中。本領(lǐng)域技術(shù)人員將認(rèn)識(shí)典型數(shù)據(jù)處理系統(tǒng)一般包括系統(tǒng)單元?dú)?、視頻顯示設(shè)備、存儲(chǔ)器、比如易失性和非易失性存儲(chǔ)器、處理器、比如微處理器和數(shù)字信號(hào)處理器、計(jì)算實(shí)體、t匕如操作系統(tǒng)、驅(qū)動(dòng)器、圖形用戶界面以及應(yīng)用程序、一個(gè)或者多個(gè)交互設(shè)備、比如觸板或者觸屏和/或包括返回回路和控制馬達(dá)(例如用于感測(cè)位置和/或速率的反饋;用于移動(dòng)和/或調(diào)整部件和/或數(shù)量的控制馬達(dá))的控制系統(tǒng)中的一項(xiàng)或者多項(xiàng)。典型數(shù)據(jù)處理系統(tǒng)可以利用任何商業(yè)上可用部件、比如通常在數(shù)據(jù)計(jì)算/通信和/或網(wǎng)絡(luò)計(jì)算/通信系統(tǒng)中找到的部件來(lái)實(shí)施。
[0118]關(guān)于這里對(duì)基本上任何復(fù)數(shù)和/或單數(shù)術(shù)語(yǔ)的使用,本領(lǐng)域技術(shù)人員可以如對(duì)于上下文和/或應(yīng)用適合的那樣從復(fù)數(shù)翻譯成單數(shù)和/或從單數(shù)翻譯成復(fù)數(shù)。這里為了清楚而明確地闡述各種單數(shù)/復(fù)數(shù)排列。
[0119]在本公開(kāi)內(nèi)容中示出和描述示例實(shí)施例。將理解實(shí)施例能夠在各種其它組合和環(huán)境中使用并且能夠載入這里表達(dá)的發(fā)明概念的范圍內(nèi)改變或者修改。一些這樣的變化可以包括使用非瞬態(tài)計(jì)算機(jī)可讀介質(zhì)上存儲(chǔ)的程序以使計(jì)算機(jī)和/或計(jì)算機(jī)系統(tǒng)能夠執(zhí)行以上討論的方法變化的部分或者全部。這樣的變化不會(huì)視為脫離本發(fā)明的精神實(shí)質(zhì)和范圍,并且如將為本領(lǐng)域技術(shù)人員所清楚的那樣,所有這樣的修改旨在于被包含在所附權(quán)利要求的范圍內(nèi)。
【權(quán)利要求】
1.一種由數(shù)據(jù)處理裝置執(zhí)行的方法,包括: 創(chuàng)建用于第一構(gòu)建的第一編譯策略; 使用所述第一編譯策略來(lái)執(zhí)行所述第一構(gòu)建; 計(jì)算用于所述第一構(gòu)建的第一校驗(yàn)和; 存儲(chǔ)所述第一編譯策略和所述第一校驗(yàn)和; 計(jì)算用于第二構(gòu)建的第二校驗(yàn)和; 確定所述第二校驗(yàn)和是否等于所述第一校驗(yàn)和; 響應(yīng)于確定所述第二校驗(yàn)和不等于所述第一校驗(yàn)和,創(chuàng)建第二編譯策略; 存儲(chǔ)所述第二編譯策略和所述第二校驗(yàn)和,并且使用所述第二編譯策略來(lái)執(zhí)行所述第二構(gòu)建;以及 響應(yīng)于確定所述第二校驗(yàn)和等于所述第一校驗(yàn)和,取回所述第一編譯策略、并且使用所述第一編譯策略來(lái)執(zhí)行所述第二構(gòu)建。
2.根據(jù)權(quán)利要求1所述的方法,其中所述第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和;并且所述全局構(gòu)建校驗(yàn)和通過(guò)使用一個(gè)或者多個(gè)局部構(gòu)建校驗(yàn)和來(lái)計(jì)算。
3.根據(jù)權(quán)利要求1所述的方法,還包括確定為所述第一構(gòu)建計(jì)算的局部構(gòu)建校驗(yàn)和對(duì)于所述第二構(gòu)建尚未改變,并且在所述第二編譯策略中重新使用所述第一編譯策略的與所述局部構(gòu)建校驗(yàn)和關(guān)聯(lián)的部分。
4.根據(jù)權(quán)利要求1所述的方法,其中文件系統(tǒng)信息按照路徑名被排序以便計(jì)算局部構(gòu)建校驗(yàn)和。
5.根據(jù)權(quán)利要求4所述的方法,其中所述文件系統(tǒng)信息包括校驗(yàn)和。
6.根據(jù)權(quán)利要求1所述的方法,其中使用所述第一編譯策略來(lái)執(zhí)行所述第一構(gòu)建還包括檢查配置文件的內(nèi)容以確定依賴關(guān)系;并且為所述配置文件的每個(gè)依賴關(guān)系計(jì)算局部構(gòu)建校驗(yàn)和。
7.根據(jù)權(quán)利要求1所述的方法,還包括基于所述配置文件的依賴關(guān)系來(lái)計(jì)算傳遞閉包。
8.根據(jù)權(quán)利要求7所述的方法,其中為計(jì)算的所述傳遞閉包的每個(gè)配置文件計(jì)算局部構(gòu)建校驗(yàn)和。
9.根據(jù)權(quán)利要求1所述的方法,其中所述校驗(yàn)和通過(guò)使用XOR函數(shù)來(lái)計(jì)算。
10.根據(jù)權(quán)利要求1所述的方法,其中計(jì)算所述第一校驗(yàn)和還包括執(zhí)行確定性排序;用所述確定性排序來(lái)計(jì)算局部構(gòu)建校驗(yàn)和;并且使用所述局部構(gòu)建校驗(yàn)和來(lái)計(jì)算所述第一校驗(yàn)和,所述第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和。
11.一種系統(tǒng),包括: 一個(gè)或者多個(gè)計(jì)算機(jī); 耦合到所述一個(gè)或者多個(gè)計(jì)算機(jī)的計(jì)算機(jī)可讀介質(zhì),具有在其上存儲(chǔ)的指令,所述指令在由所述一個(gè)或者多個(gè)計(jì)算機(jī)執(zhí)行時(shí)使所述一個(gè)或者多個(gè)計(jì)算機(jī)執(zhí)行操作,所述操作包括: 創(chuàng)建用于第一構(gòu)建的第一編譯策略; 使用所述第一編譯策略來(lái)執(zhí)行所述第一構(gòu)建; 計(jì)算用于所述第一構(gòu)建的第一校驗(yàn)和;存儲(chǔ)所述第一編譯策略和所述第一校驗(yàn)和; 計(jì)算用于第二構(gòu)建的第二校驗(yàn)和; 確定所述第二校驗(yàn)和是否等于所述第一校驗(yàn)和; 響應(yīng)于確定所述第二校驗(yàn)和不等于所述第一校驗(yàn)和,創(chuàng)建第二編譯策略; 存儲(chǔ)所述第二編譯策略和所述第二校驗(yàn)和,并且使用所述第二編譯策略來(lái)執(zhí)行所述第二構(gòu)建;以及 響應(yīng)于確定所述第二校驗(yàn)和等于所述第一校驗(yàn)和,取回所述第一編譯策略、并且使用所述第一編譯策略來(lái)執(zhí)行所述第二構(gòu)建。
12.根據(jù)權(quán)利要求11所述的系統(tǒng),其中所述第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和;并且所述全局構(gòu)建校驗(yàn)和通過(guò)使用一個(gè)或者多個(gè)局部構(gòu)建校驗(yàn)和來(lái)計(jì)算。
13.根據(jù)權(quán)利要求11所述的系統(tǒng),所述指令還包括在被執(zhí)行時(shí)操作以使所述計(jì)算機(jī)執(zhí)行進(jìn)一步操作的指令,所述進(jìn)一步操作包括: 確定為所述第一構(gòu)建計(jì)算的局部構(gòu)建校驗(yàn)和對(duì)于所述第二構(gòu)建尚未改變,并且在所述第二編譯策略中重新使用所述第一編譯策略的與所述局部構(gòu)建校驗(yàn)和關(guān)聯(lián)的部分。
14.根據(jù)權(quán)利要求11所述的系統(tǒng),其中文件系統(tǒng)信息按照路徑名被排序以便計(jì)算局部構(gòu)建校驗(yàn)和。
15.根據(jù)權(quán)利要求14所述的系統(tǒng),其中所述文件系統(tǒng)信息包括校驗(yàn)和。
16.根據(jù)權(quán)利要求11所述的系統(tǒng),其中使用所述第一編譯策略來(lái)執(zhí)行所述第一構(gòu)建還包括檢查配置文件的內(nèi)容以確定依賴關(guān)系;并且為所述配置文件的每個(gè)依賴關(guān)系計(jì)算局部構(gòu)建校驗(yàn)和。
17.根據(jù)權(quán)利要求11所述的系統(tǒng),所述指令還包括在被執(zhí)行時(shí)操作以使所述計(jì)算機(jī)執(zhí)行進(jìn)一步操作的指令,所述進(jìn)一步操作包括: 基于所述配置文件的依賴關(guān)系來(lái)計(jì)算傳遞閉包。
18.根據(jù)權(quán)利要求17所述的系統(tǒng),其中為計(jì)算的所述傳遞閉包的每個(gè)配置文件計(jì)算局部構(gòu)建校驗(yàn)和。
19.根據(jù)權(quán)利要求11所述的系統(tǒng),其中所述校驗(yàn)和通過(guò)使用XOR函數(shù)來(lái)計(jì)算。
20.根據(jù)權(quán)利要求11所述的系統(tǒng),其中計(jì)算所述第一校驗(yàn)和還包括執(zhí)行確定性排序;用所述確定性排序來(lái)計(jì)算局部構(gòu)建校驗(yàn)和;并且使用所述局部構(gòu)建校驗(yàn)和來(lái)計(jì)算所述第一校驗(yàn)和,所述第一校驗(yàn)和是全局構(gòu)建校驗(yàn)和。
【文檔編號(hào)】G06F9/455GK103999050SQ201280062431
【公開(kāi)日】2014年8月20日 申請(qǐng)日期:2012年10月26日 優(yōu)先權(quán)日:2011年10月28日
【發(fā)明者】M·弗爾斯特, U·亞當(dāng)斯, S·舍青格, C·K·肯珀 申請(qǐng)人:谷歌公司