最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

用于更新源代碼文件的系統(tǒng)和方法與流程

文檔序號:12512676閱讀:469來源:國知局
用于更新源代碼文件的系統(tǒng)和方法與流程

本發(fā)明要求于2015年1月22日遞交的發(fā)明名稱為“用于更新源代碼文件的系統(tǒng)和方法”的第14/603,136號美國非臨時專利申請案的在先申請優(yōu)先權(quán),該在先申請的內(nèi)容以引入的方式并入本文。

技術領域

本發(fā)明通常涉及計算機編程語言中源代碼文件更新領域。



背景技術:

在商業(yè)、科學、教育以及娛樂大多數(shù)領域中,許多電子技術如數(shù)字計算機、計算器、音頻設備、視頻設備和電話系統(tǒng)等有助于在數(shù)據(jù)分析和通信方面提高生產(chǎn)率并降低成本。這些活動經(jīng)常涉及計算機編程和源代碼處理。對源代碼文件進行維護和更新是復雜且繁瑣的。

源代碼文件通常是動態(tài)或靜態(tài)的,兩種源代碼文件各有其優(yōu)點和缺點。靜態(tài)類型的源代碼在運行時執(zhí)行較快,然而較難維護和更新。動態(tài)類型的源代碼較易維護和更新,但運行相對較慢。在實際情況中,對所述動態(tài)類型的源代碼進行各種預編譯優(yōu)化來以使其運行更快。然而,進行預編譯優(yōu)化的傳統(tǒng)方法增加了復雜性,基本上抵消了動態(tài)類型的源代碼在維護和更新方面的諸多優(yōu)勢。

動態(tài)腳本語言的一個重要特征在于:所述代碼可以由解釋器直接執(zhí)行,無需編譯過程。這一特征有助于簡化熱補丁過程。實際上,如果沒有對所述動態(tài)源代碼進行預編譯優(yōu)化且應用的大量文件中的其中一個源代碼文件存在漏洞或編程缺陷,則應用維護者僅能將與所述漏洞對應的原始源代碼文件用補丁或修復后的源代碼文件替換,并將其重新加載到語言解釋器中(在打補丁時其他大量的源代碼文件保持不變)。然而,當通過預編譯優(yōu)化來解決動態(tài)代碼運行慢的問題時,預編譯優(yōu)化會給傳統(tǒng)的熱補丁處理嘗試帶來挑戰(zhàn)。在一傳統(tǒng)示例中,第一文件(文件1)中定義常數(shù)ABC=100,第二文件(文件2)在運算K=ABC+25中使用所述ABC常數(shù)。在進行傳統(tǒng)的預編譯優(yōu)化時(如常數(shù)傳播優(yōu)化),將文件2中的ABC替換為100,則優(yōu)化后的文件是K=125。然而,如果文件1中有更改(如定義ABC=200),且所述維護者遵循傳統(tǒng)的熱補丁處理方法(僅替換文件1而不觸及文件2),則打補丁將無法解決所述問題,因為沒有對應地去適當考慮對文件2的影響。

為了解決在動態(tài)代碼應用中預編譯優(yōu)化帶來的復雜性和潛在問題,傳統(tǒng)方案中通常通過全應用范圍預編譯來替換所述應用中的全部源代碼文件,并重新加載所述全部源文件(例如,與靜態(tài)代碼方法類似)。然而,這些傳統(tǒng)方法通常導致三個問題,這些問題減少或消除了與動態(tài)類型源代碼相關的維護和上傳方面的優(yōu)勢。第一個問題是增加了打補丁負荷。即使打補丁主要是針對替換和重新加載修復后的所述文件,但所述傳統(tǒng)方法卻要求將所有文件進行全局替換和重新加載。第二個問題是增加了預編譯復雜性。對企業(yè)應用進行全局范圍的預編譯通常需要很長時間(如幾小時或幾天等)。原始熱補丁模式中則不需要執(zhí)行這樣的步驟。第三個問題是損失了熱補丁持續(xù)運行的特征。由于一些文件屬于特定類型(如基本庫或啟動加載程序等)且在未中止所述應用時無法被替換,因此所述應用維護者可能會中止該應用來重新加載所有文件。

