計算機系統(tǒng)當前被廣泛應用。一些此類系統(tǒng)在它們被部署在終端用戶的場所之前被(某些在很大程度上)定制。作為示例,一些此類計算機系統(tǒng)包括業(yè)務系統(tǒng),諸如顧客關系管理(CRM)系統(tǒng)、企業(yè)資源規(guī)劃(ERP)系統(tǒng)、業(yè)務線(LOB)系統(tǒng)等。在這些類型的系統(tǒng)中,用戶或顧客首先購買通用業(yè)務系統(tǒng),且用戶或顧客通常對該通用業(yè)務系統(tǒng)進行定制、擴展或其它修改,以便獲得其自己的定制部署。
通常,這樣的定制已經要么通過對源代碼的直接修改要么通過使原始軟件的作者將許多鉤點(hook-point)插入到軟件源代碼中而被提供。
對源代碼的直接修改為定制提供了最大的靈活性。通過這樣的修改,可以對軟件做出任意修改。當原始軟件需要被修改時,例如當需要更新或補丁時,這種方案的限制變得明顯。在這樣的實例中,對原始源代碼的修改可能不再與各種定制互操作。這樣,開發(fā)者必須返回到修改并仔細地將每個先前生成的定制對接或修改到經更新/打補丁的源代碼。在大多數(shù)情況下,這種手動且乏味的過程往往需要顯著的開發(fā)者時間并因此是非常昂貴的。
在原始源代碼中提供許多鉤點是在其中可以實現(xiàn)定制的另一種方式。原始應用的作者可以將許多鉤點插入在做出呼出的地方。這被稱為“事件”。在事件中,原始作者將在源代碼中所定義的各位置處插入一個或多個呼出。每個這樣的呼出將調出傳遞某些預定義參數(shù)的指定事件。另外,在運行時,呼出將檢查以查明是否存在任何對事件的訂閱者。如果存在對事件的訂閱者,那么訂閱者代碼被加載并被執(zhí)行。標準事件的一個限制是軟件的原始作者可能沒有在代碼中的精確位置處提供需要應用定制的開發(fā)者所需要的鉤點。而且,原始作者將定義呼出的合約或參數(shù)。在一些實例中,如果呼出的合約或參數(shù)被原始作者通過升級或補丁改變,則依賴于所述呼出的定制可能失敗。
概述
提供了一種修改源代碼的編程單元的執(zhí)行行為的計算機實現(xiàn)的方法。所述方法包括加載源代碼的編程單元并確定是否針對該編程單元定義了至少一個定制。至少一個定制基于所述定制的先決條件是否被滿足而被選擇性地執(zhí)行。
提供本概述以便以簡化的形式介紹以下在詳細描述中進一步描述的一些概念。本概述并非旨在標識出要求保護的主題的關鍵特征或必要特征,亦非旨在用作輔助確定要求保護的主題的范圍。所要求保護的主題不限于解決在背景中提及的任何或所有缺點的實現(xiàn)。
附圖簡述
圖1是根據本發(fā)明一實施例的在其中開發(fā)者提供了與原始源代碼有關的定制的環(huán)境的圖示。
圖2是通過執(zhí)行流水線來執(zhí)行軟件應用的處理器的圖示。
圖3是根據本發(fā)明的一個實施例的執(zhí)行軟件應用的計算機實現(xiàn)的方法。
圖4是根據本發(fā)明的一個實施例的定義訂閱者動態(tài)事件的方法。
圖5示出在其中本發(fā)明的實施例是特別有用的示例性架構的框圖。
圖6示出在其中本發(fā)明的實施例是有用的云計算架構。
圖7-10示出在其中本發(fā)明的實施例是有用的各種移動設備。
圖11是一個說明性計算環(huán)境的框圖。
詳細描述
本發(fā)明的各實施例通常允許將任意定制應用到代碼的基本上任意的可執(zhí)行單元,包括源代碼的方法、函數(shù)、模塊和甚至一個或多個行,而無需修改原始源代碼。根據在此所述的實施例,執(zhí)行原始源代碼的平臺將提供“動態(tài)鉤”,所述動態(tài)鉤允許生成與原始源代碼有關的定制的開發(fā)者訂閱該開發(fā)者定義的一個或多個事件。只要所定義的事件的先決條件仍然有效,就可以在不影響定制的操作的情況下提供來自軟件制造商的對原始源代碼的改變,例如更新和/或補丁。
圖1是根據本發(fā)明一實施例的在其中開發(fā)者14提供了與原始源代碼12有關的定制18的環(huán)境的圖示。在環(huán)境10中,已經從源代碼發(fā)布者,例如微軟公司,獲得了源代碼12。此處使用的“源代碼”旨在意指被編譯或匯編到計算機可執(zhí)行程序中的命令的文本列表。源代碼可以以許多已知的或將來開發(fā)的編程語言中的任意編程語言來提供。通常,源代碼將由軟件產品的一個或多個作者逐行地輸入。
如上所述,許多軟件產品旨在在被終端用戶部署之前就被定制。這樣的軟件產品的一個示例是企業(yè)資源計劃系統(tǒng)。然而,無論何時期望在無需改變軟件產品的源代碼的情況下改變軟件產品的行為,本發(fā)明的各實施例都是可應用的。在圖1示出的示例中,開發(fā)者14具有對源代碼12的訪問,如由虛線16所示。這樣的訪問可以是通過任意合適的方式的,包括在線訪問或離線訪問(例如源代碼的硬拷貝)。源代碼可以被用作參考。為了定制軟件產品,開發(fā)者14查看源代碼12并生成一個或多個定制18。這些定制18是動態(tài)事件定義的形式,如將在下面詳細描述的。定制18被提供給執(zhí)行平臺20,該執(zhí)行平臺將通常已經具有原始、非改動狀態(tài)的源代碼12。執(zhí)行平臺20是硬件、軟件或其組合的任意合適的安排,所述安排能夠接收源代碼、基于源代碼生成機器可執(zhí)行代碼并執(zhí)行所述機器可執(zhí)行代碼。這樣,執(zhí)行平臺20可以是單個個人計算機、在企業(yè)中工作的一組服務器、設備的單核或在云計算環(huán)境中工作的一大組服務器。執(zhí)行平臺20可以包括一個或多個處理器24以及合適的存儲組件26以支持編程編譯和/或執(zhí)行。
執(zhí)行平臺20將原始源代碼12與定制18一起執(zhí)行,以向與執(zhí)行平臺20交互的一個或多個客戶機22提供經定制的軟件操作。在一個示例中,客戶機22是通過通信鏈接28在操作上耦合到執(zhí)行平臺20的計算機,以便允許客戶機22與由執(zhí)行平臺20所執(zhí)行的軟件產品交互。鏈接28可以包括任何合適的通信鏈接,包括經由LAN或WAN的有線或無線通信。
圖2是通過執(zhí)行流水線30執(zhí)行軟件應用的執(zhí)行平臺的處理器的圖示。雖然,流水線30被示為包括編程源單元1··N的線性流水線,但提供這樣的簡化是說明編程執(zhí)行通常通過命令序列來步進。在圖2中所示的示例中,編程執(zhí)行當前在單元5上,如指針32所示。一旦單元5的執(zhí)行完成,處理器24將開始執(zhí)行單元6。然而,在這樣的執(zhí)行之前,處理器將確定是否任何定制已經相對于編程單元6被附加或定義。借助于其定義,這樣的定制將具有指定它是應該在單元6之前、取代單元6、或在單元6之后運行的指示因此,執(zhí)行平臺20將根據定制定義,在單元6之前、取代單元6、或在單元6之后執(zhí)行與定制對應的代碼。一旦編程單元6和任何相關聯(lián)的定制已經執(zhí)行,執(zhí)行平臺就移至編程單元7。如此處所使用的,編程單元旨在意指任何一個或多個可執(zhí)行代碼行,其行可以包括例如一個方法。因此,由于定制是在任意編程單元之前、取代任意編程單元、或在任意編程單元之后注入,本發(fā)明的各實施例提供了開發(fā)者可以在源代碼中的任意點定義“鉤”的顯著的靈活性。
圖3是根據本發(fā)明的一個實施例的執(zhí)行軟件應用的方法。方法40在框42開始,在此處(在圖1和2中示出的)處理器24加載方法或編程單元。接著,在框44,處理器24檢查以查明是否存在與在框42處加載的方法或編程單元相關聯(lián)的任何定制。如果是,則控制傳遞到框46,在此處與加載的方法或單元相關聯(lián)的定制被處理器24加載。接著,基于定制的定義,先于在框42處加載方法或單元、取代在框42處加載方法或單元,或后于在框42處加載方法或單元,處理器24在框48處執(zhí)行定制。在定制沒有取代加載的方法或單元的示例中,如由所述定制所定義的,在執(zhí)行所述定制之前或之后所述加載的方法或單元也由處理器24在框48處執(zhí)行??刂齐S后傳遞至框50,在此處下一編程單元/方法被加載。如在圖3中所示,如果給定的方法或編程單元不具有相關聯(lián)的定制,則控制從判定框44傳遞至框50。方法40將繼續(xù)循環(huán)直到程序執(zhí)行被停止或完成。
圖4是根據本發(fā)明的一個實施例的定義動態(tài)事件的方法。方法60在框62處開始,在此處,開發(fā)者標識源代碼的定制將要與其相關聯(lián)的特定單元。源代碼的所述單元可以是源代碼的函數(shù)、方法、模塊或個體行。源代碼的所述單元的標識可以通過函數(shù)或模塊的名字,或在源代碼的個體行的情況下,是源代碼的在所選行之前的一個或多個行的標識以及源代碼的在源代碼的所選行之后的一個或多個行的標識。接著,在框64,開發(fā)者選擇所述定制將如何相對于原始源代碼來執(zhí)行。例如,定制可以在66之前、取代68,或在70之后執(zhí)行所標識的源代碼。而且,當定制取代所標識的源代碼執(zhí)行時,如果需要的話,所述定制可以將所標識的域代碼作為來自定制的子調用來運行。另外,如在框72處所指示的,還可以構想其它執(zhí)行序列指示符。例如,在多個定制將要在源代碼的所選單元之前被執(zhí)行的情形中,一個定制可以被指示為“絕對最先”或“絕對最后”。接著,在框74,開發(fā)者指示定制的范圍。該范圍指示將通常允許定制能夠訪問源代碼的所選單元內的變量和其它信息。在框76,開發(fā)者可以提供使用在源代碼的所選單元內的變量和其它信息中的一些或全部的代碼。這允許原文在所有方面改變都改變,而所訂閱的變量保持不變。而且,到變量“按名字(by name)”的鏈接為原始開發(fā)者提供了一種故意中斷定制可能具有的任何合約的途徑。以此方式,開發(fā)者可以簡單地改變變量的名字,這將要求依賴于原始變量名的定制將需要被重新訪問。最后,在框78,定制被保存并提供給執(zhí)行平臺以用于以原始、未經修改的源代碼執(zhí)行。
在下面的示例中,表1提供了計算給定訂單的折扣作為下訂單的過程的部分的某種偽代碼:
表1
在表1中闡明的示例中,開發(fā)者(以提供對10%的折扣計算的改變?yōu)槿蝿?可能希望提供定制。例如,如果總量大于2000,則開發(fā)者可能需要加入額外的5%折扣。為了在數(shù)量超過2000時提供15%折扣,或如果數(shù)量大于2000提供原始折扣的150%,開發(fā)者可以定義如表2所闡述的定制。該定制允許在表1中所闡述的原始代碼的行為被修改,而無需改變任何原始代碼。
表2
在表2中的偽代碼與表1中由具有原始方法的名字的HookMethod(鉤方法)定義所提供的原始CalculateDiscount(計算折扣)方法相關聯(lián)。該HookMethod在元數(shù)據中被定義。在所示的示例中,定義是使用C#樣式句法中的屬性。然而,這只是示例并且可以使用任何其他合適的樣式。原始方法與表2的偽代碼的關聯(lián)性,通知執(zhí)行平臺,表2的代碼與表1中闡述的原始方法相關聯(lián)。另外,通過設置“Run=AfterOriginal”,執(zhí)行平臺將在表1的代碼被執(zhí)行之后再執(zhí)行表2的代碼。MyOwnCalculateDiscount(我自己計算的折扣)的聲明列出了需要從原始方法中提出的參數(shù)、行。另外,MyOwnCalculateDiscount設置范圍“OriginalScope_org”,使得定制將能夠訪問來自原始方法的參數(shù)和變量。_org的所有使用將被執(zhí)行平臺跟蹤,并且在編譯之后,編譯器將在元數(shù)據中存儲對MyOwnCalculateDiscount將通過CalculateDiscount順序地被調用并且MyOwnCalculateDiscount將訪問行(參數(shù))、數(shù)量(作為本地變量)以及ReturnValue(原始返回值)的指示。
在運行時,執(zhí)行平臺20現(xiàn)在將在從原始CalculateDiscount返回之前調用MyOwnCalculateDiscount,允許MyOwnCalculateDiscount提供基本上任何期望的經定制的功能。_org范圍變量將實際上指示原始變量。
在原始代碼被更新、打補丁或由原始軟件發(fā)布者簡單改變的情況下,本發(fā)明的各實施例是特別有用的。例如,在下面的表3中,原始方法CalculateDiscount已經被修改為包括customer(客戶)和date(日期)信息。
表3
借助于所存儲的與MyOwnCalculateDiscount有關的元數(shù)據,顯然,在經改變的源代碼中仍然滿足MyOwnCalculateDiscount的先決條件。具體來說,方法CalculateDiscount仍然存在,并且在其參數(shù)中它仍然具有“Lines[]lines”參數(shù)以及名為數(shù)量的本地變量。這樣,對源代碼的改變將不會影響由開發(fā)者為定制定義的“合約”。MyOwnCalculateDiscount將不會知曉也不會使用新的參數(shù)Customer或Date。然而,MyOwnCalculateDiscount不將這樣的參數(shù)作為其合約的部分來列出。這樣,MyOwnCalculateDiscount將繼續(xù)運行對數(shù)量和返回值的適當操作。然而,如果在合約中由開發(fā)者所指定的任意項(例如方法的名字、行參數(shù)或數(shù)量變量)在經更新的源代碼中被改變或刪除,那么在應用定制時合約將中斷并導致錯誤。
在MyOwnCalculateDiscount中特別注意的是所述方法是用“Lines[]lines”參數(shù)定義的,但所述參數(shù)沒有被MyOwnCalculateDiscount使用的事實。然而,通過開發(fā)者仍然要求“Lines[]lines”,它已經成為定制的合約的部分并因此需要成為原始簽名的部分。這在開發(fā)者通過這么做可以依賴于變量的情況下特別有利,盡管定制不需要它。換句話說,如果CalculateDiscount方法被改變使得在原始方法中不再需要所述行,定制應該中斷(即通過應用定制錯誤來通知),使得開發(fā)者可以檢查定制以查明代碼是否仍然有效。這允許開發(fā)者將合約定義為如所期望的那樣細化(接近)原始代碼。在合約中要求的細節(jié)越多,當原始代碼被改變時中斷的幾率越大。反之也是正確的。具體來說,如果對原始代碼的更新的開發(fā)者希望確保在行上操作的所有定制被要求重新訪問它們的定制,開發(fā)者可以改變變量的名字,這將中斷合約。
(下述)表4示出當CalculateDiscount被調用時被執(zhí)行的某種偽代碼的示例。
表4
如可見,執(zhí)行平臺20將代碼注入以檢查正被調用的方法是否已經被掛鉤并且如果是則將把所有相關的信息傳遞給機制,所述機制過濾所述信息并最終調用被掛鉤到所述方法的定制。在表4中示出的示例僅僅是出于說明的目的被提供,在實際實現(xiàn)中,附加優(yōu)化可以被使用并且“ReplaceOriginal(替代原始)”機制也可以被提供。
在上述示例中提供的所有偽代碼僅僅出于說明目的。本發(fā)明的各實施例可以應用于使用源代碼的任意編程語言。在一些示例中,本發(fā)明的各實施例提供了一種元數(shù)據驅動的掛鉤機制,其中訂閱者定義了原始源代碼的合約對作者(contract vs.an author)。只要合約可被履行,就可以對底層源代碼做出升級和其它改變,而無需中斷定制。另外,簡單地通過查閱元數(shù)據和源代碼就確定這樣的合約是否可以被履行是可能的。這樣,在中斷或其它異??梢员淮_定之前,代碼不需要被運行。
如上所闡述的,存在定制可以被掛鉤到原始源代碼的許多方式。Run=AfterOriginal指示告知執(zhí)行平臺20原始源代碼應該首選運行,隨后是定制。一種替代是Run=BeforeOriginal,這將允許定制在將控制傳遞至原始方法之前改變任意闡述和可能的類變量。還有另一個替代為Run=ReplaceOriginal,這將取消對原始源代碼的調用并僅僅調用定制。如果開發(fā)者希望覆蓋整個方法,則可以使用后者。指示Run=ReplaceOriginal要求執(zhí)行框架20在中斷時跟蹤對原始代碼做出的改變,因為在源代碼升級或改變之后所述定制現(xiàn)在正在移除“未知的”代碼。另外,當使用ReplaceOriginal時,_org變量應該包含CallOriginal方法,這樣如果需要的話可以對原始方法做出調用,在此之后定制將再次獲得控制和完成其工作。
在此所述的在定制中使用的代碼的特殊之處在于所述代碼所使用的所有構造在需要時都是“間接”針對底層實變量。這當中的一些可以在編譯時發(fā)生而一些可以在運行時發(fā)生,例如定制的代碼可以訪問項目表,而無需具有關于這樣的表的所有字段的信息。然而,只要項目表具有由定制所使用的字段,所述定制就將正確地運作。
可以理解的是,本發(fā)明的各實施例是可應用于各種各樣的計算環(huán)境的。下面是在其中本發(fā)明的實施例可以是特別有利的計算環(huán)境的一些示例。
圖5示出其中本文中描述的各實施例是有用的一個示例性架構的框圖。架構100包括顧客業(yè)務系統(tǒng)101(其可以是在場系統(tǒng)、基于云的系統(tǒng)、或另一系統(tǒng))。業(yè)務系統(tǒng)101可被用戶通過由業(yè)務系統(tǒng)101或由用戶設備116生成的用戶界面115來訪問。在一個實施例中,用戶界面115具有用戶輸入機制117,用戶114可致動該用戶輸入機制以便操縱業(yè)務系統(tǒng)101。
顧客業(yè)務系統(tǒng)101解說性地包括處理器102、數(shù)據存儲104、用戶界面組件105、更新安裝器組件106、沖突解決組件119和業(yè)務過程組件121。數(shù)據存儲104解說性地包括數(shù)據108、應用110、描述業(yè)務過程112的信息、描述工作流114的信息以及其它項107。在一個實施例中,應用110包括被用來運行業(yè)務系統(tǒng)101中的業(yè)務過程112和工作流114的業(yè)務邏輯。應用110解說性地對數(shù)據108操作,該數(shù)據可包括表示業(yè)務系統(tǒng)101中的項的實體。從而,應用110可包括總分類賬應用、倉儲應用、允許用戶跟蹤業(yè)務機會、跟蹤業(yè)務系統(tǒng)中的銷售或生產的應用、或各種其它業(yè)務應用。實體例如包括表示顧客的顧客實體、表示業(yè)務機會的機會實體、表示倉儲項的倉儲實體、表示報價和提議的報價和提議實體等。數(shù)據108可包括各種其它實體和數(shù)據,且上面提及的那些僅是作為示例提及的。用戶可解說性地訪問顧客業(yè)務系統(tǒng)101以便執(zhí)行在執(zhí)行采用業(yè)務系統(tǒng)101的組織的業(yè)務中被完成的活動、任務、工作流等。
本討論提到了處理器和服務器。在一個實施例中,處理器和服務器包括具有相關聯(lián)的存儲器和時序電路系統(tǒng)(未分別示出)的計算機處理器。它們是它們所屬的系統(tǒng)或設備的功能部分,且由這些系統(tǒng)中的其他組件或項的功能來激活并促成這些功能。
還討論了數(shù)個數(shù)據存儲。將注意,它們可各自被分解成多個數(shù)據存儲。它們全部可位于訪問它們的系統(tǒng)的本地,全部可以是遠程的,或一些可以在本地而其他在遠程。本文構想了所有這些配置。
同樣,附圖示出了具有歸屬于每一框的功能的多個框。將注意,可以使用更少的框,使得功能由更少的組件來執(zhí)行。同樣,可以使用更多框,其中功能被分布在更多組件之間。
圖6是圖5中所示的架構100的框圖,不同之處在于其元件被部署在云計算架構500中。術語“云”、“基于云的系統(tǒng)”、“基于云的架構”或類似術語指代設備(例如,服務器計算機、路由器等)的網絡。云計算提供了不要求終端用戶知曉交付服務的系統(tǒng)的物理位置或配置的計算、軟件、數(shù)據訪問和存儲服務。在各個實施例中,云計算通過諸如因特網之類的廣域網使用合適的協(xié)議來交付服務。例如,云計算提供者通過廣域網交付應用,并且它們可以通過web瀏覽器或任何其他計算組件被訪問。架構100的軟件或組件以及相對應的數(shù)據可被存儲在遠程位置處的服務器上。云計算環(huán)境中的計算資源可以被整合在遠程數(shù)據中心位置處或者它們可以是分散的。云計算基礎結構可以通過共享數(shù)據中心來交付服務,即使在用戶看來它們是單個訪問點。因此,在此所述的組件和功能可以從使用云計算架構的遠程位置處的服務提供者來提供。替代地,它們可以從常規(guī)的服務器中提供,或者它們可以直接地或以其他方式安裝在客戶端設備上。
本說明書旨在包括公共云計算和私有云計算兩者。云計算(公共和私有兩者)提供了基本無縫的資源聯(lián)營以及對管理和配置底層硬件基礎結構的降低的需求。
公共云由供應商管理,并且通常支持使用同一基礎結構的多個消費者。此外,與私有云相反,公共云能夠將終端用戶從管理硬件中釋放出來。私有云可由機構本身管理,并且基礎結構通常不與其他機構共享。該機構在某種程度上仍然維護著硬件,諸如安裝和維修等。
在圖6中所示的實施例中,一些項與圖5中所示的那些是類似的,并且它們被類似地編號。圖6具體地示出系統(tǒng)101可位于云502(可以是公共的、私有的或者其中某些部分是公共的而某些部分是私有的組合)中。因此,用戶使用客戶機設備22通過云502來訪問那些系統(tǒng)。
圖6還描繪了云架構的另一實施例。圖6示出還構想了架構100的某些元素被置于云502中而其他元素沒有被置于云502中。作為示例,數(shù)據存儲104可被置于云502的外部,并且通過云502來被訪問。無論它們位于哪里,它們都可直接由客戶機設備22通過網絡(廣域網或局域網)訪問,它們可由服務主存在遠程站點處,或者它們可作為通過云來提供或通過駐留在云中的連接服務來訪問的服務。本文構想了所有這些架構。
還將注意,架構100或其部分可被采用在各種各樣不同的設備上。這些設備中的某些包括:服務器、臺式計算機、膝上型計算機、平板計算機、或其他移動設備,諸如掌上計算機、蜂窩電話、智能電話、多媒體播放器、個人數(shù)字助理等。
圖7是可被用作其中可部署本發(fā)明的系統(tǒng)(或其部分)的用戶或客戶的手持式設備216的手持式或移動計算設備的一個實施例的簡化框圖。圖7-10是手持式或移動設備的示例。
圖7提供了客戶機設備216的組件的總體框圖,該客戶機設備216可以運行架構100的組件或與架構100交互。在設備216中,提供了通信鏈路213,該通信鏈路允許手持設備與其它計算設備通信,并且在一些實施例中提供用于諸如通過掃描來自動接收信息的信道。通信鏈路213的示例包括:紅外端口、串行/USB端口、諸如以太網端口之類的電纜網絡端口、以及允許通過一個或多個通信協(xié)議的通信的無線網絡端口,所述通信協(xié)議包括作為用于提供對網絡的蜂窩接入的無線服務的通用分組無線服務(GPRS)、LTE、HSPA、HSPA+、以及其他3G和4G無線電協(xié)議、1Xrtt和短消息服務,并包括提供對網絡的本地無線連接的802.11和802.11b(WiFi)協(xié)議、和藍牙協(xié)議。
根據其他實施例,應用或系統(tǒng)被容納在連接到可移動安全數(shù)字(SD)卡接口215的SD卡上。SD卡接口215和通信鏈路213沿總線219與處理器217進行通信,該總線219還連接到存儲器221和輸入/輸出(I/O)組件223、以及時鐘225和定位系統(tǒng)227。
在一個實施例中,提供了I/O組件223以促成輸入和輸出操作。針對設備216的各個實施例的I/O組件223可以包括:輸入組件,比如按鈕、觸摸傳感器、多點觸摸傳感器、光學或視頻傳感器、語音傳感器、觸摸屏、鄰近傳感器、話筒、傾斜傳感器以及重力開關;以及輸出組件,比如顯示設備、揚聲器和或打印機端口。也可以使用其他I/O組件223。
時鐘225說明性地包括輸出時間和日期的真實時間時鐘組件。時鐘還可以說明性地為處理器217提供時序功能。
定位系統(tǒng)227說明性地包括輸出設備216的當前地理位置的組件。這例如可以包括全球定位系統(tǒng)(GPS)接收機、LORAN系統(tǒng)、航位推算系統(tǒng)、蜂窩三角測量系統(tǒng)或者其他定位系統(tǒng)。這例如還可以包括生成所期望的地圖、導航線路和其他地理功能的測繪軟件或導航軟件。
存儲器221存儲操作系統(tǒng)229、網絡設置231、應用233、應用配置設置235、數(shù)據存儲237、通信驅動程序239以及通信配置設置241。存儲器221可以包括所有類型的有形易失性和非易失性計算機可讀存儲器設備。其還可以包括計算機存儲介質(下面描述)。存儲器221存儲計算機可讀指令,所述指令在被處理器217執(zhí)行時致使處理器根據所述指令執(zhí)行計算機實現(xiàn)的步驟或功能。處理器217可以也被其他組件激活以促成它們的功能性。
網絡設置231的示例包括諸如代理信息、因特網連接信息以及測繪之類的事物。應用配置設置235包括為特定企業(yè)或用戶定制應用的設置。通信配置設置241提供了用于與其他計算機進行通信的參數(shù),并且包括諸如GPRS參數(shù)、SMS參數(shù)、連接用戶名和口令之類的項目。
應用233可以是之前已經存儲在設備216上的應用或是在使用期間安裝的應用,但是這些應用可以是操作系統(tǒng)229的一部分,或者也可以在設備216之外被托管。
圖8和9提供了可被使用的設備216的附加示例,但是也可以使用其它設備。在圖8,提供功能電話或移動電話345作為設備216。電話345包括:一組小鍵盤347,其用于撥打電話號碼;顯示器349,其能夠顯示包括應用圖像在內的圖像、圖標、網頁、照片和視頻;以及控制按鈕351,其用于選擇在顯示器上示出的項目。電話包括天線353,該天線353用于接收諸如通用分組無線服務(GPRS)和1Xrtt之類的蜂窩電話信號以及短消息服務(SMS)信號。在一些實施例中,電話345還包括容納安全數(shù)字(SD)卡357的SD卡槽355。
圖9的移動設備是個人數(shù)字助理(PDA)459或多媒體播放器或平板計算設備等等(在此稱為PDA 459)。PDA 459包括電感屏461,所述電感屏感測指示筆463(或其他指示器,諸如用戶的手指)在該指示筆被置于屏幕之上時的位置。這允許用戶在屏幕上選擇、突出顯示和移動項目以及繪圖和書寫。PDA 459還包括多個用戶輸入鍵或按鈕(比如按鈕465),其允許用戶將顯示器461上所顯示的菜單選項或其他顯示選項滾屏,并且允許用戶在沒有接觸顯示器461的情況下改變應用或選擇用戶輸入功能。盡管未被示出,但是PDA 459可以包括允許與其他計算機進行無線通信的內置天線和紅外發(fā)射機/接收機、以及允許與其他計算設備的硬件連接的連接端口。這樣的硬件連接通常是通過經由串行或USB端口連接到其他計算機的支架來完成的。因此,這些連接是非網絡連接。在一個實施例中,移動設備459還包括容納SD卡469的SD卡槽467。
圖10類似于圖8,不同之處在于電話是智能電話571。智能電話571具有顯示圖標或磁貼或其他用戶輸入機制575的觸敏顯示器573。機制575可由用戶用來運行應用、進行呼叫、執(zhí)行數(shù)據傳輸操作,等等。一般而言,智能電話571被構建在移動操作系統(tǒng)上且提供比功能電話更高級的計算能力和連接性。
圖8到圖10示出在圖11中示出的設備216的特定形式。應當理解,除了圖8-10中示出的那些之外,設備216的其他形式是可能的。
圖11是其中可采用架構100或其一部分(作為示例)的計算環(huán)境的一個實施例。參考圖11,用于實現(xiàn)一些實施例的示例性系統(tǒng)包括計算機810形式的通用計算設備。計算機810的組件可以包括,但不限于,處理單元820(可以包括系統(tǒng)200或設備16中的處理器102或各處理器)、系統(tǒng)存儲器830和將包括系統(tǒng)存儲器在內的各種系統(tǒng)組件耦合至處理單元820的系統(tǒng)總線821。系統(tǒng)總線821可以是若干類型的總線結構中的任一種,包括存儲器總線或存儲器控制器、外圍總線和使用各種總線架構中的任一種的局部總線。作為示例而非限制,這樣的架構包括工業(yè)標準架構(ISA)總線、微通道架構(MCA)總線、增強型ISA(EISA)總線、視頻電子技術標準協(xié)會(VESA)局部總線和外圍部件互連(PCI)總線(也稱為夾層(Mezzanine)總線)。參考圖1描述的存儲器和程序可被部署在圖11的對應部分中。
計算機810通常包括各種計算機可讀介質。計算機可讀介質可以是能由計算機810訪問的任何可用介質,而且包含易失性和非易失性介質、可移動和不可移動介質。作為示例而非限制,計算機可讀介質可包括計算機存儲介質和通信介質。計算機存儲介質不同于且不包括已調制數(shù)據信號或載波。計算機存儲介質包括硬件存儲介質,該硬件存儲介質包括以用于存儲諸如計算機可讀指令、數(shù)據結構、程序模塊或其他數(shù)據的信息的任何方法和技術實現(xiàn)的易失性和非易失性、可移動和不可移動介質。計算機存儲介質包括,但不限于,RAM、ROM、EEPROM、閃存或其他存儲器技術、CD-ROM、數(shù)字多功能盤(DVD)或其他光盤存儲、磁帶盒、磁帶、磁盤存儲或其他磁性存儲設備、或能用于存儲所需信息且可以由計算機810訪問的任何其他介質。通信介質通常具體化計算機可讀指令、數(shù)據結構、程序模塊或傳輸機制中的其他數(shù)據,并包括任何信息遞送介質。術語“已調制數(shù)據信號”是指使得以在信號中編碼信息的方式來設定或改變其一個或多個特征的信號。作為示例而非限制,通信介質包括諸如有線網絡或直接線連接之類的有線介質,以及諸如聲學、RF、紅外及其他無線介質之類的無線介質。上述任何組合也應該包括在計算機可讀的介質范圍內。
系統(tǒng)存儲器830包括易失性和/或非易失性存儲器形式的計算機存儲介質,如只讀存儲器(ROM)831和隨機存取存儲器(RAM)832。包含諸如在啟動期間幫助在計算機810內的元件之間傳輸信息的基本例程的基本輸入/輸出系統(tǒng)833(BIOS)通常存儲在ROM 831中。RAM 832通常包含處理單元820可立即訪問和/或當前正在操作的數(shù)據和/或程序模塊。作為示例而非限制,圖11例示出了操作系統(tǒng)834、應用程序835、其他程序模塊836和程序數(shù)據837。
計算機810還可以包括其他可移動/不可移動、易失性/非易失性計算機存儲介質。僅作為示例,圖11示出了從不可移動、非易失性磁介質中讀取或向其寫入的硬盤驅動器841,從可移動、非易失性磁盤852中讀取或向其寫入的磁盤驅動器851,以及從諸如CD ROM或其他光學介質等可移動、非易失性光盤856中讀取或向其寫入的光盤驅動器855??稍谑纠圆僮鳝h(huán)境中使用的其他可移動/不可移動、易失性/非易失性計算機存儲介質包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字錄像帶、固態(tài)RAM、固態(tài)ROM等。硬盤驅動器841通常通過諸如接口840之類的不可移動存儲器接口連接到系統(tǒng)總線821,并且磁盤驅動器851和光盤驅動器855通常通過諸如接口850之類的可移動存儲器接口連接到系統(tǒng)總線821。
作為替換或補充,本文所述的功能可至少部分地由一個或多個硬件邏輯組件來執(zhí)行。例如、但非限制,可使用的硬件邏輯組件的說明性類型包括現(xiàn)場可編程門陣列(FPGA)、程序專用的集成電路(ASIC)、程序專用的標準產品(ASSP)、片上系統(tǒng)系統(tǒng)(SOC)、復雜可編程邏輯器件(CPLD)、等等。
上文討論并在圖11中示出的驅動器及其相關聯(lián)的計算機存儲介質為計算機810提供了對計算機可讀指令、數(shù)據結構、程序模塊和其他數(shù)據的存儲。例如,在圖11中,硬盤驅動器841被示為存儲操作系統(tǒng)844、應用程序845、其他程序模塊846和程序數(shù)據847。注意,這些組件可與操作系統(tǒng)834、應用程序835、其他程序模塊836和程序數(shù)據837相同,也可與它們不同。在此操作系統(tǒng)844、應用程序845、其他程序模塊846以及程序數(shù)據847被給予了不同的編號,以至少說明它們是不同的副本。
用戶可以通過諸如鍵盤862、話筒863以及諸如鼠標、跟蹤球或觸摸墊等定點設備861等輸入設備來將命令和信息輸入至計算機810中。其他輸入設備(未示出)可以包括操縱桿、游戲手柄、圓盤式衛(wèi)星天線、掃描儀等。這些以及其他輸入設備通常通過耦合到系統(tǒng)總線的用戶輸入接口860連接到處理單元820,但也可通過諸如并行端口、游戲端口或通用串行總線(USB)之類的其他接口和總線結構來連接。視覺顯示器891或其他類型的顯示設備也經由諸如視頻接口890之類的接口連接至系統(tǒng)總線821。除了監(jiān)視器以外,計算機還可包括諸如揚聲器897和打印機896之類的其他外圍輸出設備,它們可通過輸出外圍接口895來連接。
計算機810使用到諸如遠程計算機880等一個或多個遠程計算機的邏輯連接在網絡化環(huán)境中操作。遠程計算機880可以是個人計算機、手持設備、服務器、路由器、網絡PC、對等設備或其他常見的網絡節(jié)點,且一般包括以上關于計算機810描述的多個或所有的元件。圖11中所示的邏輯連接包括局域網(LAN)871和廣域網(WAN)873,但也可以包括其他網絡。此類聯(lián)網環(huán)境在辦公室、企業(yè)范圍的計算機網絡、內聯(lián)網和因特網中是常見的。
當在LAN聯(lián)網環(huán)境中使用時,計算機810通過網絡接口或適配器870連接到LAN 871。當在WAN聯(lián)網環(huán)境中使用時,計算機810通常包括調制解調器872或用于通過諸如因特網等WAN 873建立通信的其他手段。調制解調器872可以是內置的或外置的,可經由用戶輸入接口860或其他適當?shù)臋C制連接到系統(tǒng)總線821。在聯(lián)網環(huán)境中,相關于計算機810所示的程序模塊或其部分可被存儲在遠程存儲器存儲設備中。作為示例而非限制,圖11示出了遠程應用程序885駐留在遠程計算機880上。應當理解,所示的網絡連接是示例性的,并且可使用在計算機之間建立通信鏈路的其他手段。
還應注意,本文描述的不同實施例可以按不同的方式來組合。即,一個或多個實施例的各部分可以與一個或多個其他實施例的各部分組合在一起。本文中構想了所有這些。
示例1是一種修改源代碼的編程單元的執(zhí)行行為的計算機實現(xiàn)的方法。所述方法包括加載源代碼的編程。單元并確定是否針對該編程單元定義了至少一個定制至少一個定制基于所述定制的先決條件是否被滿足而被選擇性地執(zhí)行。
示例2是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中源代碼的編程單元是源代碼的單個行。
示例3是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中源代碼的編程單元包括源代碼的多個行。
示例4是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中源代碼的編程單元是方法。
示例5是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中至少一個定制選擇性地執(zhí)行以取代源代碼的編程單元。
示例6是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述至少一個定制在源代碼的編程單元之前選擇性地執(zhí)行。
示例7是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述至少一個定制在源代碼的編程單元之后選擇性地執(zhí)行。
示例8是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述至少一個定制的選擇性執(zhí)行包括在執(zhí)行期間向所述至少一個定制提供對源代碼的編程單元的變量的訪問。
示例9是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述訪問是由所述至少一個定制中的范圍定義來確定的。
示例10是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述先決條件包括在源代碼的編程單元中的變量的存在。
示例11是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述變量不是在所述至少一個定制上操作的。
示例12是定義與源代碼的編程單元有關的定制的計算機實現(xiàn)的方法。所述方法包括標識源代碼的編程單元并指定與所標識的源代碼的編程單元有關的定制執(zhí)行。定制執(zhí)行的范圍被定義。所述源代碼的編程單元的標識、指定的定制執(zhí)行信息以及范圍信息被存儲并被提供給執(zhí)行平臺。
示例13是如任意或所有先前的示例的計算機實現(xiàn)的方法,并進一步定義了在所述定制將由執(zhí)行平臺執(zhí)行之前必須存在于源代碼的編程單元中的至少一個先決條件。
示例14是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述先決條件包括在所述定制將由執(zhí)行平臺執(zhí)行之前必須存在于源代碼的編程單元中的參數(shù)。
示例15是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述參數(shù)沒有在定制中被使用。
示例16是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中指定與所標識的源代碼的編程單元有關的定制執(zhí)行包括定制將取代所標識的源代碼的編程單元來執(zhí)行的指示。
示例17是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中所述定制執(zhí)行的范圍被定義使得所述定制將能夠訪問它正在取代的源代碼的編程單元的變量。
示例18是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中指定與所標識的源代碼的編程單元有關的定制執(zhí)行包括定制將在所標識的源代碼的編程單元之前絕對最先執(zhí)行的指示。
示例19是如任意或所有先前的示例的計算機實現(xiàn)的方法,其中指定與所標識的源代碼的編程單元有關的定制執(zhí)行包括定制將在所標識的源代碼的編程單元之后絕對最后執(zhí)行的指示。
示例20是一種被配置為執(zhí)行源代碼的編程單元的計算機系統(tǒng)。所述計算機系統(tǒng)包括被配置為執(zhí)行源代碼的編程單元的處理器和適用于存儲源代碼的編程單元和關于所選的源代碼的編程單元所定義的至少一個定制的存儲組件。處理器被配置為加載源代碼的編程單元并確定是否相對于所加載的源代碼的編程單元定義了一個定制并基于所述定制的定義選擇性地執(zhí)行所述定制。
盡管用結構特征和/或方法動作專用的語言描述了本主題,但可以理解,所附權利要求書中定義的主題不必限于上述具體特征或動作。更確切而言,上述具體特征和動作是作為實現(xiàn)權利要求的示例形式公開的。