專利名稱:靈活的元數(shù)據(jù)組合的制作方法
靈活的元數(shù)據(jù)組合
背景技術(shù):
計(jì)算裝置通常把運(yùn)行操作系統(tǒng)作為管理計(jì)算裝置的硬件和/或軟件資源的一種方式。在一些情況下,操作系統(tǒng)可以提供對(duì)這些資源的簡(jiǎn)化的編程訪問(wèn)。例如,操作系統(tǒng)可以包含應(yīng)用程序接口(API ),用以暴露各種組件。只要應(yīng)用程序獲知與API相關(guān)的是什么類型,應(yīng)用程序就可以利用與API不同的編程語(yǔ)言和/或類型系統(tǒng)成功地調(diào)用API。例如,API可以包含一個(gè)或多個(gè)輸入和/或輸出參數(shù)。為了調(diào)用API,程序員不僅決定API的參數(shù),而且決定與這些參數(shù)相關(guān)的是什么數(shù)據(jù)類型。如上所述,可以用不同于調(diào)用編程語(yǔ)言類型系統(tǒng)的類型系統(tǒng)來(lái)描述API。為了連接不同的類型系統(tǒng),程序員通常編寫(xiě)包裝代碼,用以在各類型系統(tǒng)之間進(jìn)行轉(zhuǎn)化。讓程序員將API訪問(wèn)包含于程序中的一個(gè)方法是通過(guò)一個(gè)或多個(gè)文件和/或命名空間將API定義包含到源代碼中。為了成功地將文件和/或命名空間結(jié)合到源代碼,源代碼可以被配置成包含對(duì)文件/命名空間的特定位置的引用(例如,硬編碼的路徑、利用該路徑訪問(wèn)注冊(cè)表項(xiàng)等)。如果該位置、文件名稱、和/或命名空間名稱發(fā)生變化,則鏈接被中斷,直到用適當(dāng)?shù)男薷膶?duì)代碼和/或軟件工具進(jìn)行更新。
發(fā)明內(nèi)容
提供這個(gè)發(fā)明內(nèi)容部分來(lái)以簡(jiǎn)化的形式介紹下面在具體實(shí)施方式
中進(jìn)一步描述的概念的選擇。這個(gè)發(fā)明內(nèi)容并不旨在識(shí)別所請(qǐng)求保護(hù)的主題的關(guān)鍵特征或基本特征,也不旨在用于限制所請(qǐng)求保護(hù)的主題的范圍。。各種實(shí)施例提供了在多個(gè)類型系統(tǒng)之間對(duì)類型解析進(jìn)行抽象的能力??梢栽谝粋€(gè)或多個(gè)可編程訪問(wèn)文件中對(duì)至少一個(gè)類型進(jìn)行描述。在一些實(shí)施例中,在不了解類型描述的所在位置的情況下,使用不同類型系統(tǒng)的應(yīng)用程序可以可編程地訪問(wèn)并解析該類型系統(tǒng)的類型??商娲幕蚋郊拥?,至少部分基于類型系統(tǒng)描述,可以對(duì)一個(gè)或多個(gè)可編程訪問(wèn)文件中所包含的類型描述進(jìn)行分析并重新構(gòu)成一個(gè)或多個(gè)新的可編程訪問(wèn)文件。
在所有附圖中使用相同的數(shù)字來(lái)標(biāo)記相同的特征。圖1a示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的、在其中可以應(yīng)用本文中所描述的各種原理的操作環(huán)境。圖1b示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的、在其中可以應(yīng)用本文中所描述的各種原理的操作環(huán)境。圖2示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的體系結(jié)構(gòu)。圖3示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的流程圖。圖4示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的關(guān)系圖。圖5示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的流程圖。圖6示出了可以用以實(shí)施一個(gè)或多個(gè)實(shí)施例的示例性系統(tǒng)。
具體實(shí)施例方式概述
各種實(shí)施例提供了在多個(gè)類型系統(tǒng)之間對(duì)類型解析進(jìn)行抽象的能力。使用一個(gè)類型系統(tǒng)的應(yīng)用程序可以調(diào)用到第二個(gè)類型系統(tǒng),只要該應(yīng)用程序已了解如何在各類型系統(tǒng)之間連接。例如,類型系統(tǒng)的特征(例如數(shù)據(jù)類型、數(shù)據(jù)類型的行為、函數(shù)調(diào)用參數(shù)、事件等)可以在一個(gè)或多個(gè)可編程訪問(wèn)文件中描述。應(yīng)用程序可以訪問(wèn)文件并且解析不同的類型系統(tǒng)。在一些實(shí)施例中,可以對(duì)類型解析進(jìn)行抽象,使得在事先不了解訪問(wèn)哪個(gè)文件和/或文件所在位置的情況下,應(yīng)用程序可以訪問(wèn)描述。在接下來(lái)的論述中,提供了標(biāo)題為“操作環(huán)境”的章節(jié)并且描述了多個(gè)環(huán)境,在其中可以實(shí)施一個(gè)或多個(gè)實(shí)施例。在此之后,標(biāo)題為“類型解析結(jié)構(gòu)”的章節(jié)描述了可以進(jìn)行可編程類型系統(tǒng)解析的體系結(jié)構(gòu)。接下來(lái),標(biāo)題為“類型描述存儲(chǔ)”的段落描述了可以用于實(shí)現(xiàn)類型描述的靈活存儲(chǔ)的各種方法。最后,標(biāo)題為“示例系統(tǒng)”的章節(jié)描述了一個(gè)可以用于實(shí)施一個(gè)或多個(gè)實(shí)施例的示例系統(tǒng)。前面已提供了對(duì)下文將要描述的各種實(shí)施例的概述,現(xiàn)在考慮示例操作環(huán)境,在其中可以實(shí)施一個(gè)或多個(gè)實(shí)施例。操作環(huán)境
圖1a和圖1b示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的操作環(huán)境,通常在IOOa和IOOb顯示。圖1a示出了參照一個(gè)或多個(gè)元數(shù)據(jù)文件的生成而可以利用的示例操作環(huán)境,如下所述。圖1a的操作環(huán)境可以認(rèn)為是“構(gòu)建時(shí)”環(huán)境。圖1b示出了參考靈活類型系統(tǒng)解析而可以利用的示例操作環(huán)境。圖1b的操作環(huán)境可以看作是運(yùn)行時(shí)環(huán)境。在一些實(shí)施例中,操作環(huán)境IOOa和IOOb具有至少一些類似的組件。因此,為簡(jiǎn)潔起見(jiàn),圖1a和圖1b將被一起描述。與圖1a相關(guān)的類似的組件將被標(biāo)識(shí)為具有“ lXXa”的命名約定的組件,而與圖1b相關(guān)的組件將被標(biāo)識(shí)為具有“l(fā)XXb”的命名約定的組件。類似地,特定于操作環(huán)境的組件將簡(jiǎn)單地被標(biāo)識(shí)為 “1XX”。環(huán)境IOOa和IOOb分別包括具有一個(gè)或多個(gè)處理器104a、104b,以及一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)106a、106b的計(jì)算裝置102a、102b。通過(guò)示例而非限制,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以包括與計(jì)算裝置典型地相關(guān)的所有形式的易失性及非易失性存儲(chǔ)器和/或存儲(chǔ)介質(zhì)。此類介質(zhì)可以包括R0M、RAM、閃速存儲(chǔ)器、硬盤(pán)、可移動(dòng)介質(zhì)等。下面在圖6中顯示并描述了計(jì)算裝置的一個(gè)具體示例。另外,計(jì)算裝置102a、102b包含一個(gè)或多個(gè)操作系統(tǒng)(OS) 108a、108b以及一個(gè)或多個(gè)應(yīng)用程序110a、I IOb。操作系統(tǒng)108a、108b代表用于管理計(jì)算裝置102a、102b的一個(gè)或多個(gè)軟件和/或硬件資源的功能。這可以包括內(nèi)存管理、文件管理、服務(wù)、功能、資源管理、外圍設(shè)備管理等。一個(gè)或多個(gè)應(yīng)用程序110a、I IOb代表被配置來(lái)在計(jì)算裝置102a、102b中,通常在一個(gè)或多個(gè)操作系統(tǒng)108a、108b的協(xié)助下執(zhí)行的軟件。一個(gè)或多個(gè)應(yīng)用程序110a、IlOb可以在與一個(gè)或多個(gè)操作系統(tǒng)108a、108b相同和/或不同的類型系統(tǒng)中執(zhí)行,如下面進(jìn)一步的描述。計(jì)算裝置102a、102b也包括一個(gè)或多個(gè)軟件接口 112a、112b,這些軟件接口代表對(duì)由軟件和/或一個(gè)或多個(gè)應(yīng)用程序所提供函數(shù)、服務(wù)、數(shù)據(jù)等的編程訪問(wèn)。一個(gè)或多個(gè)軟件接口 112a、112b可以實(shí)現(xiàn)對(duì)一個(gè)或多個(gè)操作系統(tǒng)108a、108b和/或一個(gè)或多個(gè)應(yīng)用程序IlOaUlOb的編程訪問(wèn)。例如,一個(gè)或多個(gè)應(yīng)用程序110a、IlOb可以通過(guò)調(diào)用一個(gè)或多個(gè)軟件接口 112a、112b來(lái)訪問(wèn)由一個(gè)或多個(gè)操作系統(tǒng)108a、108b所提供的功能。在一些實(shí)施例中,使用不同于軟件接口的類型系統(tǒng)的類型系統(tǒng)的一個(gè)或多個(gè)應(yīng)用程序112a、112可以可編程地解析類型差異,如下面進(jìn)一步的描述。另外,計(jì)算裝置102a、102b還包含一個(gè)或多個(gè)元數(shù)據(jù)文件114a、114b,這些元數(shù)據(jù)文件代表一個(gè)或多個(gè)機(jī)器可讀文件,該機(jī)器可讀文件包含與一個(gè)或多個(gè)軟件接口 112a、112b,一個(gè)或多個(gè)操作系統(tǒng)108a、108b,和/或一個(gè)或多個(gè)應(yīng)用程序110a、IIOb相關(guān)的信息,諸如輸入?yún)?shù)類型、參數(shù)調(diào)用順序、接口之間的關(guān)系等??商娲幕蚋郊拥?,一個(gè)或多個(gè)軟件接口可以與連接到計(jì)算裝置102a、102b的外圍設(shè)備(諸如打印機(jī)、掃描儀、智能手機(jī)等)相關(guān)。在一些實(shí)施例中,一個(gè)或多個(gè)元數(shù)據(jù)文件114a、114b可以被配置成以任何合適的方式來(lái)描述一個(gè)或多個(gè)接口,如下面進(jìn)一步的描述。計(jì)算裝置102a還包括一個(gè)或多個(gè)合并模塊116。一個(gè)或多個(gè)合并模塊116代表可以閱讀一個(gè)或多個(gè)元數(shù)據(jù)文件、對(duì)文件內(nèi)容進(jìn)行分析、以及輸出一個(gè)或多個(gè)包含重新構(gòu)成的內(nèi)容的新元數(shù)據(jù)文件的內(nèi)容的功能。在一些實(shí)施例中,可以至少部分地基于類型描述對(duì)內(nèi)容進(jìn)行重新組織。計(jì)算裝置102b包括一個(gè)或多個(gè)類型解析模塊118。一個(gè)或多個(gè)類型解析模塊118代表配置來(lái)接收訪問(wèn)相關(guān)的類型數(shù)據(jù)的請(qǐng)求的功能,并且定位類型解析信息。在一些實(shí)施例中,一個(gè)或多個(gè)類型解析模塊118可以在無(wú)用戶輸入的情況下,且獨(dú)立于信息變化位置而定位類型解析信息。例如,當(dāng)信息已從第一文件移動(dòng)到第二文件時(shí),一個(gè)或多個(gè)類型解析模塊118可以在無(wú)用戶輸入的情況下定位接口描述信息,如下面進(jìn)一步的描述。計(jì)算裝置102a、102b可以體現(xiàn)為任何合適的計(jì)算裝置,通過(guò)示例而非限制,諸如臺(tái)式計(jì)算機(jī)、便攜式計(jì)算機(jī)、筆記本計(jì)算機(jī)、手持式計(jì)算機(jī)(例如個(gè)人數(shù)碼助理(PDA))、移動(dòng)電話等。上面已說(shuō)明了示例操作環(huán)境,現(xiàn)在考慮對(duì)配置來(lái)實(shí)現(xiàn)獨(dú)立于位置文件名稱和/或位置的類型解析的類型解析結(jié)構(gòu)加以論述。類型解析結(jié)構(gòu)
隨著編程語(yǔ)言的技術(shù)進(jìn)步,其能力也在進(jìn)步。例如,用第一編程語(yǔ)言編寫(xiě)的應(yīng)用程序可以調(diào)用到用第二編程語(yǔ)言編寫(xiě)的軟件。本質(zhì)上,編程語(yǔ)言具有不同的類型系統(tǒng)。因此,為了成功地調(diào)用位于不同的類型系統(tǒng)中的軟件,第一編程語(yǔ)言利用多種技術(shù)來(lái)解析不同的類型。例如,程序員可以手動(dòng)編寫(xiě)用于在各類型之間轉(zhuǎn)換的包裝代碼??商娲?,類型系統(tǒng)定義可以保存在文件中,并且可以進(jìn)行可編程訪問(wèn)。以編程方式訪問(wèn)一個(gè)包含類型定義的文件使應(yīng)用程序能夠確定運(yùn)行時(shí)的能力和描述。然而,訪問(wèn)文件意味著不僅了解訪問(wèn)哪個(gè)文件,而且了解文件的位置。如果文件的內(nèi)容改變和/或文件的位置改變,訪問(wèn)該文件的應(yīng)用程序有可能會(huì)失敗,除非適當(dāng)?shù)馗隆_@有時(shí)會(huì)在一個(gè)或多個(gè)應(yīng)用程序與一個(gè)或多個(gè)文件之間形成非故意的耦合。各種實(shí)施例提供了在多個(gè)類型系統(tǒng)之間對(duì)類型解析進(jìn)行抽象的能力。與類型解析相關(guān)的信息可以保存在可編程訪問(wèn)的文件中。在一些實(shí)施例中,采用一個(gè)類型系統(tǒng)的應(yīng)用程序可以通過(guò)訪問(wèn)該文件而動(dòng)態(tài)地解析第二類型系統(tǒng)??商娲鼗蚋郊拥模瑧?yīng)用程序可以在不了解訪問(wèn)哪個(gè)/哪些文件和/或該一個(gè)或多個(gè)文件所在位置的情況下訪問(wèn)該文件。考慮圖2,該圖示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的示例體系結(jié)構(gòu)200。體系結(jié)構(gòu)200包含可以配置成在計(jì)算裝置上執(zhí)行的操作系統(tǒng)202。應(yīng)當(dāng)理解的是,為了簡(jiǎn)潔起見(jiàn),圖中未示出操作系統(tǒng)202的全部。操作系統(tǒng)202包括一個(gè)或多個(gè)操作系統(tǒng)組件204,操作系統(tǒng)組件204被配置來(lái)管理與計(jì)算裝置相關(guān)的資源。在一些實(shí)施例中,一個(gè)或多個(gè)操作系統(tǒng)組件204可以提供對(duì)這些資源的編程訪問(wèn)、以及與管理這些資源相關(guān)的一個(gè)或多個(gè)服務(wù)和/或一個(gè)或多個(gè)特征。一個(gè)或多個(gè)操作系統(tǒng)組件204還可以包括與操作系統(tǒng)202相關(guān)的基本元素、以及從基本元素構(gòu)建的復(fù)雜元素。雖然此示例示出了暴露由操作系統(tǒng)202所提供功能的體系結(jié)構(gòu),但應(yīng)當(dāng)領(lǐng)會(huì)和理解的是在不背離請(qǐng)所要求保護(hù)的主題的精神的前提下,所述體系結(jié)構(gòu)可以被應(yīng)用于暴露由其它合適類型的應(yīng)用程序所提供的功能。在一些實(shí)施例中,可以經(jīng)由一個(gè)或多個(gè)接口(在這里圖示為一個(gè)或多個(gè)操作系統(tǒng)接口 206)暴露一個(gè)或多個(gè)操作系統(tǒng)組件204。這可以是任何適當(dāng)形式的接口,諸如應(yīng)用程序接口(API)。應(yīng)用程序可以通過(guò)調(diào)用和/或執(zhí)行一個(gè)或多個(gè)操作系統(tǒng)接口 206以訪問(wèn)由一個(gè)或多個(gè)操作系統(tǒng)組件204所提供的功能,如下面進(jìn)一步的描述。在一些情況下,應(yīng)用程序利用不同于用于描述一個(gè)或多個(gè)操作系統(tǒng)接口 206的類型系統(tǒng)的類型系統(tǒng)。在一些情況下,一個(gè)或多個(gè)操作系統(tǒng)接口 206可以包括一個(gè)或多個(gè)應(yīng)用程序二進(jìn)制接口(ABI)。ABI以機(jī)器級(jí)描述用于調(diào)用功能、方法、API等的二進(jìn)制合同(binary contract)。二進(jìn)制合同可以包括與功能相關(guān)的標(biāo)識(shí)或名稱、可以用于調(diào)用函數(shù)的簽名、傳遞給與參數(shù)相關(guān)的函數(shù)和/或數(shù)據(jù)類型的參數(shù)順序,等??商娲鼗蚋郊拥兀M(jìn)制合同可以包括用于暴露與類型系統(tǒng)中的至少一種類型相關(guān)的行為的定義和/或規(guī)則。操作系統(tǒng)202還包含各種元數(shù)據(jù)208。元數(shù)據(jù)208可以包括類型解析信息,類型解析信息描述相關(guān)的一個(gè)或多個(gè)操作系統(tǒng)接口 206的各種方面,諸如版本信息、什么方法是可用的、一個(gè)或多個(gè)接口采用什么參數(shù)、參數(shù)的數(shù)據(jù)類型、傳遞參數(shù)的順序、數(shù)據(jù)類型行為和/或解析信息等。在一些實(shí)施例中,元數(shù)據(jù)可以包括與接口相關(guān)的層次信息,諸如描述一個(gè)或多個(gè)接口之間的關(guān)系的信息和/或以面向?qū)ο蟮姆绞矫枋鲈撘粋€(gè)或多個(gè)接口的信息。元數(shù)據(jù)還可以包括類描述、類的相關(guān)的方法和參數(shù)等。在一些情況下,元數(shù)據(jù)可以對(duì)使用抽象類型系統(tǒng)(例如獨(dú)立于特定編程語(yǔ)言的類型系統(tǒng))的接口進(jìn)行描述??商娲鼗蚋郊拥?,元數(shù)據(jù)可以包含對(duì)特定類型系統(tǒng)(諸如該抽象類型系統(tǒng))的描述。一個(gè)或多個(gè)特定的編程語(yǔ)言轉(zhuǎn)而可以把特定的類型系統(tǒng)(例如該抽象類型系統(tǒng))的描述映射到該一個(gè)或多個(gè)特定的編程語(yǔ)言中。此外,想要確定哪些接口是可用的程序員可以手動(dòng)地和/或可編程地訪問(wèn)每個(gè)接口的描述。例如,為了確定一個(gè)或多個(gè)操作系統(tǒng)組件204存在哪些接口、接口在什么類型系統(tǒng)中被描述、以及如何調(diào)用它們,程序員可以訪問(wèn)相關(guān)的元數(shù)據(jù)208。體系結(jié)構(gòu)200還包含一個(gè)或多個(gè)應(yīng)用程序210。應(yīng)用程序210可以包括由一個(gè)或多個(gè)編程語(yǔ)言(諸如HTML、JavaScript、Visual Basic、C#、C++等)所生成的一個(gè)或多個(gè)應(yīng)用程序。在一些實(shí)施例中,應(yīng)用程序210包含一個(gè)或多個(gè)對(duì)操作系統(tǒng)組件的調(diào)用。在一些情況下,應(yīng)用程序210可以配置成首先可編程地確定哪個(gè)或哪些接口是可用的,然后調(diào)用一個(gè)或多個(gè)經(jīng)確定的接口。在一些情況下,一個(gè)或多個(gè)應(yīng)用程序210借助于一個(gè)或多個(gè)所生成的語(yǔ)言映射模塊(language projection module) 212而訪問(wèn)一個(gè)或多個(gè)接口,如下面進(jìn)一步的描述。
在一個(gè)或多個(gè)實(shí)施例中,生成的一個(gè)或多個(gè)語(yǔ)言映射模塊212將抽象類型定義映射至特定的編程語(yǔ)言??梢杂成淙魏魏线m的編程語(yǔ)言,上文給出了其示例。在一些實(shí)施例中,生成的語(yǔ)言映射模塊對(duì)于每種編程語(yǔ)言可以是唯一的。在其它實(shí)施例中,生成的語(yǔ)言映射模塊可以是多用途的并且被多種編程語(yǔ)言所利用。映射實(shí)現(xiàn)了在無(wú)需額外的程序設(shè)計(jì)語(yǔ)句(例如包裝功能)的情況下,特定編程語(yǔ)言能夠?qū)κ褂贸橄箢愋拖到y(tǒng)所描述的當(dāng)前和將來(lái)的接口訪問(wèn)。該映射進(jìn)一步允許特定的編程語(yǔ)言能夠以由特定編程語(yǔ)言產(chǎn)生的方式調(diào)用接口。任何合適類型的信息(諸如類、數(shù)據(jù)類型、函數(shù)指針、結(jié)構(gòu)等)可以被映射。一個(gè)或多個(gè)接口的描述可以用于描述應(yīng)用程序應(yīng)該如何調(diào)用接口、以及描述與接口相關(guān)的類型系統(tǒng)的行為。響應(yīng)于正在被定位的描述,應(yīng)用程序可以動(dòng)態(tài)地決定如何調(diào)用接口以及解析應(yīng)用程序與接口之間的類型系統(tǒng)差異。在一些實(shí)施例中,使用不同類型系統(tǒng)的應(yīng)用程序可以在不了解類型描述所在位置的情況下,可編程地訪問(wèn)并解析由接口所使用的類型??商娲鼗蚋郊拥兀绾螌?duì)描述進(jìn)行分組,可以使自動(dòng)類型解析成為可能,如下面的進(jìn)一步描述。考慮使用JavaScript編寫(xiě)應(yīng)用程序的程序員。雖然此示例描述了使用JavaScript的實(shí)施例,但應(yīng)當(dāng)領(lǐng)會(huì)和理解的是在不背離所要求保護(hù)的主題的精神的情況下可以使用任何編程語(yǔ)言。為了訪問(wèn)外部功能,程序員可以在源代碼中包含被配置來(lái)識(shí)別與該功能相關(guān)的命名空間和 /或類型的語(yǔ)句。例如,在源代碼中可以包含和/或描述外部類型,如下
OperatingSystem. Foo. Bar. Typel
在這個(gè)具體示例中,Typel代表正在被訪問(wèn)的功能。這可以是任何合適類型的功能,在上文和下文中給出了其例子。上述語(yǔ)法代表可遍歷地定位Typel的多級(jí)別命名空間層次。在最高級(jí)別中,Typel位于識(shí)別為“操作系統(tǒng)”的命名空間中。在“操作系統(tǒng)”內(nèi)存在識(shí)別為“Foo”的命名空間。類似地,在“Foo”內(nèi)存在識(shí)別為“Bar”的命名空間,Typel存在其中。因此,語(yǔ)法可以用于識(shí)別Typel的邏輯位置。然而,Typel的物理位置(例如,Typel信息存在于什么文件中和/或文件存在于什么目錄中)有時(shí)可以變化。過(guò)去,可以通過(guò)對(duì)應(yīng)用程序內(nèi)的路徑和文件名進(jìn)行硬編碼以確定物理位置(直接地或間接地)。因此,如果改變Typel信息的文件名和/或路徑,那么對(duì)應(yīng)用程序所使用的文件名稱和/或路徑的任何直接或間接引用將會(huì)是錯(cuò)誤的,直到被更新。此外,應(yīng)用程序有可能不能正常運(yùn)行,直到直接或間接的引用被更新。各種實(shí)施例提供對(duì)類型解析進(jìn)行抽象的能力。例如,可以在不確切了解相關(guān)類型解析信息位置的情況下,由應(yīng)用程序?qū)︻愋瓦M(jìn)行可編程解析。在一些實(shí)施例中,可以在不更新應(yīng)用程序的情況下,利用具有新位置信息的解析信息對(duì)類型解析信息進(jìn)行重新定位。應(yīng)用程序可以配置為對(duì)類型解析信息進(jìn)行定位而不管該類型解析信息存在于哪個(gè)文件中??紤]圖3,其示出了根據(jù)一個(gè)或多個(gè)實(shí)施例的、描述方法中的步驟的流程圖。所述方法可以由任何合適的硬件、軟件、固件、或其組合執(zhí)行。至少在一些實(shí)施例中,所述方法的各方面可以由在一個(gè)或多個(gè)計(jì)算裝置中執(zhí)行的一個(gè)或多個(gè)適當(dāng)配置的軟件模塊來(lái)實(shí)施,如圖1b的一個(gè)或多個(gè)類型解析模塊118。在一些實(shí)施例中,所述方法可以在無(wú)用戶介入的情況下執(zhí)行。步驟302搜索具有與正在被解析的類型相匹配的文件名的文件。這可以包括搜索多個(gè)元數(shù)據(jù)文件,如上所述。參考上述語(yǔ)法說(shuō)明,響應(yīng)于應(yīng)用程序訪問(wèn)OperatingSystem.Foo. Bar. Typel,步驟 302 搜索具有名稱“OperatingSystem. Foo. Bar. Typel”的文件。任何合適類型的搜索可以被執(zhí)行。例如,搜索可以被配置來(lái)尋找類型與文件名之間的精確匹配、類型與文件名之間的部分匹配等??商娲鼗蚋郊拥?,搜索可以被配置來(lái)在一個(gè)目錄、多個(gè)目錄和/或子目錄、或者其任意組合中進(jìn)行搜索。步驟304確定該文件是否存在。響應(yīng)于確定文件存在,步驟306發(fā)送表明該類型是命名空間的信息。響應(yīng)于確定文件不存在,步驟308搜索和與正在被解析的類型相關(guān)的命名空間相匹配的文件名。在一些情況下,這可以包括操作字符串,該字符串包含用于確定在什么命名空間中進(jìn)行搜索的命名空間層次。在上述示例中,Typel被圖示為定位于命名空間層次中的向下的三個(gè)級(jí)別。字符串可以被操作以去除類型(例如Typel)并留下命名空間。這里,步驟308將會(huì)搜索與命名空間層次“OperatingSystem. Foo. Bar”相關(guān)的名稱。與上述相類似,此搜索可以被配置來(lái)搜索精確匹配、部分匹配、在一個(gè)目錄中的搜索、在子目錄中搜索等。步驟310確定與該文件名相關(guān)的文件是否存在。響應(yīng)于確定文件存在,步驟312通過(guò)對(duì)該文件進(jìn)行處理以獲得與該類型相關(guān)的信息。步驟314確定與類型相關(guān)的信息是否位于文件內(nèi)。響應(yīng)于確定與類型相關(guān)的信息是在文件內(nèi),步驟316返回該信息。例如,可以把該信息返回至調(diào)用程序。然而,響應(yīng)于確定與該類型相關(guān)的信息不在文件內(nèi),則過(guò)程前進(jìn)至步驟318。步驟318搜索和較高級(jí)別的命名空間相匹配的文件名。這可以是響應(yīng)于確定文件不存在,例如響應(yīng)于步驟310,或者響應(yīng)于在文件內(nèi)未定位到與類型相關(guān)的信息,例如響應(yīng)于步驟314。可以以任何合適的方式來(lái)確定較高級(jí)別的命名空間。例如,在上述示例中,字符串可以被進(jìn)一步操作來(lái)反映命名空間層次中的上一個(gè)級(jí)別(例如“OperatingSystem.Foo”)。步驟318確定較高級(jí)別的命名空間并且搜索具有相關(guān)名稱的文件。步驟320確定與該文件名相關(guān)的文件是否存在。正如在步驟310的情況下,如果確定文件存在,過(guò)程前進(jìn)至步驟312、314和/或316,其中對(duì)文件進(jìn)行處理以獲知相關(guān)的類型信息。響應(yīng)于確定該文件不存在,步驟322確定是否存在另一命名空間層次級(jí)別。這可以以任意合適的方式來(lái)確定。例如,可以對(duì)字符串進(jìn)行搜索以獲得級(jí)別分隔符(levelseparator)0在上述實(shí)例中,“.”的語(yǔ)法在命名空間層次的級(jí)別之間區(qū)分。響應(yīng)于確定另一命名空間層次級(jí)別存在,則過(guò)程重復(fù),并且過(guò)程返回到步驟318以在新確定的命名空間內(nèi)搜索文件。步驟318、320和322自身重復(fù),直到找到適當(dāng)文件或者已到達(dá)并搜索到命名空間層次的頂部。響應(yīng)于確定另一命名空間層次級(jí)別不存在,步驟324返回錯(cuò)誤。這可以包括拋出異常,顯示彈出對(duì)話框等。通過(guò)上述方法的使用,可以對(duì)多個(gè)文件和/或位置進(jìn)行搜索以獲得類型解析信息。如圖所示,類型搜索可以至少部分地基于層次命名空間信息。圖3描述了類型搜索,該類型搜索開(kāi)始于較低的命名空間層次級(jí)別(例如“OperatingSystem. Foo. Bar. Typel”)并且向上穿過(guò)每個(gè)命名空間級(jí)別,直到該類型被定位或者到達(dá)命名空間層次級(jí)別的頂部(例如“OperatingSystem”)。然而,可以按任意合適的順序來(lái)執(zhí)行此搜索。在一些實(shí)施例中,類型搜索可以開(kāi)始于較高的命名空間層次級(jí)別(例如“OperatingSystem”)并且向下穿過(guò)每個(gè)命名空間級(jí)別,直到該類型被定位或者到達(dá)命名空間層次級(jí)別的底部(例如“OperatingSystem. Foo. Bar. Typel”)。在命名空間層次中搜索可以對(duì)類型解析信息可以存在的位置進(jìn)行抽象,并且還可以在不影響訪問(wèn)類型解析信息的應(yīng)用程序的情況下,進(jìn)一步使類型解析信息能夠改變位置。上面已說(shuō)明了被配置來(lái)實(shí)現(xiàn)獨(dú)立于位置文件名稱和/或位置的類型解析的類型解析體系結(jié)構(gòu),現(xiàn)在對(duì)根據(jù)一個(gè)或多個(gè)實(shí)施例的靈活的類型描述存儲(chǔ)進(jìn)行論述。類型描述存儲(chǔ)
元數(shù)據(jù)文件可以用于描述軟件接口的各種方面。如上所述,元數(shù)據(jù)文件可以包括從類層次、抽象類型系統(tǒng)、相關(guān)方法、屬性和事件等方面來(lái)描述接口的信息。在一些情況下,相關(guān)信息可以存在于多個(gè)文件中。例如,不同的元數(shù)據(jù)文件可以包括從屬于相同命名空間的信息。雖然多個(gè)元數(shù)據(jù)文件可以給元數(shù)據(jù)文件的開(kāi)發(fā)人員提供靈活性,但有時(shí)當(dāng)進(jìn)行搜索時(shí)卻會(huì)阻礙元數(shù)據(jù)文件的用戶。考慮這樣一個(gè)例子,其中每個(gè)命名空間具有其自己的相關(guān)元數(shù)據(jù)文件。從劃分的觀點(diǎn)來(lái)看,各命名空間的單獨(dú)文件可以將命名空間的改變與相關(guān)文件隔離開(kāi)。然而,從搜索的觀點(diǎn)來(lái)看,當(dāng)在運(yùn)行時(shí)進(jìn)行搜索時(shí),必須在多個(gè)文件中搜索信息會(huì)降低性能。此外,從獲知的觀點(diǎn)來(lái)看,隨著文件數(shù)量增加,跟蹤什么信息在什么文件中會(huì)被復(fù)雜化(compound )。各種實(shí)施例允許在不事先了解文件名稱和類型解析信息所存在的文件位置的情況下進(jìn)行類型解析。至少部分地基于組合規(guī)則,可以對(duì)一組輸入文件的內(nèi)容進(jìn)行分析和劃分。可以產(chǎn)生一組輸出文件,并且將輸出文件配置成包含經(jīng)劃分的內(nèi)容。輸出文件允許在不事先了解該內(nèi)容所存在的位置的情況下定位該內(nèi)容。作為示例,考慮圖4,圖中示出了一個(gè)或多個(gè)實(shí)施例的描述語(yǔ)言文件、元數(shù)據(jù)文件、及合并模塊之間的關(guān)系。在至少一些實(shí)施例中,關(guān)系圖中所示出的模塊可以作為軟件、硬件或者其任意組合而實(shí)施,例如圖1a的一個(gè)或多個(gè)合并模塊116。在圖示和描述的實(shí)施例中,F(xiàn)oo.1dl 402代表了被配置來(lái)描述一個(gè)或多個(gè)接口的描述語(yǔ)言文件。在一些實(shí)施例中,接口可以與操作系統(tǒng)和/或應(yīng)用程序(諸如圖1的操作系統(tǒng)接口 108和/或應(yīng)用程序110)相關(guān)。描述語(yǔ)言文件可以利用任何合適的描述、置標(biāo)語(yǔ)言、和/或語(yǔ)法(諸如,利用接口定義語(yǔ)言(IDL)、可擴(kuò)展標(biāo)記語(yǔ)言(XML)等)來(lái)描述接口。在此具體示例中,F(xiàn)oo.1dl代表IDL文件。Foo.1dl 402 包括三種類型的描述Type Foo. Bar. Typel 404、Type Foo. Bar.Type2 406、和Type Foo. Bar. Type3 408。雖然用三個(gè)條目進(jìn)行了說(shuō)明,但應(yīng)領(lǐng)會(huì)和理解的是在不背離所要求保護(hù)的主題的精神的情況下任何合適數(shù)量的描述、以及各類型的描述都可以包含在Foo.1dl 402中。例如,類型可以包括類、接口、方法、性質(zhì)、事件等的描述。在此示例中,類型404、406和406被描述成包含在“Foo. Bar”的層次命名空間中。圖4還不出了第二描述語(yǔ)言文件,Bar.1dl 410。類似于Foo.1dl 402, Bar.1dl410代表描述語(yǔ)言文件,該描述語(yǔ)言文件包括三種類型Type Foo. Bar. Type4 412、TypeFoo. Quux. Typel 414、和 Type Foo. Quux. Type2 416。參照 Type412、414和 416 的語(yǔ)法,Bar.1dl 410在命名空間“Foo. Bar”中包含至少一個(gè)類型,在命名空間“Foo. Quux”中包含至少兩個(gè)類型。Foo. metadata 418代表至少部分地基于Foo.1dl 402的機(jī)器可讀的元數(shù)據(jù)文件。雖然未示出,但在一些實(shí)施例中,可以由編譯器從Foo.1dl 402中生成Foo. metadata 418。類似于Foo.1dl 402, Foo. metadata 418包括對(duì)采用由元數(shù)據(jù)文件產(chǎn)生的格式的類型Foo.Bar. Typel420>Foo. Bar. Type2 422、和 Foo. Bar. Type3 424 的描述。Bar. metadata 426 還代表機(jī)器可讀元數(shù)據(jù)文件,該機(jī)器可讀元數(shù)據(jù)文件至少部分地基于Bar.1dl 410。如Foo.metadata 418 的情況中,Bar. metadata 426 包括類型描述 Foo. Bar. Type4 428、Foo. Quux.Typel 430、和 Foo. Quux. Type3 432。圖4中包含的是合并模塊434。合并模塊434可以接收一個(gè)或多個(gè)輸入文件,并且轉(zhuǎn)而基于一組標(biāo)準(zhǔn)和/或規(guī)則生成一個(gè)或多個(gè)輸出文件。例如,可以把輸入命令和/或規(guī)則應(yīng)用于合并模塊434,合并模塊434指定一個(gè)輸入目錄以在其中搜索輸入的文件、一個(gè)輸出目錄以在其中放置輸出文件、應(yīng)用的驗(yàn)證級(jí)別、在什么級(jí)別的命名空間層次進(jìn)行合并和/或劃分、如何命名輸出文件、生成輸出文件的數(shù)量、應(yīng)生成什么深度的元數(shù)據(jù)文件等??梢砸匀魏魏线m的方式(諸如通過(guò)命令行和/或包含一個(gè)或多個(gè)規(guī)則的“生成文件”)向合并模塊434提供標(biāo)準(zhǔn)和/或規(guī)則。在此不例中,F(xiàn)oo. metadata 418和Bar. metadata 426是合并模塊434的輸入。合并模塊434解析輸入文件,并且按照指令生成一個(gè)或多個(gè)輸出文件。這里,合并模塊434生成兩個(gè)輸出文件Foo. Bar. metadata 436 和 Foo. Quux. metadata 438。Foo. Bar. metadata436 包括從屬于 “Foo. Bar” 命名空間(例如 Foo. Bar. Typel 440、Foo. Bar. Type2 442、Foo.Bar. Type3 444 和 Foo. Bar. Type446)的類型。類似地,F(xiàn)oo. Quux. metadata 438 包括從屬于“Foo. Quux” 命名空間(例如,F(xiàn)oo. Quux. Typel 448>Foo. Quux. Type2 450)的類型。正如在上述情況下的,F(xiàn)oo. Bar. metadata 436和Foo. Quux. metadata 438代表機(jī)器可讀兀數(shù)據(jù)文件,該機(jī)器可讀元數(shù)據(jù)文件可能包含來(lái)自相關(guān)輸入文件的經(jīng)重新組織和/或經(jīng)重新分組的數(shù)據(jù)。因此,合并模塊434可以根據(jù)一組標(biāo)準(zhǔn)來(lái)分析來(lái)自多個(gè)文件的內(nèi)容并重新構(gòu)成該內(nèi)容。在一些實(shí)施例中,文件命名約定可以被利用來(lái)實(shí)現(xiàn)抽象類型解析。例如,命名空間層次可以用作命名約定。在圖4中,文件Foo. Bar. metadata 436和Foo. Quux. metadata438在它們的文件名稱(例如分別“Foo. Bar”和“Foo. Quux”)中包括相關(guān)的命名空間層次。通過(guò)采用此命名約定,可以基于其相關(guān)的命名空間而不是特定的文件名來(lái)搜索類型信息??商娲鼗蚋郊拥兀敵鑫募梢园鄠€(gè)級(jí)別的命名空間層次數(shù)據(jù)。在圖4中,F(xiàn)oo. Bar.metadata 436被圖不為“Foo. Bar”命名空間中包含的數(shù)據(jù)。然而,F(xiàn)oo. Bar. metadata 436也可以配置成包含存在于“Foo. Bar.Ζ ^72·Ζ£^73”的命名空間層次級(jí)別中的類型信息。因此,命名約定表明可以包含在文件內(nèi)的最高級(jí)別的命名空間。另外,可以利用搜索算法(例如圖3中所描述)來(lái)穿過(guò)不同級(jí)別的層次命名空間(及相關(guān)的文件),直到適當(dāng)?shù)念愋捅欢ㄎ弧Mㄟ^(guò)使在相同命名空間層次級(jí)別中的所有類型信息存在于相同文件中,可以在不影響利用該信息的應(yīng)用程序的情況下使與特定級(jí)別相關(guān)的信息在各文件之間移動(dòng)??梢砸匀魏魏线m的方式來(lái)劃分與命名空間層次相關(guān)的信息。例如,多個(gè)層次級(jí)別可以存在于相同文件(例如Foo. Bar、Foo. Bar. LevelU和Foo. Bar. Leve12,均存在于名為“Foo. Bar. metadada ”的文件中)中,或者每個(gè)文件可以具有其自己的相關(guān)的文件(例如,處于Foo. Bar級(jí)別的信息存在于“Foo. Bar. metadata”中,處于Foo. Bar. Levell的信息存在于“Foo. ^ar. Level1. metadada”文件中等)。如果信息是根據(jù)其相關(guān)的命名空間層次來(lái)放置的,則可以通過(guò)去除對(duì)特定文件名稱的相關(guān)性來(lái)對(duì)類型解析進(jìn)行抽象。現(xiàn)在考慮圖5,圖中示出了描述根據(jù)一個(gè)或多個(gè)實(shí)施例的方法中的步驟的流程圖。該方法可以由任何合適的硬件、軟件、固件、或者其組合實(shí)施。至少在一些實(shí)施例中,該方法的各方面可以由在一個(gè)或多個(gè)計(jì)算裝置(如圖1a的合并模塊116)中執(zhí)行的一個(gè)或多個(gè)適當(dāng)配置的軟件模塊實(shí)施。步驟502接收與生成一個(gè)或多個(gè)輸出文件相關(guān)的一個(gè)或多個(gè)輸入標(biāo)準(zhǔn)。在一些實(shí)施例中,所述輸入標(biāo)準(zhǔn)可以包括規(guī)定如何把信息劃分成一個(gè)或多個(gè)輸出文件的一個(gè)或多個(gè)規(guī)則。例如,所述輸入標(biāo)準(zhǔn)可以指定一個(gè)或多個(gè)命名空間層次級(jí)別以一起組合到輸出文件中。可替代地或附加地,所述輸入標(biāo)準(zhǔn)可以描述在哪里找到信息,比如通過(guò)規(guī)定從哪個(gè)文件
和/或目錄中獲得信息。響應(yīng)于接收所述一個(gè)或多個(gè)輸入標(biāo)準(zhǔn),步驟504接收包含與一個(gè)或多個(gè)軟件接口相關(guān)的信息的一個(gè)或多個(gè)輸入文件。所述信息可以是任何合適類型的信息,比如對(duì)使用抽象類型系統(tǒng)的軟件接口的描述、面向?qū)ο蟮穆?lián)系、方法、性質(zhì)、函數(shù)指針、輸入和/或輸出參數(shù)、類型系統(tǒng)信息等。在一些實(shí)施例中,類型信息可以包括命名空間層次信息。響應(yīng)于接收一個(gè)或多個(gè)輸入文件,步驟506至少部分地基于該一個(gè)或多個(gè)輸入標(biāo)準(zhǔn)對(duì)信息進(jìn)行分析。這可以包括對(duì)一個(gè)或多個(gè)輸入文件進(jìn)行分析從而確定各文件內(nèi)存在什么命名空間層次類型信息。響應(yīng)于對(duì)信息的分析,步驟508生成至少一個(gè)包含所述信息的輸出文件。在一些實(shí)施例中,所述輸出文件可以包含已被劃分成不同文件的信息,這些文件至少部分地基于該輸入標(biāo)準(zhǔn)。輸出文件可以以任何合適的方式配置,其示例提供如上。例如,一個(gè)或多個(gè)輸出文件可以被配置成以命名約定來(lái)命名的元數(shù)據(jù)文件,該命名約定基于包含在該元數(shù)據(jù)文件中的命名空間層次。可替代地或附加地,一個(gè)或多個(gè)輸出文件可以被配置成包含多個(gè)級(jí)別的命名空間層次。通過(guò)把命名空間層次信息一同分組到輸出文件,應(yīng)用程序可以基于命名空間層次級(jí)別而不是特定的文件名來(lái)搜索信息。這使得在不影響應(yīng)用程序的情況下對(duì)信息進(jìn)行靈活劃分成為可能。只要應(yīng)用程序了解特定的類型存在于哪個(gè)命名空間層次級(jí)別中,相關(guān)的類型信息就可以被置于輸出文件中,而不管如何對(duì)命名空間層次級(jí)別進(jìn)行分組。上面已說(shuō)明了靈活的類型描述存儲(chǔ),現(xiàn)在對(duì)根據(jù)一個(gè)或多個(gè)實(shí)施例的示例系統(tǒng)進(jìn)行論述。示例系統(tǒng)
圖6示出了可以用于實(shí)施上述各種實(shí)施例的示例計(jì)算裝置600。例如,計(jì)算裝置600可以是圖1a和圖1b的計(jì)算裝置102a和/或102b或者任何其它合適的計(jì)算裝置。計(jì)算裝置600包括一個(gè)或多個(gè)處理器或處理單元602、一個(gè)或多個(gè)存儲(chǔ)器和/或存儲(chǔ)組件604、一個(gè)或多個(gè)輸入/輸出(I/O)裝置606、和使各種組件和裝置相互通信的總線608。總線608代表若干類型的總線結(jié)構(gòu)中任一類型的一個(gè)或多個(gè),其包括內(nèi)存總線或內(nèi)存控制器、外圍總線、圖形加速端口、以及處理器、或者采用多種總線結(jié)構(gòu)中的任何總線結(jié)構(gòu)的局部總線??偩€608可以包括有線總線和/或無(wú)線總線。存儲(chǔ)器/存儲(chǔ)組件604代表一個(gè)或多個(gè)計(jì)算機(jī)硬件存儲(chǔ)介質(zhì)。組件604可以包括易失性介質(zhì)(諸如,隨機(jī)存取存儲(chǔ)器(RAM))和/或非易失性介質(zhì)(諸如只讀存儲(chǔ)器(ROM)、閃速存儲(chǔ)器、光盤(pán)、磁盤(pán)等等)。組件604可以包括固定介質(zhì)(諸如,RAM、ROM、固定硬盤(pán)驅(qū)動(dòng)器等)以及可移動(dòng)介質(zhì)(例如,閃速存儲(chǔ)器驅(qū)動(dòng)器、移動(dòng)硬盤(pán)驅(qū)動(dòng)器、光盤(pán)等等)。一個(gè)或多個(gè)輸入/輸出裝置606允許用戶把命令和信息輸入至計(jì)算裝置600,并且還允許將信息提供給該用戶和/或其它組件或裝置。輸入裝置的例子包括鍵盤(pán)、光標(biāo)控制裝置(例如,鼠標(biāo))、傳聲器、掃描儀等等。輸出裝置的示例包括顯示裝置(例如,監(jiān)視器或投影儀)、揚(yáng)聲器、打印機(jī)、網(wǎng)卡,等等??梢栽谲浖虺绦蚰K的一般上下文中描述本文各種技術(shù)。一般來(lái)說(shuō),軟件包括執(zhí)行特定任務(wù)或者實(shí)施特定抽象數(shù)據(jù)類型的例行程序、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。這些模塊和技術(shù)的實(shí)施方式可以存儲(chǔ)在某種形式的計(jì)算機(jī)可讀介質(zhì)中或者通過(guò)其傳輸。計(jì)算機(jī)可讀介質(zhì)可以是可以被計(jì)算裝置訪問(wèn)的任何可用的媒介或介質(zhì)。通過(guò)示例而并非限制,計(jì)算機(jī)可讀介質(zhì)可以包括“計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)”?!坝?jì)算機(jī)可讀存儲(chǔ)介質(zhì)”包括以用于信息存儲(chǔ)的任何方法或技術(shù)實(shí)施的易失性和非易失性、可移動(dòng)和不可移動(dòng)硬件介質(zhì),諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊、或其它數(shù)據(jù)。計(jì)算機(jī)可讀硬件存儲(chǔ)介質(zhì)包括但不限于RAM、ROM、EEPR0M、閃速存儲(chǔ)器或者其它存儲(chǔ)技術(shù)、CD-ROM、數(shù)字多用途光盤(pán)(DVD)或其它光存儲(chǔ)器、磁帶盒、磁帶、磁盤(pán)存儲(chǔ)器或其它磁存儲(chǔ)裝置、或者可以用于存儲(chǔ)期望的信息并且可以被計(jì)算機(jī)訪問(wèn)的任何其它介質(zhì)。結(jié)論
各種實(shí)施例提供在多個(gè)類型系統(tǒng)之間對(duì)類型解析進(jìn)行抽象的能力。至少一個(gè)類型可以在一個(gè)或多個(gè)可編程訪問(wèn)文件中描述。在一些實(shí)施例中,采用不同類型系統(tǒng)的應(yīng)用程序可以在不了解類型的描述所在位置的情況下可編程地訪問(wèn)并且解析至少一個(gè)類型系統(tǒng)的類型。可替代地或附加地,至少部分地基于所述類型描述,可以對(duì)包含于一個(gè)或多個(gè)可編程訪問(wèn)文件中的類型描述進(jìn)行分析并且重新構(gòu)成一個(gè)或多個(gè)新的可編程訪問(wèn)的文件。盡管已以特定于結(jié)構(gòu)特征和/或方法學(xué)操作的語(yǔ)言描述該主題,但要理解的是所附權(quán)利要求中所定義的主題不必局限于上述具體特征或操作。相反,上述具體特征和操作是以實(shí)施權(quán)利要求的實(shí)例形式而公開(kāi)的。
權(quán)利要求
1.一種計(jì)算機(jī)實(shí)施的方法,包括 在多個(gè)文件中搜索(302)與正在被解析的類型相關(guān)的第一文件; 響應(yīng)于確定所述第一文件存在,發(fā)送(306)表明所述類型是命名空間的信息; 響應(yīng)于確定所述第一文件不存在,在所述多個(gè)文件中搜索(308)和與所述類型相關(guān)的第一命名空間級(jí)別層次相匹配的文件名; 響應(yīng)于確定和與所述類型相關(guān)的第一命名空間級(jí)別層次相匹配的文件名存在,處理(312)與所述文件名相關(guān)的文件以獲得與所述類型相關(guān)的信息; 響應(yīng)于確定和與所述類型相關(guān)的所述第一命名空間級(jí)別層次相匹配的所述文件名不存在,確定(322)是否存在另一個(gè)與所述類型相關(guān)的命名空間層次級(jí)別;以及 響應(yīng)于確定另一個(gè)命名空間層次級(jí)別存在,在所述多個(gè)文件中搜索(318)與所述另一個(gè)命名空間層次級(jí)別相關(guān)的文件名。
2.如權(quán)利要求1所述的計(jì)算機(jī)實(shí)施的方法,其中,在多個(gè)文件中搜索第一文件進(jìn)一步包括在所述多個(gè)文件搜索具有和與所述類型相關(guān)的名稱相匹配的文件名的文件。
3.如權(quán)利要求2所述的計(jì)算機(jī)實(shí)施的方法,其中,在多個(gè)文件中搜索第一文件進(jìn)一步包括在不了解所述類型所在位置的情況下,搜索所述第一文件。
4.如權(quán)利要求1所述的計(jì)算機(jī)實(shí)施的方法,其中,該方法是在無(wú)用戶介入的情況下執(zhí)行。
5.如權(quán)利要求1所述的計(jì)算機(jī)實(shí)施的方法,其中,所述多個(gè)文件包含元數(shù)據(jù)文件,其中單獨(dú)的元數(shù)據(jù)文件包含與操作系統(tǒng)軟件接口相關(guān)的描述。
6.如權(quán)利要求5所述的計(jì)算機(jī)實(shí)施的方法,其中,所述元數(shù)據(jù)文件被配置成對(duì)獨(dú)立于特定的編程語(yǔ)言的所述類型的描述。
7.一種計(jì)算機(jī)實(shí)施的方法,包括 在一個(gè)或多個(gè)元數(shù)據(jù)文件中搜索具有和與類型系統(tǒng)相關(guān)的類型的命名空間相匹配的文件名的文件; 響應(yīng)于確定所述文件存在,處理所述文件以獲得與所述類型相關(guān)的信息; 響應(yīng)于確定所述文件不存在,執(zhí)行至少一次 確定是否存在另一個(gè)與所述類型相關(guān)的命名空間層次級(jí)別以及響應(yīng)于確定另一個(gè)命名空間層次級(jí)別存在,在所述一個(gè)或多個(gè)元數(shù)據(jù)文件中搜索具有和所述另一個(gè)命名空間層次級(jí)別相匹配的文件名的文件; 所述至少一次的執(zhí)行響應(yīng)于如下情況終止 確定具有和所述另一個(gè)命名空間層次級(jí)別相匹配的文件名的所述文件存在;或者 確定另一個(gè)命名空間層次級(jí)別不存在。
8.如權(quán)利要求7所述的計(jì)算機(jī)實(shí)施的方法,其中,在所述一個(gè)或多個(gè)元數(shù)據(jù)文件中搜索具有和所述另一個(gè)命名空間層次級(jí)別相匹配的文件名的文件包括搜索和所述命名空間層次級(jí)別相匹配的部分文件名。
9.如權(quán)利要求7所述的計(jì)算機(jī)實(shí)施的方法,其中,與類型系統(tǒng)相關(guān)的所述類型包括與操作系統(tǒng)相關(guān)的應(yīng)用程序接口(API)。
10.如權(quán)利要求7所述的計(jì)算機(jī)實(shí)施的方法,其中,在所述一個(gè)或多個(gè)元數(shù)據(jù)文件中搜索具有和與類型系統(tǒng)相關(guān)的類型的命名空間相匹配的文件名的文件進(jìn)一步包括在不了解所述類型所存在位置的情況下進(jìn)行搜索。
11.一種或多種其上存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)媒體,所述指令當(dāng)由計(jì)算設(shè)備執(zhí)行時(shí),使得所述計(jì)算設(shè)備實(shí)現(xiàn)如權(quán)利要求1 一 10中的任一個(gè)所述的方法。
全文摘要
各種實(shí)施例提供了在多個(gè)類型系統(tǒng)之間對(duì)類型解析進(jìn)行抽象的能力。至少一種類型可以在一個(gè)或多個(gè)可編程訪問(wèn)文件中描述。在一些實(shí)施例中,使用不同類型系統(tǒng)的應(yīng)用程序可以在不了解類型的描述所在位置的情況下,可編程地訪問(wèn)并解析至少一個(gè)類型系統(tǒng)的類型。可替代地或附加地,至少部分地基于所述類型描述,可以對(duì)包含在一個(gè)或多個(gè)可編程訪問(wèn)文件中的類型描述進(jìn)行分析,并且將其重新構(gòu)成一個(gè)或多個(gè)新的可編程訪問(wèn)文件。
文檔編號(hào)G06F9/45GK103049299SQ20121033165
公開(kāi)日2013年4月17日 申請(qǐng)日期2012年9月10日 優(yōu)先權(quán)日2011年9月10日
發(fā)明者L.W.奧斯特曼, H.L.皮爾森, E.H.奧米亞, M.S.洛弗爾, M.普拉克里亞, S.C.羅維, T.H.巴蘇, R.A.弗羅達(dá)茨克, 曾煒, N.N.沃瓦, S.I.索爾卡, M.阿克西安金 申請(qǐng)人:微軟公司