動態(tài)腳本語言如JavaScript、Python、PHP和Lua等廣泛應用于構(gòu)建大型應用。其中一些示例包括:Web前端應用(如Map、Gmail、Calendar、Docs等基于Google網(wǎng)頁的工具);Web后端應用(如使用PHP的Facebook應用等);游戲行業(yè)應用(如使用Lua的Blizzard公司的魔獸世界等)以及手機應用(如使用Object-C的蘋果iOS應用等)。通過傳統(tǒng)方法來維護和更新大型應用中含動態(tài)腳本語言的一些文件通常是耗時且耗資源的。



技術實現(xiàn)要素:

描述了一種有助于進行高效且有效的應用程序維護和補丁分發(fā)的方法和系統(tǒng)。在一實施例中,一種設備包括:存儲器,用于存儲應用源代碼文件和創(chuàng)建熱補丁文件的指令,其中所述熱補丁文件促進了對所述應用源代碼文件的更新,所述應用源代碼文件包括更新源代碼文件以及進行更新前的初始源代碼文件;處理器,用于創(chuàng)建所述熱補丁文件,其中:所述熱補丁文件是基于一對優(yōu)化的源代碼文件集之間的差異創(chuàng)建的,這對優(yōu)化的源代碼文件集是對第一初始源代碼文件集進行優(yōu)化以及對第二源代碼文件集進行單獨優(yōu)化得到的;所述第二文件集包括更新源代碼文件以及從所述第一文件集中智能選擇出的關聯(lián)的源代碼文件,其中所述第二文件集中的源代碼文件比所述第一文件集少;所述源代碼文件是動態(tài)腳本語言文件;所述第一源代碼文件集包括進行更新前的初始源代碼文件。

在一種示例性實現(xiàn)方式中,所述處理器創(chuàng)建了用于追蹤該第一文件集中所述初始源代碼文件之間關聯(lián)的影響圖,其中所述影響圖用于識別從所述第一文件集中智能選擇出的所述關聯(lián)的源代碼文件。對與所述關聯(lián)的初始源代碼文件有關的所述影響圖進行的查詢返回兩類結(jié)果,包括:由于所述更新源代碼文件的更改可能也會發(fā)生更改的初始源代碼文件;以及含輸入到所述更新源代碼文件的初始源代碼文件。所述更新源代碼文件包含的語句可能不同于其中一個初始源代碼文件中的語句,使用與所述更新源代碼文件包括的所述語句有關的查詢來對與關聯(lián)的初始源代碼文件有關的影響圖進行查詢。一部分所述源代碼文件包含在動態(tài)模塊中,且初始補丁文件與所述動態(tài)模塊關聯(lián)。所述初始補丁文件用于糾正其中一個初始源代碼文件中的漏洞,所述熱補丁文件包括對第一個初始源代碼文件的更改,而所述更新源代碼文件包括對另一初始源代碼文件的修改。

在一實施例中,實現(xiàn)一種用于更新應用文件的方法。對多個原始源代碼文件進行第一預編譯優(yōu)化,得到多個預優(yōu)化的原始源代碼文件。初始補丁文件與所述多個原始源代碼文件中的第一個文件的更改關聯(lián)。所述方法包括:確定所述多個原始源代碼文件中的第二個文件是否與所述初始補丁文件關聯(lián),其中如果所述多個原始源代碼文件中的第二個文件與所述初始補丁文件關聯(lián),則受影響的源代碼文件集包含所述多個原始源代碼文件中的第二個文件。對所述初始補丁文件和所述受影響的源代碼文件集進行第二預編譯優(yōu)化,得到多個與補丁關聯(lián)的預優(yōu)化源代碼文件?;谝韵虏僮鲃?chuàng)建新的熱補丁文件:將1)所述多個與補丁關聯(lián)的預優(yōu)化源代碼文件與2)對應的多個預優(yōu)化的原始源代碼文件進行比較。所述新的熱補丁文件包括與所述多個預優(yōu)化的原始源代碼文件中一個對應的文件不同的所述多個與補丁關聯(lián)的預優(yōu)化源代碼文件中的一個文件。

在一可選實施例中,一種裝置包括:處理器,用于更新受到熱補丁文件影響的應用程序的源代碼文件,且如果所述熱補丁文件不是啟動加載程序文件,則在加載所述熱補丁文件時繼續(xù)運行所述應用,無需重新加載不受所述熱補丁文件影響的其他源代碼文件。還包括存儲器,用于存儲針對所述處理器的指令和信息,其中所述信息包括與所述應用關聯(lián)的多個文件,所述應用包括受到所述熱補丁文件影響的文件。所述多個應用文件是動態(tài)腳本語言文件。所述熱補丁文件不同于初始更新文件。

