專利名稱:基于接口的api上的靜態(tài)成員和參數(shù)化構(gòu)造函數(shù)的模擬的制作方法
技術領域:
本發(fā)明涉及基于接口的API上的靜態(tài)成員和參數(shù)化構(gòu)造函數(shù)的模擬。
背景
計算機已變得高度集成于工作、家庭、移動設備以及許多其他地方中。計算機可快 速且有效地處理大量信息。被設計成在計算機系統(tǒng)上運行的軟件應用允許用戶執(zhí)行包括商 業(yè)應用、學校作業(yè)、娛樂等等在內(nèi)的各種各樣的功能。軟件應用通常被設計成執(zhí)行特定的任 務,諸如用于草擬文檔的文字處理器應用或者用于發(fā)送、接收和組織電子郵件的電子郵件 程序。
這些軟件應用通常是使用集成開發(fā)環(huán)境(IDE)設計和創(chuàng)建的。IDE允許開發(fā)者訪 問協(xié)助軟件程序的創(chuàng)建的不同的元素和構(gòu)造。不同的IDE可能允許使用不同的編程語言。 例如,某些IDE更適于面向?qū)ο蟮能浖_發(fā)。這些IDE可具有編輯器、編譯器、調(diào)試器、類瀏 覽器、對象檢查器和允許開發(fā)者控制和開發(fā)應用的每一方面的其他工具。在某些情況下,面 向?qū)ο蟮腎DE允許開發(fā)者通過提供參數(shù)信息構(gòu)造對象,并且允許使用具有某些類型的靜態(tài) 成員。
簡要概述
此處描述的實施例涉及在接口實例上提供類型級構(gòu)造(type-level construct) 的模擬,并且涉及維護基于令牌的事件處理系統(tǒng)。在一個實施例中,計算機系統(tǒng)實例化一接 口實例,該接口實例包括實例對象和多個實例成員。該計算機系統(tǒng)還實例化一分開的類型 化的對象,該對象被配置成維護一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)(parameterized constructor)。該計算機系統(tǒng)隨后將經(jīng)實例化的接口實例與該分開的類型化的對象相關 聯(lián)。該類型化的對象將方法調(diào)用從該接口實例路由到各模擬的類型級參數(shù)化構(gòu)造函數(shù)和該 類型的靜態(tài)成員。
在另一實施例中,計算機系統(tǒng)維護基于令牌的事件處理系統(tǒng)。該計算機系統(tǒng)實例 化多個編程對象的事件訂閱表,該表被配置成將令牌映射到事件訂閱器和它們訂閱的事 件。事件訂閱表為事件訂閱中的每一個維護對訂閱者的弱參考。如此,在事件訂閱表不強 迫訂閱者保持存活(alive)的情況下跟蹤訂閱。計算機系統(tǒng)隨后確定至少一個事件不再具 有任何訂閱,并且基于所述確定,將該訂閱從事件訂閱表中移除。當被所述表跟蹤的所有時 間訂閱均被移除時,所述事件訂閱表此時也可被釋放(free)。
提供本概述以便以簡化形式介紹將在以下詳細描述中進一步描述的一些概念。本 概述并非旨在標識所要求保護的主題的關鍵特征或必要特征,也不旨在用于幫助確定所要 求保護的主題的范圍。
附加的特征和優(yōu)點將在以下的描述中被闡述,并且部分地可通過該描述而對本領 域技術人員顯而易見,或者可通過對本文中的教示的實踐來習得。本發(fā)明的實施例的特征 和優(yōu)點可以通過在所附權(quán)利要求中特別指出的手段和組合來被實現(xiàn)并獲得。本發(fā)明的實施 例的特征將從以下描述和所附權(quán)利要求書中變得完全顯而易見,或者可通過如下所述對本 發(fā)明的實踐而習得。
附圖簡述
為了進一步闡明本發(fā)明的各實施例的以上和其他優(yōu)點和特征,將參考附圖來呈現(xiàn) 本發(fā)明的各實施例的更具體的描述??梢岳斫?,這些附圖只描繪本發(fā)明的典型實施例,因此 將不被認為是對其范圍的限制。本發(fā)明的實施例將通過使用附圖用附加特征和細節(jié)來描述 和解釋,附圖中
圖1示出了本發(fā)明的實施例可在其中操作的計算機體系結(jié)構(gòu),包括在接口實例上 提供類型級構(gòu)造的模擬并維護基于令牌的事件處理系統(tǒng)。
圖2示出了用于在接口實例上提供類型級構(gòu)造的模擬的示例方法的流程圖。
圖3示出了用于維護基于令牌的事件處理系統(tǒng)的示例方法的流程圖。
圖4示出了其中在基于令牌的事件處理系統(tǒng)中維護事件訂閱的本發(fā)明的實施例。
具體描述
此處描述的實施例涉及在接口實例上提供類型級構(gòu)造(type-level construct) 的模擬,并且涉及維護基于令牌的事件處理系統(tǒng)。在一個實施例中,計算機系統(tǒng)實例化一接 口實例,該接口實例包括實例對象和多個實例成員。該計算機系統(tǒng)還實例化一分開的類型 化的對象,該對象被配置成維護一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)(parameterized constructor)。該計算機系統(tǒng)隨后將經(jīng)實例化的接口實例與該分開的類型化的對象相關 聯(lián)。該類型化的對象將方法調(diào)用從該接口實例路由到各模擬的類型級參數(shù)化構(gòu)造函數(shù)和該 類型的靜態(tài)成員。
在另一實施例中,計算機系統(tǒng)維護基于令牌的事件處理系統(tǒng)。該計算機系統(tǒng)實例 化多個編程對象的事件訂閱表,該表被配置成將令牌映射到事件訂閱器和它們訂閱的事 件。事件訂閱表為事件訂閱中的每一個維護對訂閱者的弱參考。如此,在事件訂閱表不強 迫訂閱者保持存活(alive)的情況下跟蹤訂閱。計算機系統(tǒng)隨后確定至少一個事件不再具 有任何訂閱,并且基于所述確定,將該訂閱從事件訂閱表中移除。當被所述表跟蹤的所有時 間訂閱均被移除時,所述事件訂閱表此時也可被釋放(free)。
以下討論現(xiàn)涉及可以執(zhí)行的多種方法以及方法動作。應當注意,雖然這些方法動 作可能是按一定次序討論的,或者是在流程圖中被描繪為是按照特定順序進行的,然而并 非必然需要特定的次序,除非特別聲明,或者是在一個動作被執(zhí)行之前因為該動作依賴于 另一動作的完成而需要的情況。
本發(fā)明的各實施例可包括或利用專用或通用計算機,該專用或通用計算機包括諸 如例如一個或多個處理器和系統(tǒng)存儲器等計算機硬件,如以下更詳細討論的。本發(fā)明范圍 內(nèi)的各實施例還包括用于承載或存儲計算機可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計 算機可讀介質(zhì)。這樣的計算機可讀介質(zhì)可以是可由通用或?qū)S糜嬎銠C系統(tǒng)訪問的任何可用 介質(zhì)。以數(shù)據(jù)形式存儲有計算機可執(zhí)行指令的計算機可讀介質(zhì)是計算機存儲介質(zhì)。承載計 算機可執(zhí)行指令的計算機可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實施 例可包括至少兩種顯著不同的計算機可讀介質(zhì)計算機存儲介質(zhì)和傳輸介質(zhì)。
計算機存儲介質(zhì)包括RAM、ROM、EEPROM、CD-ROM、基于RAM、閃存、相變存儲器 (PCM)、或其它類型的存儲器的固態(tài)驅(qū)動器(SSD)、或者其他光盤存儲、磁盤存儲或其他磁存 儲設備、或可用于以計算機可執(zhí)行指令、數(shù)據(jù)或數(shù)據(jù)結(jié)構(gòu)形式存儲所期望的程序代碼裝置 且可被通用或?qū)S糜嬎銠C訪問的任何其他介質(zhì)。
“網(wǎng)絡”被定義成允許在計算機系統(tǒng)和/或模塊和/或其他電子設備之間傳輸電子 數(shù)據(jù)的一個或多個數(shù)據(jù)鏈路和/或數(shù)據(jù)交換機。當信息通過網(wǎng)絡(硬連線、無線、或者硬連 線或無線的組合)被傳輸或提供給計算機時,該計算機將該連接適當?shù)匾暈閭鬏斀橘|(zhì)。傳輸 介質(zhì)可以包括如下的網(wǎng)絡所述網(wǎng)絡可以用于運送計算機可執(zhí)行指令形式或數(shù)據(jù)結(jié)構(gòu)形式 的數(shù)據(jù)或所期望的程序代碼裝置,并且可以被通用或?qū)S糜嬎銠C訪問。上述的組合也應被 包括在計算機可讀介質(zhì)的范圍內(nèi)。
此外,在到達各種計算機系統(tǒng)組件之后,計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程 序代碼裝置可從傳輸介質(zhì)自動傳輸?shù)接嬎銠C存儲介質(zhì)(或反之亦然)。例如,通過網(wǎng)絡或數(shù) 據(jù)鏈路接收到的計算機可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩沖在網(wǎng)絡接口模塊(例如,網(wǎng)絡接口 卡或“NIC”)內(nèi)的RAM中,然后最終被傳輸給計算機系統(tǒng)RAM和/或計算機系統(tǒng)處的較不易 失性的計算機存儲介質(zhì)。因而,應當理解,計算機存儲介質(zhì)可被包括在還利用(或甚至主要 利用)傳輸介質(zhì)的計算機系統(tǒng)組件中。
計算機可執(zhí)行(或計算機可解釋)指令例如包括致使通用計算機、專用計算機、或 專用處理設備執(zhí)行某個功能或某組功能的指令。計算機可執(zhí)行指令可以是例如二進制代 碼、諸如匯編語言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動作專 用的語言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或 動作。相反,上述特征和動作是作為實現(xiàn)權(quán)利要求的示例形式而公開的。
本領域的技術人員將理解,本發(fā)明可以在具有許多類型的計算機系統(tǒng)配置的網(wǎng)絡 計算環(huán)境中實踐,這些計算機系統(tǒng)配置包括個人計算機、臺式計算機、膝上型計算機、消息 處理器、手持式設備、多處理器系統(tǒng)、基于微處理器的或可編程消費電子設備、網(wǎng)絡PC、小 型計算機、大型計算機、移動電話、PDA、尋呼機、路由器、交換機等等。本發(fā)明還可在分布式 系統(tǒng)環(huán)境中實踐,在該環(huán)境中本地和遠程計算機系統(tǒng)通過網(wǎng)絡(經(jīng)由硬連線數(shù)據(jù)鏈路、無線 數(shù)據(jù)鏈路、或者經(jīng)由硬連線和無線數(shù)據(jù)鏈路的組合)鏈接起來,每個計算機系統(tǒng)都執(zhí)行任務 (例如,云計算、云服務等)。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠程存儲器存儲 設備中。
圖1示出了可在其中采用本發(fā)明的原理的計算機體系結(jié)構(gòu)100。計算機架構(gòu)100 包括計算機系統(tǒng)101。計算機系統(tǒng)101可以是任何類型的本地或分布式計算機系統(tǒng),包括 云計算系統(tǒng)。計算機系統(tǒng)可包括用于執(zhí)行各種不同任務的各種不同模塊。例如,實例化模 塊110可被配置成實例化接口實例(例如,115)、類型化的對象(例如,120)或其他元素。計 算機系統(tǒng)可被配置成運行集成開發(fā)環(huán)境(IDE),該集成開發(fā)環(huán)境允許程序開發(fā)者開發(fā)應用。 IDE 107可從開發(fā)者105接收用戶輸入106,所述用戶輸入指示要由該IDE以及計算機系統(tǒng) 的其他模塊提供的各種功能。這些模塊的功能將在下面進一步描述。
一般而言,此處描述的實施例允許運行時(runtime)將接口實例115與類型120相 關聯(lián),該接口實例隨后可用于模擬參數(shù)化構(gòu)造函數(shù)121的效果以及該類型的靜態(tài)成員。類 似地,運行時可提供對象120的實例,該實例可用于訪問對該運行時所提供的類型的類型 級操作。
從而,實施例允許將一組接口實例與一類型相關聯(lián),從而向運行時提供模擬在基 于接口的應用二進制接口頂上的類型級操作。在某些情況下,用于使基于接口的應用二進 制接口適應于面向?qū)ο蟮南到y(tǒng)的其他實現(xiàn)限制可由運行時對實例方法執(zhí)行的操作的種類。此處描述的實施例為靜態(tài)成員和構(gòu)造函數(shù)提供參數(shù)。
運行時可將接口 115的一個或多個實例與類型120相關聯(lián)。當該運行時執(zhí)行一具 有參數(shù)的類型的構(gòu)造函數(shù)時,該運行時掃描該接口以尋找具有一組匹配的參數(shù)的方法并返 回所指的類型的實例。隨后,使用返回值作為新對象,通過向所選擇的方法分派,該運行時 模擬該構(gòu)造函數(shù)。這與構(gòu)造運行時可調(diào)用包裝器(wrapper)的其他技術不同,所述其他技 術簡單地通過調(diào)用單一公知API來模擬構(gòu)造。
實施例還允許運行時通過使用與類型相關聯(lián)的接口實例來模擬靜態(tài)成員。每個靜 態(tài)成員與接口上的一綁定到定義所述靜態(tài)成員的類型的成員相關聯(lián)。當該運行時嘗試執(zhí)行 靜態(tài)成員時,訪問反而被重定向到其相關聯(lián)的接口。這種重定向允許該運行時在應用二進 制接口的頂上模擬靜態(tài)成員的存在,其要求基于接口的調(diào)用。至少在某些情況下,其他版本 的運行時可調(diào)用包裝器技術不允許模擬靜態(tài)成員,反而要求該運行時暴露僅具有實例成員 的對象模型。
類似地,該運行時可將類型級操作模擬為對由該運行時向該應用二進制接口提供 的對象的實例操作。該運行時將創(chuàng)建單一類型對象,該單一類型對象實現(xiàn)用于該類型上的 參數(shù)化構(gòu)造函數(shù)和靜態(tài)成員的接口。當調(diào)用被分派到表示參數(shù)化構(gòu)造函數(shù)的接口方法時, 該運行時將該調(diào)用分派到與被調(diào)用的接口方法具有相同方法參數(shù)的構(gòu)造函數(shù)并返回結(jié)果。 當對表示一類型的靜態(tài)成員的接口方法做出調(diào)用時,由運行時提供的對象調(diào)用所指的類型 的靜態(tài)成員來滿足該接口請求。
實施例還描述了運行時可用來管理擔當事件源的運行時可調(diào)用包裝器的壽命的 不同方法。這些方法可用于僅通過該運行時保持事件源包裝器存活(alive),只要托管 (host)在該運行時內(nèi)的事件訂閱者需要它。
在一個實施例中,該運行時維護對綁定于該事件源的運行時可調(diào)用包裝器的每個 事件訂閱者的一組弱參考。在事件訂閱表中維護這些參考。當該事件源被訂閱時,對該訂 閱者的弱參考被添加到該組弱參考中。類似地,當事件訂閱被終止時,其相應的弱參考被從 該組活動訂閱者移除。當該運行時相信它能夠最終化該事件訂閱表時,它首先檢查該組弱 參考來看是否有任何弱參考仍存活。如果這些參考中的任何一個存活,則與該事件訂閱表 相關聯(lián)的事件訂閱表不再被考慮為由該運行時最終化的候選。
用于事件處理的另一壽命管理技術由維護每個事件源運行時可調(diào)用包裝器的參 考計數(shù)的運行時實現(xiàn)。從該系統(tǒng)參考此事件源遞增此參考計數(shù)。當此參考計數(shù)為非O時, 該運行時維護對該事件源的強參考,從而防止它夠資格被垃圾收集。當參考計數(shù)擊中O時, 該運行時釋放其對該事件源的強參考。隨后當不再被運行程序需要時,與該事件源相關聯(lián) 的事件訂閱表被允許變得夠格被垃圾收集。
而且,實施例提供了一種用于運行時在表示回調(diào)方法的接口上模擬委托對象的方 式。其他實現(xiàn)可能要求委托抽象被打斷而客戶端代碼直接對應用二進制接口(ABI)做出回 調(diào)。如此處所述,為了模擬委托,該運行時標識該接口實例上的回調(diào)方法。隨后它創(chuàng)建具有 “調(diào)用”方法的委托類型,該“調(diào)用”方法具有與該回調(diào)方法的簽名完全相同的簽名。當該委 托被直接調(diào)用或經(jīng)由事件被調(diào)用時,該運行時將該委托轉(zhuǎn)發(fā)到底層ABI方法。該回調(diào)方法 的結(jié)果隨后被作為委托調(diào)用的結(jié)果返回。以此方式,該運行時提供接口的ABI上的委托API 體驗。
類似地,運行時可為ABI調(diào)用者提供供使用的接口,該接口映射到由該運行時托 管的委托的實例。該運行時將創(chuàng)建實現(xiàn)具有單一“調(diào)用”方法的新接口的對象,該方法具有 與該委托的簽名相匹配的簽名。當外部調(diào)用者對該對象的接口方法做出調(diào)用時,該運行時 調(diào)用它正包裝的委托。該委托調(diào)用的結(jié)果隨后作為該方法調(diào)用的結(jié)果被傳遞。這允許該運 行時提供在委托上的基于接口的ABI。下面,分別針對圖2和圖3的方法200和300,進一 步解釋這些概念。
考慮到以上描述的系統(tǒng)和體系結(jié)構(gòu),參考圖2和圖3的流程圖將更好地理解根據(jù) 所公開的主題實現(xiàn)的方法。為了解釋簡明起見,這些方法被示出和描述為一系列框。然而, 應該理解和了解,所要求保護的主題不受框的次序的限制,因為一些框可按不同的次序進 行和/或與此處所描繪和描述的其他框同時進行。此外,并非全部所示的框都是實現(xiàn)下面 所述的方法所必需的。
圖2示出了用于在接口實例上提供類型級構(gòu)造的模擬的方法200的流程圖?,F(xiàn)在 將頻繁參考環(huán)境100的組件和數(shù)據(jù)來描述方法200。
方法200包括實例化接口實例的動作,該接口實例包括實例對象和一個或多個實 例成員(動作210)。例如,實例模塊110可實例化接口實例115。盡管圖1中僅示出一個接 口實例,然而將理解,可實例化基本上任何數(shù)量的接口實例。實例115包括至少一個實例對 象116,以及一個或多個實例成員117。至少在一些情況下,這些實例成員可包括靜態(tài)成員。 取決于實現(xiàn),每個實例化的接口實例可包括不同數(shù)量的實例對象和/或(靜態(tài))實例成員。 一旦被實例化之后,該接口實例可被實現(xiàn)以模擬類型級操作。
方法200進一步包括實例化分開的類型化的對象120的動作,其中該分開的類型 化的對象120被配置成維護一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)121 (動作220)、以 及將實例化的接口實例115與分開的類型化的對象120相關聯(lián)的動作,其中該分開的類型 化的對象被配置成將方法調(diào)用118從該接口實例路由到該類型的一個或多個模擬的類型 級參數(shù)化構(gòu)造函數(shù)121和靜態(tài)成員122 (動作230)。在某些情況下,如前面提到的,多個不 同接口實例可被模塊110按順序?qū)嵗蛲瑫r實例化。這些實例化的接口實例中的每一個 可被(例如,接口關聯(lián)模塊125)與分開的類型化的對象120相關聯(lián)以向?qū)崿F(xiàn)該接口實例的 應用開發(fā)者提供統(tǒng)一視圖。從而,例如,如果開發(fā)者105正在使用IDE 107開發(fā)應用,在該 IDE中使用的接口實例可與分開的類型化的對象相關聯(lián)以為開發(fā)者提供統(tǒng)一視圖。
在某些實施例中,該接口實例的實例成員117可被路由到模擬的類型級參數(shù)化構(gòu) 造函數(shù)120。這些模擬的類型級參數(shù)化構(gòu)造函數(shù)可包括一個或多個類型級操作。這些操作 可被該接口實例使用。模擬的類型級參數(shù)化構(gòu)造函數(shù)還可被用于模擬該接口實例上的委托 對象。該委托對象可表示各種回調(diào)方法。
如同前面提到的,可使用簽名將模擬的類型級參數(shù)化構(gòu)造函數(shù)121與本機方法 (native method)相匹配。此處所使用的本機方法是指計算機系統(tǒng)101或計算機系統(tǒng)101 的操作系統(tǒng)可本機地(natively)訪問的方法。將模擬的類型級參數(shù)化構(gòu)造函數(shù)和本機方 法相匹配以檢測要對其分派方法調(diào)用的適當接口實例。然后,在接收對表示指定類型的靜 態(tài)成員122的接口方法的調(diào)用之后,該分開的類型化的對象120調(diào)用該指定類型的實例成 員117來滿足該接口方法調(diào)用。所述靜態(tài)成員可被分開的類型化的對象121模擬。執(zhí)行所 述靜態(tài)成員的任何運行時嘗試可被重定向到所述靜態(tài)成員的相關聯(lián)的接口實例115。所述重定向允許該運行時在實現(xiàn)基于接口的調(diào)用118的接口實例的頂上模擬靜態(tài)成員的存在。 該運行時從而可標識該接口實例上的回調(diào)方法,創(chuàng)建具有調(diào)用方法的委托類型(該調(diào)用方 法具有與該回調(diào)方法的簽名完全相同的簽名),確定該委托已被調(diào)用,將該回調(diào)方法轉(zhuǎn)發(fā)到 適當?shù)膽枚M制接口(ABI)方法,并且將回調(diào)的結(jié)果作為委托調(diào)用的結(jié)果返回。如此,該 運行時提供接口的ABI上的委托API體驗。
相應地,此處描述的實施例可提供接口實例上的類型級構(gòu)造的模擬。如此,通過具 有維護類型級構(gòu)造的分開的類型化的對象,可提供參數(shù)化構(gòu)造函數(shù)和靜態(tài)成員。單個接口 實例從而可將其方法調(diào)用通過模擬的類型級參數(shù)化構(gòu)造函數(shù)路由。
圖3示出了用于維護基于令牌的事件處理系統(tǒng)的方法300的流程圖?,F(xiàn)在將頻繁 參照圖4的環(huán)境400的組件和數(shù)據(jù)來描述方法300。
方法300包括實例化多個編程對象的事件訂閱表的動作,該表被配置成將一個或 多個令牌映射到事件訂閱器和它們訂閱的事件(動作310)。例如,實例化模塊440可建立事 件訂閱表445并將其作為基于令牌的事件處理系統(tǒng)的一部分來維護。該事件訂閱表可包括 用于不同編程對象450的多個不同的事件訂閱(例如,446A和446B)。如此,當事件在特定 編程對象上發(fā)生時,對該事件的訂閱者被通知。所述事件訂閱具有訂閱者(447A/447B)和 用于每個訂閱者的相關聯(lián)事件。例如,事件訂閱446A中的訂閱者447A訂閱事件A (448A) 和事件B (448B)。事件訂閱者447B訂閱事件A (448B)、事件C (448C)和事件D (448D)。 將要理解,每個訂閱者可訂閱基本上任何數(shù)量的不同事件。
方法300還可包括事件訂閱表為所述事件訂閱中的每一個維護到訂閱者的弱參 考的動作,使得所述訂閱能被跟蹤而事件訂閱表不必迫使訂閱者保持存活(動作320)。事 件訂閱表445可為每個事件訂閱(446A/446B)建立并維護對訂閱者(447A/447B)的弱參考 441。該弱參考跟蹤該訂閱而不迫使訂閱者保持存活(因此將參考標識為“弱”參考)。相應 地,事件訂閱表將不迫使訂閱者保持存活來維護該參考。
在某些情況下,計時器445可用于確定該訂閱已保持存活了指定時間量。然后,基 于所確定的時間量,可將該訂閱移除。在其他情況下,開發(fā)者可簡單地移除對一時間的訂 閱,或開發(fā)者可使用訂閱移除模塊460來移除事件所綁定到的編程對象。不管原因如何,事 件可能到達這樣一點它不再具有任何訂閱者。在該點,事件訂閱表可確定該事件不具有任 何訂閱(動作330)。
在此訂閱移除期間,事件訂閱表不保持訂閱者或事件存活。而且,至少在某些情況 下,在確定對于給定事件沒有更多訂閱要跟蹤之后,事件訂閱表可自動移除它自身。還應當 注意,至少在某些實施例中,編程對象、計時器455和訂閱移除模塊460可以用戶代碼451 實現(xiàn),這與以系統(tǒng)代碼實現(xiàn)的實例化模塊440和事件訂閱表不同。然而,要注意,計算機體 系結(jié)構(gòu)400的每個部分可在基本上任何類型的硬件和/或軟件環(huán)境中實現(xiàn)。
在某些實施例中,可實現(xiàn)參考計數(shù)來代替弱參考。用于事件處理的此技術由維護 每個事件源運行時可調(diào)用包裝器的參考計數(shù)的運行時實現(xiàn)。在這些情況下,可實現(xiàn)訂閱者 和該訂閱者所訂閱的事件之間的強參考。只要在事件訂閱者被添加到事件源時,該參考計 數(shù)被遞增,而移除訂閱者使該參考計數(shù)遞減。當確定該參考計數(shù)為非O時,對事件源的強參 考被自動維護。該強參考防止事件源被垃圾收集。當確定參考計數(shù)為O時,該運行時釋放 其對該事件源的強參考。這允許該事件源在不再被其相關聯(lián)的運行中的程序需要時夠格被垃圾收集。
相應地,描述了提供接口實例上的類型級構(gòu)造模擬的方法、系統(tǒng)和計算機程序產(chǎn) 品。此外,提供了維護基于令牌的事件處理系統(tǒng)的方法、系統(tǒng)和計算機程序產(chǎn)品。
本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所描述的實施例在 所有方面都應被認為僅是說明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而 非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的 范圍所涵蓋。
權(quán)利要求
1.一種用于在包括存儲器和至少一個處理器的計算機系統(tǒng)中在接口實例上提供類型級構(gòu)造的方法,所述方法包括 實例化接口實例的動作,所述接口實例包括實例對象和一個或多個實例成員; 實例化分開的類型化的對象的動作,所述分開的類型化的對象被配置成維護一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù);以及 將所述實例化的接口實例與所述分開的類型化的對象相關聯(lián)的動作,其中所述分開的類型化的對象被配置成將方法調(diào)用從所述接口實例路由到一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)和所述類型的靜態(tài)成員。
2.如權(quán)利要求1所述的方法,其特征在于,所述接口實例被實現(xiàn)為模擬一個或多個類型級操作。
3.如權(quán)利要求1所述的方法,其特征在于,多個不同的接口實例與所述分開的類型化的對象相關聯(lián)以向?qū)崿F(xiàn)所述接口實例的應用開發(fā)者提供統(tǒng)一視圖。
4.如權(quán)利要求1所述的方法,其特征在于,所述接口實例的所述實例成員被路由到所述模擬的類型級參數(shù)化構(gòu)造函數(shù)。
5.如權(quán)利要求4所述的方法,其特征在于,所述模擬的類型級參數(shù)化構(gòu)造函數(shù)包括一個或多個類型級操作。
6.如權(quán)利要求1所述的方法,其特征在于,所述實例成員包括靜態(tài)成員。
7.如權(quán)利要求6所述的方法,其特征在于,所述靜態(tài)成員被所述分開的類型化的對象模擬。
8.如權(quán)利要求6所述的方法,其特征在于,執(zhí)行所述靜態(tài)成員的運行時嘗試被重定向到所述靜態(tài)成員的相關聯(lián)的接口實例。
9.如權(quán)利要求8所述的方法,其特征在于,所述重定向允許所述運行時在實現(xiàn)基于接口的調(diào)用的所述接口實例的頂上模擬靜態(tài)成員的存在。
10.如權(quán)利要求1所述的方法,其特征在于,還包括 所述運行時標識所述接口實例上的回調(diào)方法的動作; 所述運行時創(chuàng)建具有調(diào)用方法的委托類型的動作,所述調(diào)用方法具有與所述回調(diào)方法的簽名完全相同的簽名; 在確定所述委托已被調(diào)用之后,所述運行時將所述回調(diào)方法轉(zhuǎn)發(fā)到應用二進制接口(ABI)方法的動作;以及 將所述回調(diào)方法的結(jié)果作為所述委托調(diào)用的結(jié)果返回的動作,以使得所述運行時提供在接口的ABI上的委托API體驗。
11.一種用于實現(xiàn)一種方法的計算機程序產(chǎn)品,所述方法用于維護基于令牌的事件處理系統(tǒng),所述計算機程序產(chǎn)品包括其上存儲有計算機可執(zhí)行指令的一個或多個計算機可讀存儲介質(zhì),所述指令在被計算系統(tǒng)的一個或多個處理器執(zhí)行時使得所述計算系統(tǒng)執(zhí)行所述方法,所述方法包括 實例化多個編程對象的事件訂閱表的動作,所述表被配置成將一個或多個令牌映射到事件訂閱器及其訂閱的事件; 所述事件訂閱表為所述事件訂閱中的每一個維護對所述訂閱者的弱參考的動作,以使得所述訂閱能被跟蹤而所述事件訂閱表不必迫使所述訂閱者保持存活;確定至少一個事件不再具有任何訂閱的動作;以及 基于所述確定,將該訂閱從所述事件訂閱表移除的動作。
12.如權(quán)利要求11所述的計算機程序產(chǎn)品,其特征在于,實現(xiàn)參考計數(shù)來代替所述弱參考。
13.如權(quán)利要求12所述的計算機程序產(chǎn)品,其特征在于,所述事件訂閱表不保持所述訂閱者或所述事件存活。
14.一種計算機系統(tǒng),包括 一個或多個處理器; 系統(tǒng)存儲器; 存儲有計算機可執(zhí)行指令的一個或多個計算機可讀存儲介質(zhì),所述計算機可執(zhí)行指令在由所述一個或多個處理器執(zhí)行時使得所述計算系統(tǒng)執(zhí)行一種用于在接口實例上提供類型級構(gòu)造的模擬的方法,所述方法包括 實例化接口實例的動作,所述接口實例包括實例對象和一個或多個實例成員; 實例化分開的類型化的對象的動作,所述類型化的對象被配置成維護一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù); 將所述實例化的接口實例與所述分開的類型化的對象相關聯(lián)的動作,其中所述分開的類型化的對象被配置成將方法調(diào)用從所述接口實例路由到一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)和所述類型的靜態(tài)成員; 所述運行時標識所述接口實例上的回調(diào)函數(shù)的動作; 所述運行時創(chuàng)建具有調(diào)用方法的委托類型的動作,所述調(diào)用方法具有與所述回調(diào)方法的簽名等同的簽名; 在確定所述委托已被調(diào)用之后,所述運行時將所述回調(diào)方法轉(zhuǎn)發(fā)到應用二進制接口(ABI)方法的動作;以及 將所述回調(diào)方法的結(jié)果作為所述委托調(diào)用的結(jié)果返回的動作,以使得所述運行時提供在接口的ABI上的委托API體驗。
15.如權(quán)利要求14所述的計算機系統(tǒng),其特征在于,使用簽名將一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)與一個或多個本機方法相匹配以檢測針對其分派方法調(diào)用的適當?shù)慕涌趯嵗?br>
全文摘要
本發(fā)明涉及基于接口的A PI上的靜態(tài)成員和參數(shù)化構(gòu)造函數(shù)的模擬。實施例涉及在接口實例上提供類型級構(gòu)造的模擬,并且涉及維護基于令牌的事件處理系統(tǒng)。在一個場景中,計算機系統(tǒng)實例化一接口實例,該接口實例包括實例對象和多個實例成員。該計算機系統(tǒng)還實例化一分開的類型化的對象,該對象被配置成維護一個或多個模擬的類型級參數(shù)化構(gòu)造函數(shù)。該計算機系統(tǒng)隨后將經(jīng)實例化的接口實例與該分開的類型化的對象相關聯(lián)。該分開的類型化的對象將方法調(diào)用從該接口實例路由到各模擬的類型級參數(shù)化構(gòu)造函數(shù)和該類型的靜態(tài)成員。
文檔編號G06F9/455GK103049306SQ20121033522
公開日2013年4月17日 申請日期2012年9月11日 優(yōu)先權(quán)日2011年9月12日
發(fā)明者S·法克斯, J·D·卡普蘭, L·普羅塞克, R·M·拜爾斯, R·A·拜因頓 申請人:微軟公司