專利名稱:用元數(shù)據(jù)描述操作系統(tǒng)的本機(jī)應(yīng)用編程接口的制作方法
用元數(shù)據(jù)描述操作系統(tǒng)的本機(jī)應(yīng)用編程接口
背景技術(shù):
操作系統(tǒng)典型地具有幾個(gè)應(yīng)用編程接口,這些應(yīng)用編程接口允許應(yīng)用訪問(wèn)由操作系統(tǒng)支持的功能性。這樣的API典型地由操作系統(tǒng)通過(guò)使用某種計(jì)算機(jī)編程語(yǔ)言中的命名文件或?qū)ο蠖灰?guī)定。例如,C編程語(yǔ)言使用可能具有諸如“interface, h”那樣的名字的首標(biāo)文件。同樣地,在C#中,稱為“P/Invoke”簽名的機(jī)制被使用來(lái)訪問(wèn)操作系統(tǒng)API。編寫將利用操作系統(tǒng)API的計(jì)算機(jī)程序的人典型地在程序中包括對(duì)命名的API文件或?qū)ο蟮囊?,或使用由編程語(yǔ)言提供的另一種機(jī)制。該程序于是例如包括按照由該API使用的語(yǔ)法的、對(duì)由該API定義的函數(shù)的調(diào)用(call)。以這種方式定義的API不能由與它們被編寫的語(yǔ)言不同的語(yǔ)言直接訪問(wèn)。為了使得用其他語(yǔ)言編寫的程序可訪問(wèn)API,API被“包裝(wrap)”。這種包裝典型地必須按API和按語(yǔ)言來(lái)人工地完成,并需要深入理解目標(biāo)語(yǔ)言和API以及操作系統(tǒng)。因此,許多操作系統(tǒng)API是無(wú)法使用的。
發(fā)明內(nèi)容
本概要被提供來(lái)以簡(jiǎn)化的形式介紹概念的選擇,這些概念在下面的詳細(xì)說(shuō)明中被進(jìn)一步描述。本概要既不打算確認(rèn)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不打算被使用來(lái)限制所要求保護(hù)的主題的范圍。本機(jī)操作系統(tǒng)應(yīng)用編程接口(API)是通過(guò)使用元數(shù)據(jù)進(jìn)行描述的,且這樣的描述被以標(biāo)準(zhǔn)文件格式存儲(chǔ)在已知的位置。通過(guò)存儲(chǔ)使用這樣的元數(shù)據(jù)的API定義,其它應(yīng)用可以容易地識(shí)別和使用API。為了創(chuàng)建這樣的API表示,在開(kāi)發(fā)期間,開(kāi)發(fā)者描述API的形態(tài)(shape),包括(但不限于)由API定義的類、接口、方法、屬性、事件、參數(shù)、結(jié)構(gòu)和枚舉的類型。這個(gè)API描述通過(guò)用來(lái)生成機(jī)器可讀的元數(shù)據(jù)文件的工具進(jìn)行處理的。機(jī)器可讀的元數(shù)據(jù)文件包含與API描述相同的信息,然而在格式上被設(shè)計(jì)成是機(jī)器讀取的而不是人創(chuàng)作的。例如,這種機(jī)器可讀的元數(shù)據(jù)文件可以以ECMA-335 CLI格式被存儲(chǔ)。當(dāng)操作系統(tǒng)被構(gòu)建時(shí),所有的個(gè)體的API描述都被編譯成一個(gè)個(gè)元數(shù)據(jù)文件。這些元數(shù)據(jù)文件被組合在一起,以提供關(guān)于在系統(tǒng)內(nèi)可用的所有API的全面的信息。這個(gè)組合的元數(shù)據(jù)被包括在操作系統(tǒng)映像(即,編譯的二進(jìn)制文件)中,以用于安裝。例如,組合的系統(tǒng)元數(shù)據(jù)可以以ECMA-335 CLI格式被存儲(chǔ)在一連串的元數(shù)據(jù)文件中,但具體的格式對(duì)于本發(fā)明是不重要的。這樣,操作系統(tǒng)和它的API是自描述的。通過(guò)具有這樣的操作系統(tǒng),即用于其的API是用與編程語(yǔ)言無(wú)關(guān)的元數(shù)據(jù)充分描述的,有可能構(gòu)建語(yǔ)言投射(projection),它是讀取元數(shù)據(jù)并以另一種編程語(yǔ)言實(shí)現(xiàn)API的應(yīng)用。例如,JavaScript解釋器可包括這樣的語(yǔ)言投射,并自動(dòng)提供由JavaScript程序?qū)Σ僮飨到y(tǒng)API的訪問(wèn)。按照編譯語(yǔ)言的程序可由包括這樣的語(yǔ)言投射的編譯器提供類似的訪問(wèn)。如果在后來(lái)的版本中,操作系統(tǒng)添加了新的API,則與該新版本一起分發(fā)的元數(shù)據(jù)使得應(yīng)用能夠立即利用新的功能性,而不用修改解釋器或編譯器。
因此,一方面,計(jì)算機(jī)的操作系統(tǒng)包括被存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)媒體上的計(jì)算機(jī)程序指令,在其被處理設(shè)備處理時(shí),指令處理器執(zhí)行實(shí)現(xiàn)操作系統(tǒng)的操作。操作系統(tǒng)具有可由應(yīng)用程序訪問(wèn)的一個(gè)或多個(gè)應(yīng)用編程接口,用于為應(yīng)用程序提供對(duì)由操作系統(tǒng)所實(shí)現(xiàn)的功能性的訪問(wèn)。元數(shù)據(jù)文件以機(jī)器可讀的與編程語(yǔ)言無(wú)關(guān)的格式描述應(yīng)用編程接口的命名的元素。命名的元素可以是或者包括各種各樣的數(shù)據(jù)類型中的任何數(shù)據(jù)類型,諸如基本類型、枚舉的類型、結(jié)構(gòu)、委托(delegate)、接口、類、方法、屬性和事件。元數(shù)據(jù)文件可包括對(duì)于應(yīng)用編程接口的每個(gè)命名的元素的、位于名字空間中的標(biāo)識(shí)符(或類型名稱)。在以下的說(shuō)明中,參考了形成本說(shuō)明的一部分的附圖,且在圖上,作為舉例說(shuō)明,顯示了本技術(shù)的具體的示例性實(shí)現(xiàn)。應(yīng)當(dāng)理解,可以利用其它實(shí)施例以及可以做出結(jié)構(gòu)的改變而不背離本公開(kāi)內(nèi)容的范圍。
圖I是具有描述應(yīng)用編程接口的元數(shù)據(jù)的示例性操作系統(tǒng)的框圖。
圖2是數(shù)據(jù)流程圖,其圖示用于構(gòu)建具有描述應(yīng)用編程接口的元數(shù)據(jù)的操作系統(tǒng)的開(kāi)發(fā)工具的示例性實(shí)現(xiàn)。圖3是圖示API描述文件可以如何被處理來(lái)生成元數(shù)據(jù)的例子的流程圖。圖4是可以在其中實(shí)施這樣的系統(tǒng)的示例性計(jì)算設(shè)備的框圖。
具體實(shí)施例方式下面的段落提供在其中可以實(shí)施這樣的操作系統(tǒng)的示例性操作環(huán)境。參照?qǐng)D1,計(jì)算機(jī)系統(tǒng)100包括操作系統(tǒng)102,它與計(jì)算機(jī)硬件(見(jiàn)圖4)相組合,提供在其上運(yùn)行各種應(yīng)用104的平臺(tái)。應(yīng)用作為由操作系統(tǒng)管理的進(jìn)程被運(yùn)行,它們消耗或者以別的方式可以訪問(wèn)由操作系統(tǒng)管理的計(jì)算機(jī)系統(tǒng)的資源,諸如文件等等。操作系統(tǒng)提供被應(yīng)用104訪問(wèn)的幾個(gè)應(yīng)用編程接口 106。這些API 106用一個(gè)或多個(gè)元數(shù)據(jù)文件108進(jìn)行描述。元數(shù)據(jù)文件108是操作系統(tǒng)的API或API們的、機(jī)器可讀的、與編程語(yǔ)言無(wú)關(guān)的表示。正如下面描述的,這樣的元數(shù)據(jù)文件可以從API描述文件被自動(dòng)創(chuàng)建,因此允許自動(dòng)生成操作系統(tǒng)的表面(surface)的,或全部API的、機(jī)器可讀的、與編程語(yǔ)言無(wú)關(guān)的描述。與語(yǔ)言編譯器和/或解釋器(未示出)相組合,這樣的元數(shù)據(jù)文件允許應(yīng)用104以這樣的方式被開(kāi)發(fā),即其中操作系統(tǒng)API被以自然和自動(dòng)的方式投射到編程語(yǔ)言。在假設(shè)這個(gè)上下文后,將結(jié)合圖2和3更詳細(xì)地描述這樣的操作系統(tǒng)的示例性實(shí)現(xiàn)。在圖2上,顯示了用于應(yīng)用開(kāi)發(fā)的示例性數(shù)據(jù)流。應(yīng)用編程接口描述文件200由開(kāi)發(fā)者在開(kāi)發(fā)過(guò)程一即編寫實(shí)現(xiàn)操作系統(tǒng)的代碼的過(guò)程一期間進(jìn)行定義。被使用來(lái)把用于操作系統(tǒng)的代碼編譯成要被安裝到計(jì)算機(jī)系統(tǒng)上的可執(zhí)行文件的構(gòu)建工具202處理API描述文件,以生成元數(shù)據(jù)文件204。最后,構(gòu)建工具202把元數(shù)據(jù)文件204組合成經(jīng)組合的元數(shù)據(jù)文件206。構(gòu)建工具202的任何實(shí)現(xiàn)均依賴于編程語(yǔ)言和用于該API描述文件200的任何規(guī)范。這樣的API描述文件200可以定義是函數(shù)或?qū)ο箢惢驍?shù)據(jù)結(jié)構(gòu)的接口,以及可以定義用于這樣的接口的一個(gè)或多個(gè)方法、事件、屬性、參數(shù)、數(shù)據(jù)類型、參數(shù)排序、異常(exception)等等。構(gòu)建工具解析這樣的API描述文件,識(shí)別接口的特性,以及把表示這樣的特性的數(shù)據(jù)以機(jī)器可讀的、與編程語(yǔ)言無(wú)關(guān)的格式存儲(chǔ)在元數(shù)據(jù)文件中。圖3圖示由構(gòu)建工具執(zhí)行的一般的示例性過(guò)程。構(gòu)建工具訪問(wèn)300 API描述文件。它處理302該API描述文件,識(shí)別API的命名的元素,諸如類、方法、數(shù)據(jù)類型、屬性、事件、異常等等。識(shí)別的命名元素被映射304到它的元數(shù)據(jù)表示。這個(gè)元數(shù)據(jù)表示被存儲(chǔ)306在對(duì)應(yīng)于該API描述文件的元數(shù)據(jù)文件中。直至該API描述文件被完全處理(如在308中確定的),才重復(fù)進(jìn)行步驟302到308。在處理該API描述文件后,另一個(gè)API描述文件(如果有的話,如在310處確定的)被訪問(wèn)300,并且對(duì)于該文件來(lái)重復(fù)進(jìn)行步驟302到308。當(dāng)所有的API描述文件的處理均完成時(shí),于是創(chuàng)建312復(fù)合的元數(shù)據(jù)文件。例如,經(jīng)組合的系統(tǒng)元數(shù)據(jù)可以以ECMA-335 CLI格式被存儲(chǔ)在一連串的元數(shù)據(jù)文件中,但具體的格式對(duì)于本發(fā)明是不重要的。這個(gè)經(jīng)組合的元數(shù)據(jù)文件因此提供操作系統(tǒng)的表面一一即可用的接口的一一完全的、自動(dòng)的、與編程語(yǔ)言無(wú)關(guān)的描述。
現(xiàn)在將描述可以在步驟304中使用的示例性映射。應(yīng)當(dāng)理解,就元數(shù)據(jù)的形式和結(jié)構(gòu)均被使用來(lái)表示API中的命名元素來(lái)說(shuō),其它的映射也是可能的。在本示例性實(shí)現(xiàn)中,把API描述文件映射到元數(shù)據(jù)牽涉到首先識(shí)別API描述文件中的命名的元素。命名的元素可以是或者包括各種各樣的數(shù)據(jù)類型的任何數(shù)據(jù)類型,諸如基本類型、枚舉的類型、結(jié)構(gòu)、委托、接口、類、方法、屬性和事件。元數(shù)據(jù)文件可包括對(duì)于應(yīng)用編程接口的每個(gè)命名的元素的、位于名字空間中的標(biāo)識(shí)符(或類型名稱)。在這個(gè)實(shí)現(xiàn)中,每個(gè)命名的元素可以是或者可以包括各種各樣的數(shù)據(jù)類型的任何數(shù)據(jù)類型,以及具有位于名字空間內(nèi)的標(biāo)識(shí)符。兩個(gè)命名的元素可以具有相同的標(biāo)識(shí)符,只要它們存在于分開(kāi)的名字空間中即可。當(dāng)規(guī)定API的API文件在諸如參數(shù)或結(jié)構(gòu)體字段中使用命名的元素時(shí),文件的作者可以使用完全受名字空間限制(namespace-qualified)的名稱或短的標(biāo)識(shí)符。如果使用短的標(biāo)識(shí)符,則通過(guò)把短的標(biāo)識(shí)符附加到當(dāng)前的名字空間范圍而在元數(shù)據(jù)中使用完全受名字空間限制的名稱。通過(guò)使用這種機(jī)制,在元數(shù)據(jù)中,名稱決不會(huì)有歧義。名字空間塊可以在元數(shù)據(jù)中被使用,且這些塊可以被嵌套,以避免在該塊內(nèi)每個(gè)命名的元素上明確地聲明該名字空間。命名的元素可以用性質(zhì)來(lái)加標(biāo)簽。示例性性質(zhì)包括,但不限于,版本號(hào)、簡(jiǎn)單的標(biāo)志,或者它們可以在參數(shù)中包含附加信息?,F(xiàn)在轉(zhuǎn)向示例性表示細(xì)節(jié),是基本類型的命名的元素可以用符合該基本類型的關(guān)鍵字、后跟在API描述文件中使用的標(biāo)識(shí)符來(lái)表示,所述關(guān)鍵字諸如是布爾(Boolean)、字節(jié)、雙、浮點(diǎn)、整型、長(zhǎng)、短、字符、字符串、guid、句柄、錯(cuò)誤狀態(tài)等等。例如,表示被稱為“回答,,的值的布爾值將被表示為
“Boolean Answer (布爾回答)”
數(shù)組的示例性表示如下。它具有關(guān)鍵字(諸如“array)、后跟標(biāo)識(shí)符的一般形式。這后面跟隨的是作為指針的值和數(shù)組中元素的數(shù)量的對(duì)。例如array [identifier]
{
[pointer]
[number of elements]}
枚舉的類型(“Enum”)的示例性表示如下。首先,它具有標(biāo)識(shí)枚舉的類型的關(guān)鍵字“enum”、后跟標(biāo)識(shí)符的一般形式。標(biāo)識(shí)符后面跟隨的是枚舉值的集合。像所有的類型一樣,enum標(biāo)識(shí)符在它們被包含在的名字空間內(nèi)是唯一的。然而,enum值標(biāo)識(shí)符可以僅僅在enum本身內(nèi)是唯一的。enum [identifier]
{
[value I identifier] [optional: = value],...
[value n identifier] [optional: = value]
}
作為例子,使用撲克牌的排列(ranking) enum CardRank
{
Ace=I,
2,3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King
}
簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)類型(“struCt(結(jié)構(gòu)體)”)的示例性表示如下。首先,它具有結(jié)構(gòu)類型說(shuō)明符、后跟字段集合的一般形式,每個(gè)字段具有類型和標(biāo)識(shí)符。像所有的類型一樣,struct標(biāo)識(shí)符在它們被包含在的名字空間內(nèi)是唯一的。然而,struct字段標(biāo)識(shí)符可以僅僅在struct本身內(nèi)是唯一的。
[version ([version number])]struct [struct, identifier]
{
[field[l] type] [field[l] identifier];
[field[n] type] [field[n] identifier];
};
作為對(duì)于鼠標(biāo)事件的自變量的結(jié)構(gòu)體的具體例子
[version (OS. version, number)] struct MouseEventArgs
{
MouseButtons Buttons; unsigned int Clicks; unsigned int Delta;
Point Location;
}
接口的示例性表示是方法、屬性或事件的集合。方法的實(shí)現(xiàn)可以在實(shí)現(xiàn)該接口的類中完成。除了共同的性質(zhì)(attribute)以外,接口使用要被規(guī)定的UUID性質(zhì)。接口可以“需要”另一個(gè)接口。這意味著如果構(gòu)件實(shí)施給定的接口,則所有的“需要的”接口也由同一個(gè)構(gòu)件實(shí)施。用于表示接口的示例性語(yǔ)法如下interface:
I attributes "interface" IDENTIFIER ’ ’ IDENTIFER requires ’ {’interface—member—list’} ’requires:
I <empty)
I 〃requires〃 interface」istinterface—list:
I IDENTIFIER
I IDENTIFIER 〃,〃 interface—listinterface—member_list:
I <empty)
I interface—member
I interface—member interface—member_listinterface—member:
I method I property I event
在本示例性實(shí)現(xiàn)中,在接口的表示的結(jié)尾處是方法、屬性和/或事件。在這個(gè)例子中,接口可包含取得零個(gè)或更多個(gè)參數(shù)并返回單個(gè)類型的方法。方法的返回類型是HRESULT。參數(shù)具有名稱和類型。參數(shù)用[in (入)]或[out (出)]性質(zhì)被標(biāo)記??梢杂腥魏螖?shù)量的輸入和輸出參數(shù)。對(duì)于所有的RIDL-支持的指針類型,參數(shù)可以被標(biāo)記為既輸入又輸出。對(duì)于把HRESULT返回值映射到異常事件的語(yǔ)言,單個(gè)輸出參數(shù)可以任選地用[retval]標(biāo)記。在接口內(nèi)的方法名稱是唯一的。同樣在這個(gè)示例性實(shí)現(xiàn)中,可以出現(xiàn)類似于字段的屬性,但所述屬性與被使用來(lái)訪問(wèn)它們的放置(put)和得到(get)操作的輸入和輸出參數(shù)相關(guān)聯(lián)。接口支持事件,一種用于接口的當(dāng)感興趣的某些事情發(fā)生時(shí)通知感興趣的各方的機(jī)制。所述表示包括添加方法的規(guī)范和去除方法的規(guī)范。添加方法具有作為事件委托類型的輸入?yún)?shù)的第一參數(shù)和作為類型EventRegistrationToken的輸出參數(shù)的第二參數(shù)。去除方法具有作為類型EventRegistrationToken的輸入?yún)?shù)的第一參數(shù)。用于事件的事件委托類型本身具有作為到事件源一一即發(fā)送這個(gè)事件的對(duì)象一一的接口指針的第一參數(shù)。以下是顯示委托類型MouseEventHandler可以如何被使用來(lái)聲明接口事件的例子。
[eventadd] HRESULT MouseMove(
[in] MouseEventHandler *pMouse,
[out] EventRegistrationToken木 token);
[eventremove] HRESULT MouseMove(
[in] EventRegistrationToken token)。 委托可以被表示為帶有其簽名匹配于委托規(guī)范的簽名的單個(gè)方法啟用(Invoke)的接口。該方法具有單個(gè)返回類型以及零個(gè)或更多個(gè)參數(shù)。委托的返回類型是HRESULT。參數(shù)具有名稱和類型。參數(shù)被標(biāo)記為輸入或輸出??梢杂腥我鈹?shù)量的輸入和輸出參數(shù)。對(duì)于把HRESULT返回值映射到異常事件的語(yǔ)言,單個(gè)輸出參數(shù)可以任選地被標(biāo)記為返回值。用于表示委托的示例性語(yǔ)法如下delegate:
delegate_attributes "delegate" TYPE_IDENTIFIER IDENTIFIER ’ (’parameter」ist ;’
應(yīng)當(dāng)理解,前文僅僅是API的元素可以如何在與編程語(yǔ)言無(wú)關(guān)的元數(shù)據(jù)中被表示的例子??梢允褂酶鞣N各樣的元數(shù)據(jù)表示。通過(guò)具有這樣的操作系統(tǒng),即用于其的API是用與編程語(yǔ)言無(wú)關(guān)的元數(shù)據(jù)充分描述的,有可能構(gòu)建語(yǔ)言投射,它是讀取元數(shù)據(jù)并以另一種編程語(yǔ)言實(shí)現(xiàn)API的應(yīng)用。例如,JavaScript解釋器可包括這樣的語(yǔ)言投射,并自動(dòng)提供由JavaScript程序?qū)Σ僮飨到y(tǒng)API的訪問(wèn)。按照編譯語(yǔ)言的程序可以由包括這樣的語(yǔ)言投射的編譯器來(lái)提供類似的訪問(wèn)。在目前描述了示例性實(shí)現(xiàn)后,現(xiàn)在將描述這樣的系統(tǒng)被設(shè)計(jì)來(lái)在其中操作的示例 性計(jì)算環(huán)境。以下的說(shuō)明打算提供其中可以實(shí)施這種系統(tǒng)的適用的計(jì)算環(huán)境的概略的、一般的描述。所述系統(tǒng)可以通過(guò)許多通用或?qū)S玫挠?jì)算硬件配置被實(shí)施??梢赃m用的熟知的計(jì)算設(shè)備的例子包括,但不限于,個(gè)人計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持或膝上型設(shè)備(例如,媒體播放器、筆記本電腦、蜂窩電話、個(gè)人數(shù)據(jù)助理、錄音機(jī))、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、機(jī)頂盒、游戲控制臺(tái)、可編程消費(fèi)電子裝置、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、包括任何的上述系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。圖4圖示適用的計(jì)算系統(tǒng)環(huán)境的例子。該計(jì)算系統(tǒng)環(huán)境僅僅是適用的計(jì)算環(huán)境的一個(gè)例子,且不打算用來(lái)對(duì)這樣的計(jì)算環(huán)境的使用或功能性的范圍提出任何限制。該計(jì)算環(huán)境不應(yīng)當(dāng)被解釋為具有涉及在示例性操作環(huán)境中圖示的任一部件或部件組合的依賴性或要求。參照?qǐng)D4,示例性計(jì)算環(huán)境包括計(jì)算機(jī)器,諸如計(jì)算機(jī)器400。在它的最基本的配置中,計(jì)算機(jī)器400典型地包括至少一個(gè)處理單元402和存儲(chǔ)器404。該計(jì)算設(shè)備可包括多個(gè)處理單元和/或附加的共同處理單元,諸如圖形處理單元420。取決于計(jì)算設(shè)備的確切配置和類型,存儲(chǔ)器404可以是易失性(諸如RAM)、非易失性(諸如ROM、閃存等等)或這二者的某種組合。這種最基本的配置在圖4上用虛線406圖示。另外,計(jì)算機(jī)器400還可以具有附加的特征/功能性。例如,計(jì)算機(jī)器400還可以包括附加的存儲(chǔ)裝置(可拆卸的和/或非可拆卸的),包括,但不限于,磁盤或光盤或磁帶。這樣的附加的存儲(chǔ)裝置在圖4上用可拆卸的存儲(chǔ)裝置408和非可拆卸的存儲(chǔ)裝置410圖示。計(jì)算機(jī)存儲(chǔ)媒體包括以任何方法或技術(shù)實(shí)施的、用于存儲(chǔ)諸如計(jì)算機(jī)程序指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)那樣的信息的易失性和非易失性的、可拆卸和非可拆卸的媒體。存儲(chǔ)器404、可拆卸的存儲(chǔ)裝置408和非可拆卸的存儲(chǔ)裝置410都是計(jì)算機(jī)存儲(chǔ)媒體的例子。計(jì)算機(jī)存儲(chǔ)媒體包括,但不限于,RAM、R0M、EEPR0M、閃存或其它存儲(chǔ)器技術(shù)、⑶-ROM、數(shù)字多功能盤(DVD)或其它光學(xué)存儲(chǔ)裝置、盒式磁帶、磁帶、磁盤存儲(chǔ)裝置或其他磁存儲(chǔ)設(shè)備、或可被使用來(lái)存儲(chǔ)想要的信息并可以由計(jì)算機(jī)器400訪問(wèn)的任何其它介質(zhì)。任何這樣的計(jì)算機(jī)存儲(chǔ)媒體可以是計(jì)算機(jī)器400的一部分。計(jì)算機(jī)器400還可以包含通信連接412,其允許所述設(shè)備與其它設(shè)備通信。通信連接412是通信媒體的例子。通信媒體典型地以諸如載波或其它輸送機(jī)制那樣的調(diào)制的數(shù)據(jù)信號(hào)承載計(jì)算機(jī)程序指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并且通信媒體包括任何信息傳遞媒體。術(shù)語(yǔ)“調(diào)制的數(shù)據(jù)信號(hào)”是指這樣的信號(hào),即該信號(hào)使它的特性中的一個(gè)或多個(gè)以這樣的方式被設(shè)置或改變使得將信息編碼在信號(hào)中,由此改變信號(hào)的接收設(shè)備的配置或狀態(tài)。作為例子,而不是限制,通信媒體包括有線媒體,諸如有線網(wǎng)或直接連線的連接,以及包括無(wú)線媒體,諸如聲學(xué)、RF、紅外和其它無(wú)線媒體。計(jì)算機(jī)器400可以具有各種輸入設(shè)備414,諸如顯示器、鍵盤、鼠標(biāo)、筆、照相機(jī)、觸摸輸入設(shè)備等等。還可以包括輸出設(shè)備416,諸如揚(yáng)聲器、打印機(jī)等等。所有的這些設(shè)備在本領(lǐng)域都是熟知的,在這里不需要詳 細(xì)討論。這樣的具有描述應(yīng)用編程接口的元數(shù)據(jù)的操作系統(tǒng)可以在軟件的一般上下文中被實(shí)施,所述軟件包括由計(jì)算機(jī)器處理的計(jì)算機(jī)可執(zhí)行的指令和/或計(jì)算機(jī)解釋的指令,諸如程序模塊。通常,程序模塊包括例行程序、程序、對(duì)象、構(gòu)件、數(shù)據(jù)結(jié)構(gòu)等等,它們?cè)诒惶幚韱卧幚頃r(shí)指令處理單元執(zhí)行特定的任務(wù)或?qū)嵤┨囟ǖ某橄髷?shù)據(jù)類型。本系統(tǒng)可以在分布式計(jì)算環(huán)境下被實(shí)踐,其中任務(wù)是由通過(guò)通信網(wǎng)鏈接的遠(yuǎn)程處理設(shè)備執(zhí)行的。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲(chǔ)器存儲(chǔ)設(shè)備的本地和遠(yuǎn)端計(jì)算機(jī)存儲(chǔ)媒體中。在所附權(quán)利要求的前序中的術(shù)語(yǔ)“制造品”、“過(guò)程”、“機(jī)器”、和“事物的組成”打算用來(lái)把權(quán)利要求限制到這樣的主題,即所述主題被認(rèn)為屬于由35 U.S.C. §101中的這些術(shù)語(yǔ)定義的可專利主題的范圍內(nèi)。這里描述的任何的或所有的前述替換實(shí)施例可以以想要的任何組合被使用來(lái)形成另外的混合實(shí)施例。應(yīng)當(dāng)理解,在所附權(quán)利要求中定義的主題不必限于上述的特定實(shí)現(xiàn)。上述的特定實(shí)現(xiàn)僅僅作為例子被公開(kāi)。
權(quán)利要求
1.一種計(jì)算機(jī)器,包括 處理器(402); 一個(gè)或多個(gè)計(jì)算機(jī)存儲(chǔ)媒體(408,410,404); 被存儲(chǔ)在計(jì)算機(jī)存儲(chǔ)媒體中的計(jì)算機(jī)程序指令,當(dāng)其被處理器處理時(shí),指令處理器執(zhí)行操作,其中該指令包括提供操作系統(tǒng)(102)的操作,應(yīng)用通過(guò)該操作系統(tǒng)(102)來(lái)訪問(wèn)計(jì)算機(jī)器的資源,其中該操作系統(tǒng)提供 應(yīng)用程序(104)可訪問(wèn)的一個(gè)或多個(gè)應(yīng)用編程接口( 106),用于為應(yīng)用程序提供對(duì)由操作系統(tǒng)實(shí)施的功能性的訪問(wèn);以及 其中所述應(yīng)用編程接口中的每個(gè)應(yīng)用編程接口具有相關(guān)聯(lián)的元數(shù)據(jù)文件(108),其中該元數(shù)據(jù)文件以機(jī)器可讀的與編程語(yǔ)言無(wú)關(guān)的格式描述應(yīng)用編程接口的元素。
2.權(quán)利要求I的計(jì)算機(jī)器,其中所述元數(shù)據(jù)文件包括對(duì)于應(yīng)用編程接口的命名的元素的、位于名字空間中的標(biāo)識(shí)符。
3.權(quán)利要求2的計(jì)算機(jī)器,其中命名的元素可以是一組基本數(shù)據(jù)類型中的一個(gè)。
4.權(quán)利要求3的計(jì)算機(jī)器,其中命名的元素還可以是接口、方法、屬性和事件中的一個(gè)。
5.權(quán)利要求3的計(jì)算機(jī)器,其中命名的元素還可以是數(shù)據(jù)結(jié)構(gòu)、枚舉的類型和數(shù)組中的一個(gè)。
6.一種計(jì)算機(jī)實(shí)施的過(guò)程,包括 接收數(shù)據(jù)文件,該數(shù)據(jù)文件定義用于為應(yīng)用程序提供對(duì)由操作系統(tǒng)實(shí)施的功能性的訪問(wèn)的應(yīng)用編程接口 ;和 為應(yīng)用編程接口生成相關(guān)聯(lián)的元數(shù)據(jù)文件,其中元數(shù)據(jù)文件以機(jī)器可讀的與編程語(yǔ)言無(wú)關(guān)的格式描述應(yīng)用編程接口的元素;以及 存儲(chǔ)所述元數(shù)據(jù)文件作為操作系統(tǒng)的一部分。
7.權(quán)利要求6的計(jì)算機(jī)實(shí)施的過(guò)程,其中所述元數(shù)據(jù)文件包括對(duì)于應(yīng)用編程接口的命名的元素的、位于名字空間中的標(biāo)識(shí)符。
8.權(quán)利要求7的計(jì)算機(jī)實(shí)施的過(guò)程,其中命名的元素可以是一組基本數(shù)據(jù)類型中的一個(gè)。
9.權(quán)利要求8的計(jì)算機(jī)實(shí)施的過(guò)程,其中命名的元素還可以是接口、方法、屬性和事件中的一個(gè)。
10.權(quán)利要求8的計(jì)算機(jī)實(shí)施的過(guò)程,其中命名的元素還可以是數(shù)據(jù)結(jié)構(gòu)。
全文摘要
本機(jī)操作系統(tǒng)應(yīng)用編程接口(API)被使用元數(shù)據(jù)描述,且這樣的描述被以標(biāo)準(zhǔn)文件格式存儲(chǔ)在已知的位置中。通過(guò)存儲(chǔ)使用這樣的元數(shù)據(jù)的API定義,其它應(yīng)用可以容易地識(shí)別和使用API。為了創(chuàng)建這樣的API表示,在開(kāi)發(fā)期間,開(kāi)發(fā)者描述API的形態(tài),包括(但不限于)由API定義的類、接口、方法、屬性、事件、參數(shù)、結(jié)構(gòu)和枚舉的類型。這個(gè)API描述通過(guò)用來(lái)生成機(jī)器可讀的元數(shù)據(jù)文件的工具進(jìn)行處理。所述機(jī)器可讀的元數(shù)據(jù)文件包含與API描述相同的信息,然而在格式上被設(shè)計(jì)成是機(jī)器讀取的而不是人創(chuàng)作的。
文檔編號(hào)G06F9/46GK102866910SQ201210317739
公開(kāi)日2013年1月9日 申請(qǐng)日期2012年8月31日 優(yōu)先權(quán)日2011年8月31日
發(fā)明者H.皮爾森, B.雷克托爾, M.洛夫爾, M.普拉克里亞, S.羅維, T.巴蘇, R.A.弗洛達(dá)茨科, E.H.奧米亞, J.杜尼茨, A.霍爾塞克, L.W.奧斯特曼, 曾煒, N.沃瓦, S.索爾卡, M.阿克西安金 申請(qǐng)人:微軟公司