所述處理器將所述多個應用文件中的一個文件替換為所述熱補丁文件,并在避免編譯所述熱補丁文件時重新加載到語言解釋器中。

應理解的是,可以采用各種技術(如常數(shù)廣播、死碼刪除和循環(huán)不變碼移動等),這些技術可以帶來各種不同的結(jié)果。當確定采用優(yōu)化方法時也需要考慮各種因素(如優(yōu)化時使用的處理資源,以及優(yōu)化的運行文件中引入的復雜性等)。此處使用的術語“優(yōu)化”指的是基于某種考慮或標準生成能夠改進所述原始源代碼文件性能(如針對優(yōu)化中引入的復雜性提高運行速度等)的文件集的過程。所述術語“優(yōu)化”是編程以及編譯等計算機技術的合計,此處用于此目的。此處使用的術語“優(yōu)化”不一定指的是應用運行速度的絕對優(yōu)化(如最快和最佳等)。

附圖說明

附圖并入且構(gòu)成說明書的一部分,用于示例性解釋本發(fā)明的原則,而非將本發(fā)明限定于此處描述的特定實現(xiàn)方式。除非另有說明,附圖不是按照比例繪制的。

圖1為本發(fā)明實施例提供的一種示例性計算機編程環(huán)境的方框圖;

圖2為本發(fā)明實施例提供的一種示例性影響圖;

圖3為本發(fā)明實施例提供的一種示例性應用源代碼文件的方框圖;

圖4為本發(fā)明實施例提供的一種示例性系統(tǒng)架構(gòu)的方框圖;

圖5為本發(fā)明實施例提供的一種示例性更新實現(xiàn)方式的方框圖;

圖6為本發(fā)明實施例提供的一種示例性運行源代碼文件的方框圖;

圖7為本發(fā)明實施例提供的一種示例性方法的流程圖。

具體實施方式

現(xiàn)將詳細地對本發(fā)明的各種實施例、附圖示出的示例做出參考。雖然會結(jié)合這些實施例進行描述,但可以理解的是它們并不用于將本發(fā)明限制于這些實施例。相反,本發(fā)明公開旨在覆蓋可以包括在由所附權(quán)利要求書限定的本發(fā)明公開的精神和范圍內(nèi)的替代物、更改和等同物。另外,在以下本發(fā)明的詳細描述中,闡述了許多特定細節(jié)以便提供對本發(fā)明的透徹理解。然而,可以理解的是,實際應用中,可以不包括本發(fā)明的這些特定細節(jié)。在其它實例中沒有詳細描述眾所周知的方法、流程、部件和電路,以免對本發(fā)明的各方面造成不必要地模糊。

描述了一種用于計算機程序發(fā)展的方法和系統(tǒng),其有助于進行高效且有效的應用程序維護和補丁分發(fā)。在一實施例中,采用小的有效熱補丁文件對優(yōu)化的動態(tài)腳本文件進行更新或“打補丁”。創(chuàng)建的所述熱補丁文件利用更新影響文件來避免多個全局預編譯優(yōu)化過程。在運行環(huán)境中,在將不受所述熱補丁文件影響的源代碼文件進行重新加載的需求最小化時,所述熱補丁文件有助于應用操作延續(xù)性。所述更新或打補丁與各種應用維護環(huán)境和更新環(huán)境(如分布式的、本地的以及網(wǎng)絡化的等)是兼容的。

圖1為本發(fā)明實施例提供的一種示例性環(huán)境100的方框圖。所述環(huán)境100包括系統(tǒng)101和系統(tǒng)102,其中所述系統(tǒng)101和所述系統(tǒng)102可以相隔很遠。所述系統(tǒng)101創(chuàng)建熱補丁文件103,所述熱補丁文件103將轉(zhuǎn)發(fā)到所述系統(tǒng)102。所述系統(tǒng)102執(zhí)行應用且使用所述熱補丁103來更新所述應用包含的文件。

所述系統(tǒng)101包括處理組件110和存儲器120,其中所述處理組件110基于多個原始應用文件和初始補丁文件創(chuàng)建熱補丁文件。所述初始補丁文件與正被更新的其中一個原始應用文件對應。所述處理組件110對所述多個原始應用文件進行第一優(yōu)化以創(chuàng)建第一優(yōu)化文件集。對與所述初始補丁文件關聯(lián)的所述原始應用文件進行識別和更新以反映所述初始補丁文件中包含的更改。

所述處理組件120對得到的更新文件進行第二優(yōu)化以創(chuàng)建第二優(yōu)化文件集。將所述第一優(yōu)化文件集與所述第二文件集進行比較。與所述第一文件集中對應文件不同的所述第二文件集中的文件包含在熱補丁文件中。

所述處理器110訪問并使用所述存儲器120中存儲的信息。所述信息包括:所述多個原始應用文件122;所述初始補丁文件123;以及指示所述處理器創(chuàng)建所述熱補丁文件103的指令,包括對受到所述初始補丁文件123的更新影響的所述原始應用文件122進行識別并更新。所述原始應用文件122包括源代碼文件131、132、133和134。所述初始補丁文件123包括源代碼文件151。

所述系統(tǒng)102包括處理組件170和存儲器180,其中在運行應用時所述處理組件170訪問熱補丁文件103。至少一個應用文件受到所述熱補丁文件103的影響,所述處理組件170對受到該熱補丁文件103影響的所述文件(如打補丁后的代碼文件193等)進行更新。如果所述熱補丁文件103不是啟動加載程序文件,則不中止所述應用且不重新加載未受所述熱補丁文件103影響的文件(如源代碼文件191、192和194等)。因此,不需要進行全局預優(yōu)化以及全局重新加載過程。所述處理器170訪問并利用所述存儲器180中存儲的信息,其中所述信息包括與所述應用關聯(lián)的多個文件(如源代碼文件191、192和194等),所述應用包括受到所述熱補丁文件103的更新所影響的文件(如打補丁后的代碼文件193等)。

在一種示例性實現(xiàn)方式中,所述系統(tǒng)101可以位于應用供應商處,而所述系統(tǒng)102位于遠端的客戶位置??蛻粼谒鱿到y(tǒng)102中運行供應商提供的應用。所述供應商使用系統(tǒng)101來創(chuàng)建、分發(fā)和維護所述應用,包括創(chuàng)建所述熱補丁文件103,其中所述熱補丁文件103將轉(zhuǎn)發(fā)到所述客戶以更新所述應用文件??梢酝ㄟ^各種方式(如通過網(wǎng)絡或者如光盤、閃存盤等便攜式計算機可讀介質(zhì))將所述熱補丁文件傳送到所述系統(tǒng)102。

應理解的是,可以采用各種技術(如常數(shù)廣播、死碼刪除和循環(huán)不變碼移動等),這些技術可以帶來各種不同的結(jié)果。當確定采用優(yōu)化方法時也需要考慮各種因素(如優(yōu)化時使用的處理資源,以及優(yōu)化的運行文件中引入的復雜性等)。此處使用的術語“優(yōu)化”指的是基于某種考慮或標準生成能夠改進所述原始源代碼文件性能(如針對優(yōu)化中引入的復雜性提高運行速度等)的文件集的過程。所述術語“優(yōu)化”是編程以及編譯等計算機技術的合計,此處用于此目的。此處使用的術語“優(yōu)化”不一定指的是應用運行速度的絕對優(yōu)化(如最快和最佳等)。

在一實施例中,影響圖用來識別與初始更新或補丁文件關聯(lián)的原始應用文件。所述影響圖是在優(yōu)化所述原始或初始源代碼文件時創(chuàng)建的。該圖是有向圖,其中節(jié)點表示源代碼文件,邊表示從優(yōu)化數(shù)據(jù)源開始到優(yōu)化后的文件結(jié)束的優(yōu)化影響。在一示例中,第一文件(文件1)中定義常數(shù)ABC=100,第二文件(文件2)在運算中使用所述ABC常數(shù)。常數(shù)傳播優(yōu)化中將文件2中的ABC替換為100。在該示例中,所述圖中有從文件1到文件2的邊。

在一示例性實施例中,計算機實現(xiàn)的系統(tǒng)101包括:第一預編譯優(yōu)化模塊,用于在處理器中對多個原始源代碼文件進行第一預編譯優(yōu)化,得到多個預優(yōu)化的原始源代碼文件;補丁文件訪問模塊,用于訪問與所述多個原始源代碼文件中的第一個文件的更改關聯(lián)的初始補丁文件;確定模塊,用于確定所述多個原始源代碼文件中的第二個文件是否與所述初始補丁文件關聯(lián),其中如果所述第二個文件與所述初始補丁文件關聯(lián),則受影響的源代碼文件集包含所述第二個文件;第二預編譯優(yōu)化模塊,用于對所述初始補丁文件和所述受影響的源代碼文件集進行第二預編譯優(yōu)化,得到多個與補丁關聯(lián)的預優(yōu)化源代碼文件;比較模塊,用于將所述多個與補丁關聯(lián)的預優(yōu)化源代碼文件與對應的多個預優(yōu)化的原始源代碼文件進行比較,并且識別新的熱補丁文件,其中所述新的熱補丁文件包括與所述多個預優(yōu)化的原始源代碼文件中對應的文件不同的所述多個與補丁關聯(lián)的預優(yōu)化源代碼文件中的文件。在一些實施例中,所述計算機實現(xiàn)的系統(tǒng)101可以包括其他或者附加模塊,用于執(zhí)行所述實施例中描述的任一或組合的步驟。

圖2為本發(fā)明實施例提供的一種示例性影響圖的圖。所述影響圖包括與多個原始源代碼文件對應的多個節(jié)點A、B、C、D、E、F、和G,以及反映優(yōu)化操作(從優(yōu)化數(shù)據(jù)源開始到優(yōu)化后的文件結(jié)束)影響的各個邊。節(jié)點A為執(zhí)行各種功能的節(jié)點B和C定義常數(shù)。將節(jié)點A的輸出輸入到節(jié)點B和C,將節(jié)點B和C的輸出輸入到節(jié)點D,將節(jié)點C的輸出輸入到節(jié)點E,且將節(jié)點E的輸出輸入到節(jié)點E和F。在熱補丁階段中,如果存在打補丁或修復后的原始源代碼文件,則使用所述圖來定位或選擇相關或關聯(lián)的文件(例如,節(jié)點B和C與節(jié)點D關聯(lián)等),且在優(yōu)化中使用所選擇的文件。在“小范圍”預優(yōu)化中使用所述關聯(lián)的更新源代碼文件(例如,源代碼文件的范圍或數(shù)量比原先進行的全局優(yōu)化小)。所述選擇可以覆蓋大量不同的源代碼文件。

在傳統(tǒng)方法中,不創(chuàng)建影響圖且不使用所述影響圖來識別關聯(lián)的文件。在一示例性實現(xiàn)方式中,查詢所述影響圖可以帶來包括以下兩類節(jié)點的輸出:圖中通過與所述補丁文件關聯(lián)的節(jié)點可到達的節(jié)點,以及圖中可以到達與所述補丁文件關聯(lián)的節(jié)點的節(jié)點。第一類指的是由于所述補丁文件的修改可以被更改的文件,而第二類指的是使用所述補丁文件來進行預編譯優(yōu)化的文件。

在一實施例中,源代碼文件包含在不同類別或集合的源代碼文件中。例如,在引入補丁文件前,有包含用戶寫程序代碼(如寫程序指令、聲明、語句或函數(shù)等)創(chuàng)建的源代碼文件的初始應用文件集。有包含對所述初始應用集的源代碼文件進行用戶寫更改或更新所創(chuàng)建的源代碼文件的更新主文件集。有對所述原始源代碼文件(也叫做“預優(yōu)化”文件)進行編譯優(yōu)化得到的源代碼文件集等等。

圖3為本發(fā)明實施例提供的一種示例性應用源代碼文件的方框圖。將所述源代碼文件按照各種類別或集合排列。初始文件集210包括源代碼文件211、212、213、214、215、216、217、218和219。更新主文件集220包括源代碼文件221。更新主文件集230包括源代碼文件231。更新輔文件集240包括源代碼文件241和242。更新輔文件集250包括源代碼文件251和252。不同類別或集合中的源代碼文件之間可以具有各種操作關系,包括相互之間直接對應、相互之間間接關聯(lián)以及相互之間操作上沒有關聯(lián)。為確保能通過打補丁將合適的源代碼文件進行更新,確定和追蹤所述源代碼文件之間的關系是很重要的。

在一實施例中,所述初始文件集中的第一源代碼文件包括用戶做出的特征更改(如重寫指令或定義常數(shù)等),其中所述特征更改直接與初始補丁文件的特征更改或更新對應。例如,所述源代碼文件213的指令CAR=GID–50直接對應于源代碼221的指令更改,而所述源代碼文件215的常數(shù)定義FT=175直接對應于所述源代碼231的常數(shù)定義FT=148的更改。所述初始應用文件集中的第二源代碼文件包括與所述初始補丁文件的更改間接關聯(lián)的特征。例如,所述源代碼文件211包括常數(shù)定義GID=200,其不根據(jù)所述初始補丁文件221直接更改,而是與所述初始補丁文件221中更改后的指令CAR=CID+10間接關聯(lián)。類似地,所述源代碼文件214包括指令Print(CAR),其不根據(jù)所述初始補丁文件221直接更改,而是與所述初始補丁文件221中更改后的指令CAR=CID+10間接關聯(lián)(因為所述初始補丁文件221不“直接”包括所述PRINT指令,但所述補丁文件221中的更改會改變所述文件214中變量CAR的最后打印輸出)。

在一示例性實現(xiàn)方式中,所述初始應用集包括的一些源代碼文件(如與初始補丁文件間接相關的源代碼文件)也可以包含在所述更新輔文件集中。所述更新輔文件集240包括的源代碼文件241和242與所述初始文件集210中的源代碼文件211和214相同,所述更新輔文件集250包括的源代碼文件251和252與所述初始文件集210中的源代碼文件218和219相同。應理解的是,所述更新輔文件集可以有各種配置。所述更新輔文件集可以直接使用所述初始集中的源代碼文件,或所述更新輔文件集可以使用所述更新輔文件集的備份。

在一示例性實現(xiàn)方式中,僅預優(yōu)化的有更改的更新文件包含在熱補丁中且被重新加載。盡管有比輸入補丁文件更多受到影響的文件,但是范圍通常比應用中包含的所有源代碼文件要小得多。由于受影響的文件范圍小,預優(yōu)化比傳統(tǒng)的全局范圍預優(yōu)化速度快。如果更新的文件不屬于啟動加載程序,則所述受影響的文件也不屬于所述啟動加載程序。因此,所述應用的維護者在不中止所述應用時也可以采用補丁。

圖4為本發(fā)明實施例提供的一種示例性架構(gòu)的方框圖。預編譯優(yōu)化器381對初始文件集310(如包括源代碼文件311、312、313和314)進行優(yōu)化得到初始預優(yōu)化文件集320(如包括源代碼文件321、322、323和324),其中所述初始預優(yōu)化文件集320將被轉(zhuǎn)發(fā)到運行應用395中。所述預編譯優(yōu)化器還可以用于創(chuàng)建影響圖370,其有助于追蹤源代碼文件311、312、313和314之間的關聯(lián)(如追蹤哪個文件包含另一文件使用的值,或哪個文件包含影響另一文件操作或指令的指令等)。

更新主文件集330包括源代碼文件331,其包括針對所述應用的更改或更新。在一示例性實現(xiàn)方式中,初始補丁文件331的更新直接對應于源代碼文件312,而源代碼文件312是針對所述源代碼文件312的一種“替換”。然而,所述源代碼文件331包含在所述更新主文件330中,且直接對應于所述原始源代碼文件312。需要注意的是所述源代碼文件331不一定直接對應于熱補丁文件390中包括的“替換”源代碼文件391,其將在詳細描述的后續(xù)部分進一步說明。應理解的是,在另一示例性實現(xiàn)方式中,所述更新主文件集包括一個以上初始補丁文件331。

將詢問所述原始源代碼文件中哪些文件與所述初始補丁文件331間接關聯(lián)的查詢轉(zhuǎn)發(fā)到影響圖370。如上所述,所述影響圖370追蹤所述原始應用文件之間的關聯(lián),包括追蹤所述源代碼文件312與其他源代碼文件311、313和314之間的間接關聯(lián)。

在一示例性實現(xiàn)方式中,所述影響圖370將所述源代碼文件312識別為與所述源代碼文件314關聯(lián),且由于所述源代碼文件312直接對應于所述初始補丁文件331,因此所述影響圖370指示所述源代碼文件314與所述初始補丁文件331關聯(lián)。訪問源代碼331并作為源代碼文件341包含在更新輔文件集340中。應理解的是,初始文件集310中包括的其他源代碼文件可以與其他初始補丁文件(未示出)關聯(lián)。預編譯優(yōu)化器322對來自該更新主文件集330中的所述初始補丁文件331和來自該更新輔文件集340中的所述源代碼文件341進行優(yōu)化,輸出更新后的預優(yōu)化文件集350(如包括源代碼文件351和352)。

將所述初始預優(yōu)化文件集320(如包括源代碼文件321、322、323和324)和所述更新后的預優(yōu)化文件集350(如包括源代碼文件351和352)轉(zhuǎn)發(fā)到比較器383,所述比較器383確定了所述更新后的預優(yōu)化文件集380中包含的哪些源代碼文件不同于所述初始預優(yōu)化文件集320中的源代碼文件。得到的不同的源代碼文件391包含在熱補丁文件集390中,且將所述熱補丁文件集390轉(zhuǎn)發(fā)到應用340。在一示例性實現(xiàn)方式中,使用所述初始預優(yōu)化文件320來運行所述應用,然后在稍后的時間里將所述熱補丁文件390轉(zhuǎn)發(fā)到所述應用395,用來在無需中止所述應用下更新所述應用。

在一實施例中,圖4中上半部分進行的預編譯優(yōu)化381是對所述初始文件集310中包含的文件進行的全局優(yōu)化(例如,類似于傳統(tǒng)的全局方法)。圖4中后半部分執(zhí)行的預編譯優(yōu)化382是對所述主更新文件集和所述更新輔文件集中的源代碼文件的組合優(yōu)化,其避免了對所述初始文件集310中的其他源代碼文件的再優(yōu)化。所述初始文件集310中包含的源文件可以是基于動態(tài)腳本語言的應用文件。

圖5為本發(fā)明實施例提供的一種示例性更新實現(xiàn)方式的方框圖。

初始文件集410包括四個源代碼文件411、412、413和414,其中這些文件輸入到預優(yōu)化器481,而所述預優(yōu)化器481反過來輸出初始預優(yōu)化文件集420。所述初始預優(yōu)化文件集420不再使用源代碼文件411中的FID和GID變量定義以及源代碼文件413包括的CAR=GID–50指令,因此將這些語句從源代碼文件421和423中移除。預優(yōu)化器481也生成影響圖470。所述初始補丁文件221用于查詢所述影響圖470,其反映了所述源代碼文件411和414與所述源代碼文件413之間間接關聯(lián)。對源代碼文件331、411和414進行優(yōu)化得到更新后的預優(yōu)化文件集450(包括源代碼文件451、452和453)。比較器483將所述初始預優(yōu)化文件集420和所述更新預優(yōu)化文件集450中的源代碼文件進行比較,被識別為不同的源代碼文件(如源代碼文件491)包含在熱補丁文件490中。在進行比較后,僅源代碼文件424(“文件4”)發(fā)生了變化,且最后一個熱補丁文件是新的源代碼文件453(新“文件4”)。最后,將所述熱補丁文件集運用到運行應用中。

圖6為本發(fā)明實施例提供的運行源代碼文件的一種示例性實現(xiàn)方式的方框圖。應用運行文件510在更新前包括源代碼文件421、422、423和424,應用運行文件520在更新后包括源代碼文件421、422、423和453。將含指令PRINT(150)的所述源代碼文件424替換為包括含指令為PRINT(210)的源代碼文件453的熱補丁文件。生成的熱補丁文件可能不同于初始補丁文件。在運行應用中簡單地采用所述初始補丁文件431不能帶來精確可靠的結(jié)果。如果將所述初始補丁文件431簡單地運用到所述更新的應用運行文件520中,則所述補丁文件不能查找到GID定義(因為源代碼文件421已經(jīng)不再包括GID定義),且不正確的原始值150而非更新值210將會被打印出。

圖7為本發(fā)明實施例提供的一種示例性方法700的流程圖。所述方法700中的操作可以由計算機系統(tǒng)中的處理器執(zhí)行(例如,類似于處理組件110等)。

在塊710,對多個原始源代碼文件進行第一預編譯優(yōu)化,得到多個預優(yōu)化的原始源代碼文件。

在塊720,訪問與所述多個原始源代碼文件中的第一個文件的更改關聯(lián)的初始補丁文件。

在塊730,確定所述多個原始源代碼文件中的第二個文件是否與所述初始補丁文件關聯(lián),其中如果所述多個原始源代碼文件中的第二個文件與所述初始補丁文件關聯(lián),則受影響的源代碼文件集包含所述多個原始源代碼文件中的第二個文件。在一實施例中,確定所述多個原始源代碼文件中的另一個文件是否與所述初始補丁文件關聯(lián)的過程包括:1)創(chuàng)建影響圖,其中所述影響圖包括所述多個原始源代碼文件之間的關聯(lián);2)查詢所述影響圖以識別哪個原始源代碼文件與補丁源代碼文件關聯(lián)。

在塊740,對所述初始補丁文件和所述受影響的源代碼文件集進行第二預編譯優(yōu)化,得到多個與補丁關聯(lián)的預優(yōu)化源代碼文件。

在塊750,將所述多個與補丁關聯(lián)的預優(yōu)化源代碼文件與對應的多個預優(yōu)化的原始源代碼文件進行比較。通過所述比較結(jié)果來識別新的熱補丁文件中包含的源代碼文件。所述新的熱補丁文件包括與所述多個預優(yōu)化的原始源代碼文件中一個對應的文件不同的所述多個預優(yōu)化補丁源代碼文件中的一個文件。所述熱補丁文件不同于所述初始補丁文件。與補丁關聯(lián)的預優(yōu)化源代碼文件比預優(yōu)化的原始源代碼文件少。

在一實施例中,所述多個原始源文件中的一部分文件包含在動態(tài)模塊中,且補丁文件與所述動態(tài)模塊關聯(lián)。通過采用新的維護和更新方法來減少使用若干動態(tài)模塊的系統(tǒng)中的打補丁操作,其中所述若干動態(tài)模塊是從源文件中預編譯得到的。采用動態(tài)或靜態(tài)語言來寫所述模塊,且所述模塊支持動態(tài)替換。如果所述源文件中有漏洞補丁,則需要識別所述動態(tài)模塊且在動態(tài)模塊層上進行替換。所述動態(tài)模塊支持動態(tài)替換,且所述動態(tài)模塊在進行熱補丁操作時被替換。

在一實施例中,實現(xiàn)其他優(yōu)化。所述影響圖的邊源是文件,將粒度減小到語句層(或編譯器抽象語法樹節(jié)點層)。在打補丁過程中,識別所述補丁文件中更改的語句,且使用該語句來查詢所述影響圖。這種優(yōu)化還可以進一步減小查詢結(jié)果的范圍,且減少預優(yōu)化和打補丁的時間。

相對于基于傳統(tǒng)靜態(tài)語言的應用中的更新或打補丁,此處描述的新的實施例在系統(tǒng)結(jié)構(gòu)和打補丁過程方面都不同。在打補丁系統(tǒng)結(jié)構(gòu)側(cè),不同于傳統(tǒng)靜態(tài)語言,新的過程引入了影響圖。在處理側(cè),有與影響圖查詢和預編譯結(jié)果比較相關的其他步驟。這兩個步驟有助于減少打補丁過程中的預編譯操作,且還有助于減少打補丁負荷。

本文中所述的實施例是以計算機可執(zhí)行指令(例如程序模塊)的大背景來討論的,這些計算機指令位于某種形式的計算機可讀介質(zhì),并由一個或多個計算機或其它設備執(zhí)行。舉例來說,計算機可讀存儲介質(zhì)可以包括非瞬時性計算機存儲介質(zhì)。非瞬時性計算機可讀存儲介質(zhì)包括除暫存?zhèn)鞑バ盘栔獾乃杏嬎銠C可讀介質(zhì)。計算機可讀的存儲介質(zhì)包括在用于存儲計算機可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其他數(shù)據(jù)等信息的任何方法或技術中所實現(xiàn)的易失性和非易失性、可移動和不可移動介質(zhì)。一般而言,程序模塊包括例程、程序、對象、組件以及數(shù)據(jù)結(jié)構(gòu)等,其執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型。根據(jù)各種實施例中的需要,程序模塊的功能可以組合或分布。

盡管本文中已經(jīng)揭示某些優(yōu)選實施例和方法,但所屬領域的技術人員將從前述揭示內(nèi)容顯而易見,在不脫離本發(fā)明的精神和范圍的情況下可以對此類實施例和方法進行變化和更改。希望本發(fā)明將僅限于所附權(quán)利要求書以及可適用法律的規(guī)則和原理所需的范圍。

當前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1