亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

動(dòng)態(tài)自適應(yīng)編程的制作方法

文檔序號(hào):6426919閱讀:91來(lái)源:國(guó)知局
專利名稱:動(dòng)態(tài)自適應(yīng)編程的制作方法
技術(shù)領(lǐng)域
本申請(qǐng)涉及動(dòng)態(tài)自適應(yīng)編程,尤其涉及創(chuàng)建和執(zhí)行平臺(tái)便攜式代碼的方法。
背景技術(shù)
計(jì)算機(jī)和計(jì)算系統(tǒng)已經(jīng)影響了現(xiàn)代生活的幾乎每個(gè)方面。計(jì)算機(jī)通常在工作、消遣、保健、運(yùn)輸、娛樂(lè)、家政管理等中都有涉獵。便攜式程序(即可在多個(gè)平臺(tái)上運(yùn)行的程序)當(dāng)其在特定平臺(tái)上運(yùn)行時(shí)通常需要執(zhí)行平臺(tái)專用指令。不同的平臺(tái)表示軟件所運(yùn)行的環(huán)境或底層系統(tǒng)的不同,并可通過(guò)作為或具有不同設(shè)備、不同操作系統(tǒng)、或者甚至相同操作系統(tǒng)的不同版本來(lái)表征。作為源代碼分發(fā)的便攜式程序可例如用#ifdefs相當(dāng)容易地實(shí)現(xiàn)這一點(diǎn)。#ifdefs是用于編譯器的標(biāo)記。 開(kāi)發(fā)者為不同的平臺(tái)提供多種版本的指令。編譯器確定平臺(tái)并從多個(gè)版本中選擇適合該平臺(tái)的代碼。然后將所選擇的代碼編譯成二進(jìn)制代碼。#ifdefs導(dǎo)致單個(gè)源代碼文檔和多個(gè)經(jīng)編譯二進(jìn)制代碼。然而,當(dāng)二進(jìn)制代碼需要是便攜式時(shí),執(zhí)行這種平臺(tái)專用指令將困難得多。這對(duì)靜態(tài)編譯語(yǔ)言和具有加載時(shí)間驗(yàn)證的運(yùn)行時(shí)環(huán)境尤其如此。靜態(tài)編譯語(yǔ)言是在編譯時(shí)設(shè)法檢測(cè)編程錯(cuò)誤的語(yǔ)言。如果開(kāi)發(fā)者嘗試包括多個(gè)版本的指令,那么將產(chǎn)生錯(cuò)誤,因?yàn)槌艘粋€(gè)版本之外的所有版本將被編譯器標(biāo)記為錯(cuò)誤。具體而言,編譯器通常產(chǎn)生平臺(tái)專用二進(jìn)制代碼,并將為其它平臺(tái)編寫(xiě)的代碼檢測(cè)為錯(cuò)誤。類似地,加載時(shí)間驗(yàn)證系統(tǒng)將嘗試在運(yùn)行時(shí)檢查代碼中的錯(cuò)誤。用于其它平臺(tái)的代碼版本將被檢測(cè)為錯(cuò)誤。這些語(yǔ)言和運(yùn)行時(shí)通常需要使用平臺(tái)自適應(yīng)層(PAL)來(lái)提供在所有目標(biāo)平臺(tái)中呈現(xiàn)的抽象,即使某些平臺(tái)不支持這些抽象的有意義的實(shí)現(xiàn)。PAL可使用面向?qū)ο蟮睦^承來(lái)防止錯(cuò)誤被檢測(cè)出。具體而言,不同的庫(kù)加載在不同的平臺(tái),使得不會(huì)為特定平臺(tái)工作的代碼版本也不被部署到該平臺(tái),從而不會(huì)有對(duì)平臺(tái)專用API的不適當(dāng)?shù)恼{(diào)用。在開(kāi)發(fā)者需要確保繼承是適當(dāng)?shù)牟⑶規(guī)毂徊渴鸬那闆r下,PAL的實(shí)現(xiàn)是復(fù)雜的。在此要求保護(hù)的主題不限于解決任何缺點(diǎn)或僅在諸如上述環(huán)境中操作的各個(gè)實(shí)施方式。相反,提供該背景僅用以示出在其中可實(shí)踐在此描述的部分實(shí)施方式的一個(gè)示例性技術(shù)領(lǐng)域。

發(fā)明內(nèi)容
一個(gè)實(shí)施方式涉及創(chuàng)建平臺(tái)便攜式代碼的方法。該方法包括聲明對(duì)象是程序中的動(dòng)態(tài)對(duì)象。該程序是使用支持動(dòng)態(tài)調(diào)用的靜態(tài)語(yǔ)言編譯的程序。聲明對(duì)象為動(dòng)態(tài)對(duì)象使得被聲明為動(dòng)態(tài)對(duì)象的對(duì)象在程序被編譯時(shí)被排除在對(duì)對(duì)象的靜態(tài)分析之外。動(dòng)態(tài)對(duì)象包括對(duì)平臺(tái)專用API的依賴調(diào)用。平臺(tái)專用API在對(duì)其部署程序的經(jīng)編譯版本的一個(gè)或多個(gè)平臺(tái)上是可用的,但是在對(duì)其部署程序的經(jīng)編譯版本的一個(gè)或多個(gè)其它平臺(tái)上是不可用的。 該方法還包括將程序靜態(tài)編譯成平臺(tái)便攜式代碼。然后將平臺(tái)便攜式代碼部署至不同平臺(tái),并在不同平臺(tái)上成功執(zhí)行。將程序靜態(tài)編譯成平臺(tái)便攜式代碼包括將動(dòng)態(tài)對(duì)象排除在編譯期間對(duì)程序中的未被聲明為動(dòng)態(tài)的其它對(duì)象執(zhí)行的靜態(tài)分析之外,作為該對(duì)象被聲明為動(dòng)態(tài)對(duì)象的結(jié)果。另一 實(shí)施方式包括執(zhí)行平臺(tái)便攜式代碼的方法。該方法包括訪問(wèn)從靜態(tài)語(yǔ)言程序編譯的經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象。動(dòng)態(tài)對(duì)象被排除在經(jīng)編譯程序的編譯期間的靜態(tài)分析之外。動(dòng)態(tài)對(duì)象包括用作代理對(duì)象的功能,代理對(duì)象被配置成在平臺(tái)專用對(duì)象在運(yùn)行時(shí)在執(zhí)行經(jīng)編譯程序的平臺(tái)上是可訪問(wèn)的情況下在運(yùn)行時(shí)加載平臺(tái)專用對(duì)象。該方法還包括測(cè)試代理對(duì)象,以確定平臺(tái)專用對(duì)象是否成功加載。作為測(cè)試結(jié)果,該方法包括確定平臺(tái)專用對(duì)象成功加載,并因此調(diào)用平臺(tái)專用對(duì)象API。提供本發(fā)明內(nèi)容是為了以精簡(jiǎn)的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并非旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。另外的特征和優(yōu)點(diǎn)將在以下的描述中闡述,并且部分可從該描述中顯而易見(jiàn),或者可以從此處的教示實(shí)踐中習(xí)得。本發(fā)明的特征和優(yōu)點(diǎn)可以通過(guò)在所附權(quán)利要求中特別指出的手段和組合來(lái)實(shí)現(xiàn)并獲取。本發(fā)明的特征將從以下描述和所附權(quán)利要求書(shū)中變得完全顯而易見(jiàn),或者可通過(guò)如下所述對(duì)本發(fā)明的實(shí)踐而獲知。


為了描述能夠獲得上述和其他優(yōu)點(diǎn)和特征的方式,將通過(guò)參考附圖中示出的各具體實(shí)施方式
來(lái)呈現(xiàn)對(duì)以上簡(jiǎn)述的主題的更為具體的描述。應(yīng)該理解,這些附圖僅描繪了各典型實(shí)施方式,因此其不應(yīng)被認(rèn)為是對(duì)范圍的限制,各實(shí)施方式將通過(guò)使用附圖用附加特征和細(xì)節(jié)來(lái)描述并解釋,在附圖中圖IA示出使用代理對(duì)象的對(duì)象圖和確定在平臺(tái)上是否支持功能的方法;圖IB示出使用代理對(duì)象的對(duì)象圖和確定在多個(gè)不同平臺(tái)的平臺(tái)上是否支持功能的方法;圖IC示出使用代理對(duì)象的對(duì)象圖和確定哪個(gè)平臺(tái)正被使用的方法;圖2示出創(chuàng)建平臺(tái)便攜式代碼的方法;以及圖3示出執(zhí)行平臺(tái)便攜式代碼的方法。
具體實(shí)施例方式此處描述的某些實(shí)施方式使用靜態(tài)語(yǔ)言中定義的動(dòng)態(tài)對(duì)象。動(dòng)態(tài)對(duì)象可包括對(duì)存在于某些平臺(tái)中但不存在于其它平臺(tái)中的對(duì)象的依賴調(diào)用。這可以出于多個(gè)不同理由來(lái)實(shí)現(xiàn)。例如,在某些實(shí)施方式中,某些平臺(tái)可支持在其它平臺(tái)上不支持的特定功能?;蛘撸煌脚_(tái)可支持相同功能,但可使用不同對(duì)象形式的機(jī)制來(lái)提供支持。通過(guò)在靜態(tài)語(yǔ)言中使用動(dòng)態(tài)對(duì)象,某些實(shí)施方式能夠方便單個(gè)源代碼/單個(gè)二進(jìn)制代碼解決方案,而不是單個(gè)源代碼/多個(gè)二進(jìn)制代碼解決方案。通過(guò)這種方法,單個(gè)二進(jìn)制代碼可被分發(fā)至多個(gè)不同平臺(tái),由此減少對(duì)為多個(gè)不同平臺(tái)創(chuàng)建、存儲(chǔ)和傳遞多個(gè)二進(jìn)制代碼的需求。在編譯時(shí)不靜態(tài)地細(xì)查動(dòng)態(tài)對(duì)象,因此靜態(tài)語(yǔ)言編譯器不會(huì)導(dǎo)致由于包括與給定平臺(tái)不兼容的代碼的動(dòng)態(tài)對(duì)象而產(chǎn)生的錯(cuò)誤,例如對(duì)不存在的對(duì)象的調(diào)用。具體而言,動(dòng)態(tài)語(yǔ)言允許開(kāi)發(fā)者創(chuàng)建在編譯時(shí)不靜態(tài)地細(xì)查的代碼。相反,在運(yùn)行時(shí),如果在代碼中做出不適當(dāng)?shù)恼{(diào)用,則程序?qū)伋霎惓?。本質(zhì)上,開(kāi)發(fā)者可編碼他們想要的任何事物,而不必?fù)?dān)心非運(yùn)行時(shí)編譯器錯(cuò)誤。因此,各實(shí)施方式可在靜態(tài)語(yǔ)言代碼中使用動(dòng)態(tài)對(duì)象,使得在靜態(tài)編譯期間不細(xì)查動(dòng)態(tài)對(duì)象。在此處所示的示例中,示出了各種替換方式。具體而言,一個(gè)實(shí)施方式包括“if supported(是否支持)”方法,該方法只在“if supported”調(diào)用中引用的對(duì)象存在于“if supported”方法在其上被調(diào)用的平臺(tái)上時(shí)才完全運(yùn)行。"if supported”方法可用于實(shí)施方式以實(shí)現(xiàn)在某些平臺(tái)上功能上可用,而在其它平臺(tái)上不可用。該情況的一個(gè)示例在圖IA中示出。圖IA示出執(zhí)行對(duì)象映射形式的平臺(tái)便攜式代碼。圖IA示出調(diào)用第一對(duì)象102。第一對(duì)象102調(diào)用代理對(duì)象104,代理對(duì)象104是在靜態(tài)編譯便攜式代碼程序中的動(dòng)態(tài)編譯對(duì)象,如以下將要更詳細(xì)解釋的。代理對(duì)象104包括IsSupported(受到支持)方法106。該 IsSupported方法是對(duì)另一對(duì)象108的條件調(diào)用。該調(diào)用只在其它對(duì)象108在執(zhí)行平臺(tái)便攜式代碼的平臺(tái)上可用且可執(zhí)行時(shí)進(jìn)行。如果其它對(duì)象108不可用,那么代理對(duì)象104(使用IsSupported方法)將用作確定對(duì)其它對(duì)象的調(diào)用是否安全的門,從而防止拋出運(yùn)行時(shí)異常。通過(guò)使用多個(gè)“ifsupported(如果支持)”方法,各實(shí)施方式可支持具有類似功能的不同平臺(tái),而使用不同機(jī)制,如不同對(duì)象。該情況的一個(gè)示例在圖IB中示出。圖IB示出調(diào)用代理對(duì)象112的第一對(duì)象110。代理對(duì)象112是動(dòng)態(tài)對(duì)象,它是靜態(tài)編譯的平臺(tái)便攜式代碼的一部分(不同于以下將詳細(xì)解釋的動(dòng)態(tài)對(duì)象)。代理對(duì)象包括IsSupported方法 114,它用作確定在代理對(duì)象112上調(diào)用其它方法是否安全的門。IsSupported方法可包括對(duì)諸如對(duì)象116、118和120的對(duì)象的條件調(diào)用。這些對(duì)象116、118和120的每一個(gè)可以是支持類似功能但位于不同平臺(tái)的對(duì)象。IsSupported方法114允許為適當(dāng)平臺(tái)調(diào)用適當(dāng)對(duì)象。這防止調(diào)用不支持的方法在平臺(tái)上被調(diào)用,從而防止運(yùn)行時(shí)異常。在替換實(shí)施方式中,可運(yùn)行對(duì)于不同框架具有替換路徑的方法。該情況的一個(gè)示例在圖IC中示出。圖IC示出第一方法122。第一方法調(diào)用代理對(duì)象124。代理對(duì)象IM 是動(dòng)態(tài)對(duì)象,它是靜態(tài)編譯的平臺(tái)便攜式代碼的一部分(不同于以下將詳細(xì)解釋的動(dòng)態(tài)對(duì)象)。代理對(duì)象IM包括兩個(gè)替換方法,IsRunningOnPlatformX (在平臺(tái)X上運(yùn)行)U6and IsRunningOnPlatformY(在平臺(tái)Y上運(yùn)行)128。這些方法各自包括使對(duì)對(duì)象130和132的調(diào)用分別依賴于平臺(tái)便攜式代碼正運(yùn)行于哪個(gè)平臺(tái)的功能?,F(xiàn)在示出這些實(shí)施方式的更詳細(xì)的示例。來(lái)自華盛頓州雷德蒙市的微軟公司的CLR 4.0 for. Net 框架包括對(duì)靜態(tài)語(yǔ)言中的動(dòng)態(tài)對(duì)象的支持。具體而言,該框架包括可用于靜態(tài)語(yǔ)言中的動(dòng)態(tài)對(duì)象類型 (DynamicObject) 0因此,某些實(shí)施方式使用靜態(tài)語(yǔ)言(Cfend VB是靜態(tài)語(yǔ)言的示例)的動(dòng)態(tài)特征來(lái)編寫(xiě)使用動(dòng)態(tài)調(diào)用的自適應(yīng)代碼。靜態(tài)語(yǔ)言通常在編譯時(shí)檢查錯(cuò)誤,并且錯(cuò)誤檢查通常依賴于平臺(tái),而動(dòng)態(tài)語(yǔ)言就在執(zhí)行前檢查代碼中的錯(cuò)誤。在靜態(tài)語(yǔ)言中使用動(dòng)態(tài)對(duì)象允許開(kāi)發(fā)者在設(shè)計(jì)時(shí)調(diào)用可能不存在于某些支持平臺(tái)上的任意API,而不必?fù)?dān)心編譯時(shí)錯(cuò)誤。例如,第一 API可存在于第一平臺(tái)上而不存在于第二平臺(tái)上,而第二 API可存在于第二平臺(tái)上而不存在于第一平臺(tái)上。因此,如果使用在靜態(tài)語(yǔ)言中實(shí)現(xiàn)的動(dòng)態(tài)對(duì)象來(lái)進(jìn)行對(duì)第一和第二API的調(diào)用,對(duì)第一平臺(tái)的編譯將不會(huì)由于對(duì)第二API的調(diào)用而導(dǎo)致錯(cuò)誤,并且對(duì)第二平臺(tái)的編譯將不會(huì)由于對(duì)第一API的調(diào)用而導(dǎo)致錯(cuò)誤。然而,在運(yùn)行時(shí),如果第一平臺(tái)調(diào)用第二 API或者第二平臺(tái)調(diào)用第一 API,則將拋出運(yùn)行時(shí)異常。因此,各實(shí)施方式可實(shí)現(xiàn)可防止平臺(tái)對(duì)不支持的對(duì)象的調(diào)用的專門類型,即使這些調(diào)用存在于經(jīng)編譯的二進(jìn)制代碼中。 一個(gè)示意性實(shí)施方式包括特殊類型,它在本示例中是CLR 4.0 for. Net 框架中的DynamicObject (動(dòng)態(tài)對(duì)象)的子類型。如上所述,DynamicOb ject是CLR 4. 0中的不被靜態(tài)編譯器細(xì)查的對(duì)象。DynamicOb ject表示對(duì)任意API的動(dòng)態(tài)代理。在本示例中,該特殊類型對(duì)象在此被稱為L(zhǎng)ightupDynamicOb ject (點(diǎn)亮動(dòng)態(tài)對(duì)象,在下文中稱為“LD0”)。雖然 “點(diǎn)亮”表示當(dāng)在特定平臺(tái)上可用時(shí)點(diǎn)亮特征的能力,但是LDO也可用于使用不同機(jī)制在不同平臺(tái)上實(shí)現(xiàn)類似功能。當(dāng)創(chuàng)建了這種類型的實(shí)例時(shí),開(kāi)發(fā)者提供描述該LDO表示哪個(gè)平臺(tái)專用API的信息。例如,以下示出使用語(yǔ)音合成器功能的LDO的一示例,其類似于圖IA所示示例。 值得注意的是,為了說(shuō)明的目的,語(yǔ)音合成器API存在于可從華盛頓州雷德蒙市的微軟公司獲得的.NET 框架上,但是不存在于也可從微軟公司獲得的Silverlight 中。因此,這兩個(gè)平臺(tái)可用于示出如何在各種平臺(tái)中使用LDO以及如何在可用時(shí)將LDO用于點(diǎn)亮語(yǔ)音功能。以下代碼創(chuàng)建表示語(yǔ)音合成器API的LDO的示例dynamic speech = newLightupDynamicOb ject ( "System. Speech. SpeechSynthetizer, System. Speech,,);這將字符串傳遞給包括類型名稱(“System. Speech. SpeechSynthetizer”)和 dll( "System. Speech")的構(gòu)造函數(shù)?,F(xiàn)在,語(yǔ)音對(duì)象可使用如下(即使在運(yùn)行在諸如 Silverlight 的不支持語(yǔ)音的平臺(tái)上的程序中)if (speech. IsSupported) {speech. Speak ( "Hi !”);}IsSupported是LDO的方法,且用于確定在語(yǔ)音對(duì)象所用的平臺(tái)上是否支持語(yǔ)音 API。對(duì)“Speak(說(shuō)話)”的調(diào)用是動(dòng)態(tài)調(diào)用,所以它在編譯時(shí)或加載時(shí)不失效,象如果調(diào)用不是動(dòng)態(tài)的那樣。如上所述,在LDO的所示示例中,LDO包括對(duì)實(shí)例的稱為“ IsSupported”動(dòng)態(tài)成員。 該成員允許代碼查詢平臺(tái)是否支持在構(gòu)造期間所指示的API。如果沒(méi)有“if (是否)”檢查, 對(duì)Speak的調(diào)用可能在運(yùn)行時(shí)在某些平臺(tái)上失效。雖然上述示例示出如何通過(guò)防止動(dòng)態(tài)成員在不支持該成員的平臺(tái)上被調(diào)用來(lái)保護(hù)動(dòng)態(tài)成員以免運(yùn)行時(shí)異常,但是可用靜態(tài)成員來(lái)實(shí)現(xiàn)類似功能。例如,以下示出使用LDO 對(duì)靜態(tài)成員的代理調(diào)用。dynamic console = new LightupDynamicObject ( “ System.Console, mscorlib”);if (console. IsSupported) console. WriteLine ( “Hi !,,);在上述示例中,“WriteLine(寫(xiě)入行)”是靜態(tài)成員。“IsSupported” (或其它實(shí)施方式中具有類似功能的方法)也可用于支持具有類似功能的平臺(tái),但使用如圖IB所示的不同的機(jī)制實(shí)現(xiàn)。例如,不同的平臺(tái)可都包括初始化功能,但可使用不同的API來(lái)實(shí)現(xiàn)初始化功能。以下示例示出在虛構(gòu)平臺(tái)X和Y上的該功能,每個(gè)平臺(tái)的平臺(tái)初始化方法為
dynamic platlnitX = new LightupDynamicObject("TypeOnPlatformX, AssemblyOnPlatformX");
if (platlnitX.IsSupported) {
platInitX.PlatformXSpecificMethodCall(...);
dynamic platlnitY = new LightupDynamicObject("TypeOnPlatformY, AssemblyOnPlatformY");
if (platlnitY.IsSupported) {
platInitY.PlaformYSpecificMethodCall(...);
}雖然上述示例已示出使用方法來(lái)確定API是否支持平臺(tái)然后執(zhí)行API,但是其它實(shí)施方式可使用允許替換調(diào)用的方法,如以上圖IC中所示。例如,方法可能能夠具體識(shí)別二進(jìn)制代碼正運(yùn)行在哪個(gè)平臺(tái),并且然后調(diào)用適當(dāng)?shù)腁PI。以下示出使用允許用于不同平臺(tái)的替換方法調(diào)用的方法的示例。具體而言,以下示例示出在虛構(gòu)平臺(tái)X和Y上的該功能,每個(gè)平臺(tái)的平臺(tái)初始化方法為dynamic platlnit = new AdaptiveDynamicObj ect();
platInit.RegisterPlatform("X", "TypeOnPlatformX, AssemblyOnPlatformX"); platInit.RegisterPlatform("Y", "TypeOnPlatformY, AssemblyOnPlatformY");
if (platlnit.IsRunningOnPlatformX) {
platInit.PlatformXSpecificMethodCall(...);
}
else if (platlnit.IsRunningOnPlatformY) {
platInit.PlaformYSpecificMethodCall(...);
}在上述示例中,確定二進(jìn)制代碼正在哪個(gè)平臺(tái)上執(zhí)行。如果平臺(tái)X正執(zhí)行二進(jìn)制代碼,則調(diào)用platlnit. PlatformXSpecif icMethodCall (...)。如果平臺(tái)Y正執(zhí)行二進(jìn)制代碼,則調(diào)用 platlnit. PlatformYSpecif icMethodCall (···)。某些實(shí)施方式在允許自適應(yīng)代碼調(diào)用任意API方面是有用的,而先前的方案要求為自適應(yīng)代碼具體指定平臺(tái)專用API。此外,某些實(shí)施方式允許具有強(qiáng)加載時(shí)間驗(yàn)證的靜態(tài)類型語(yǔ)言(如CLR或Java VM)中的自適應(yīng)二進(jìn)制代碼。以下討論現(xiàn)在涉及多種方法以及可以執(zhí)行的方法動(dòng)作。雖然用特定次序討論或用以特定次序發(fā)生的流程圖示出了各個(gè)方法動(dòng)作,但除非明確規(guī)定否則不需要特定次序,或因?yàn)橐粍?dòng)作依賴于另一動(dòng)作在執(zhí)行該動(dòng)作之前完成而需要特定次序?,F(xiàn)在參考圖2,示出了方法200。該方法可以在包括靜態(tài)編譯語(yǔ)言的計(jì)算環(huán)境中實(shí)施。靜態(tài)編譯語(yǔ)言規(guī)定動(dòng)態(tài)編譯元素。該方法包括用于創(chuàng)建平臺(tái)便攜式代碼的動(dòng)作。該方法包括聲明對(duì)象是程序中的動(dòng)態(tài)對(duì)象(動(dòng)作20 。程序是使用靜態(tài)語(yǔ)言編譯的程序。聲明對(duì)象為動(dòng)態(tài)對(duì)象使得被聲明為動(dòng)態(tài)對(duì)象的對(duì)象在程序被編譯時(shí)被排除在對(duì)對(duì)象的靜態(tài)分析之外。動(dòng)態(tài)對(duì)象包括對(duì)平臺(tái)專用API的依賴調(diào)用。平臺(tái)專用API在對(duì)其部署程序的經(jīng)編譯版本的一個(gè)或多個(gè)平臺(tái)上是可用的,但是在對(duì)其部署程序的經(jīng)編譯版本的一個(gè)或多個(gè)其它平臺(tái)上是不可用的。方法200還包括將程序靜態(tài)編譯為平臺(tái)便攜式代碼,并同時(shí)將動(dòng)態(tài)對(duì)象排除在靜態(tài)分析之外(動(dòng)作204)。然后將平臺(tái)便攜式代碼部署至不同平臺(tái),并在不同平臺(tái)上成功執(zhí)行。如上所述,將程序靜態(tài)編譯成平臺(tái)便攜式代碼包括將動(dòng)態(tài)對(duì)象明確排除在編譯期間對(duì)程序中的未被聲明為動(dòng)態(tài)的其它對(duì)象執(zhí)行的靜態(tài)分析之外,作為將對(duì)象聲明為動(dòng)態(tài)對(duì)象的結(jié)果。可實(shí)施方法200的實(shí)施方式,其中對(duì)平臺(tái)專用API的依賴調(diào)用依賴于經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定支持平臺(tái)專用API的方法。例如,圖IA和IB以及上述其它示例示出使用IsSupported方法106和114,該方法可用于確定在平臺(tái)上是否支持特定功能、對(duì)象和/或API。對(duì)平臺(tái)專用API的調(diào)用依賴于確定是否支持API結(jié)果。 在方法200的替換實(shí)施方式中,可實(shí)施方法200,其中對(duì)平臺(tái)專用API的依賴調(diào)用依賴于經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定經(jīng)編譯程序正在其上運(yùn)行的平臺(tái)的方法。例如, 如圖IC所示和上述其它實(shí)施方式所示,方法126和128可用于確定正在使用哪個(gè)平臺(tái),并且可基于正在使用的平臺(tái)做出對(duì)平臺(tái)專用API的適當(dāng)調(diào)用??蓪?shí)施方法200的實(shí)施方式,其中該方法創(chuàng)建作為平臺(tái)便攜式二進(jìn)制代碼的平臺(tái)便攜式代碼。在該實(shí)施方式中,從單個(gè)源代碼程序中創(chuàng)建單個(gè)二進(jìn)制代碼,其不同于單個(gè)源 /多個(gè)二進(jìn)制代碼方案。單個(gè)二進(jìn)制代碼可分發(fā)至多個(gè)不同平臺(tái)。如上所述,不同平臺(tái)可包括具有不同操作系統(tǒng)的平臺(tái);不同平臺(tái)可包括具有操作系統(tǒng)的不同版本的平臺(tái);不同虛擬機(jī)(如桌上CLR對(duì)Silverlight 運(yùn)行時(shí)對(duì)移動(dòng)電話運(yùn)行時(shí)等),不同設(shè)備;和/或軟件所運(yùn)行的環(huán)境或底層系統(tǒng)的不同,例如硬件或軟件配置的不同??蓪?shí)施方法200的實(shí)施方式,其中對(duì)平臺(tái)專用API的依賴調(diào)用方便在對(duì)其部署經(jīng)編譯程序的一個(gè)或多個(gè)平臺(tái)上啟用功能的點(diǎn)亮功能,被啟用的功能在對(duì)其部署經(jīng)編譯程序的一個(gè)或多個(gè)其它平臺(tái)上不存在。以上示出了該情況的示例,其中語(yǔ)音功能在某些平臺(tái)上可用而在其它平臺(tái)上不可用??蓽y(cè)試是否支持,并在支持時(shí)點(diǎn)亮語(yǔ)音功能??蓪?shí)施方法200的實(shí)施方式,其中對(duì)平臺(tái)專用API的依賴調(diào)用方便使用替換機(jī)制來(lái)在對(duì)其部署經(jīng)編譯程序的不同平臺(tái)上實(shí)現(xiàn)類似功能,其中每個(gè)平臺(tái)具有類似功能但使用不同API來(lái)實(shí)現(xiàn)該功能。該情況的示例在圖IB和IC和上述其它示例中示出?,F(xiàn)在參考圖3,示出了方法300。方法300可以在包括靜態(tài)編譯語(yǔ)言的計(jì)算環(huán)境中實(shí)施。靜態(tài)編譯語(yǔ)言規(guī)定動(dòng)態(tài)編譯元素。該方法包括用于執(zhí)行平臺(tái)便攜式代碼的動(dòng)作。該方法包括訪問(wèn)從靜態(tài)語(yǔ)言程序編譯的經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象(動(dòng)作302)。動(dòng)態(tài)對(duì)象被排除在經(jīng)編譯程序的編譯期間的靜態(tài)分析之外。動(dòng)態(tài)對(duì)象包括用作代理對(duì)象的功能,代理對(duì)象被配置成在平臺(tái)專用對(duì)象在運(yùn)行時(shí)在執(zhí)行經(jīng)編譯程序的平臺(tái)上是可訪問(wèn)的情況下在運(yùn)行時(shí)加載平臺(tái)專用對(duì)象。該方法還包括測(cè)試代理對(duì)象,以確定平臺(tái)專用對(duì)象是否成功加載(動(dòng)作304)??蓪?shí)施實(shí)施方式,其中測(cè)試代理對(duì)象以確定平臺(tái)專用對(duì)象是否成功加載包括經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定支持平臺(tái)專用對(duì)象的方法。例如,圖IA和IB示出使用IsSupported方法來(lái)確定是否支持平臺(tái)專用對(duì)象?;蛘?,可實(shí)施實(shí)施方式,其中測(cè)試代理對(duì)象以確定平臺(tái)專用對(duì)象是否成功加載包括經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定經(jīng)編譯程序正在其上執(zhí)行的平臺(tái)的方法。例如,圖IC示出確定動(dòng)態(tài)對(duì)象正在哪個(gè)平臺(tái)上執(zhí)行的方法。方法300還包括,作為測(cè)試代理對(duì)象的結(jié)果,確定平臺(tái)專用對(duì)象成功加載,并因此調(diào)用平臺(tái)專用對(duì)象API (動(dòng)作306)。此外,該方法可以由包括一個(gè)或多個(gè)處理器和諸如計(jì)算機(jī)存儲(chǔ)器等計(jì)算機(jī)可讀介質(zhì)的計(jì)算機(jī)系統(tǒng)來(lái)實(shí)施。具體而言,計(jì)算機(jī)存儲(chǔ)器可以存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令,計(jì)算機(jī)可執(zhí)行指令在由一個(gè)或多個(gè)處理器執(zhí)行時(shí)使得執(zhí)行各種功能,如在各實(shí)施方式中所述的那些動(dòng)作。本發(fā)明的各實(shí)施方式可以包括或利用包含計(jì)算機(jī)硬件的專用或通用計(jì)算機(jī),這將在下文中更詳細(xì)地討論。本發(fā)明范圍內(nèi)的各實(shí)施方式還包括用于承載或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理計(jì)算機(jī)可讀介質(zhì)和其他計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)系統(tǒng)訪問(wèn)的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物理存儲(chǔ)介質(zhì)。承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施方式可包括至少兩種完全不同的計(jì)算機(jī)可讀介質(zhì) 物理計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)和傳輸計(jì)算機(jī)可讀介質(zhì)。物理計(jì)算機(jī)存儲(chǔ)介質(zhì)包括RAM、ROM、EEPROM、CD-ROM或其他光盤(pán)存儲(chǔ)(如CD、DVD
等)、磁盤(pán)存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或可用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的任何其他介質(zhì)?!熬W(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)系統(tǒng)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過(guò)網(wǎng)絡(luò)或另一通信連接(硬連線、無(wú)線、或硬連線或無(wú)線的組合)傳輸或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于承載計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置并可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。以上介質(zhì)的組合也被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。此外,在到達(dá)各種計(jì)算機(jī)系統(tǒng)組件之后,計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸計(jì)算機(jī)可讀介質(zhì)自動(dòng)轉(zhuǎn)移到物理計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)(或者相反)。 例如,通過(guò)網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳送到計(jì)算機(jī)系統(tǒng)RAM和/或計(jì)算機(jī)系統(tǒng)處的較不易失性的計(jì)算機(jī)可讀物理存儲(chǔ)介質(zhì)。因此,計(jì)算機(jī)可讀物理存儲(chǔ)介質(zhì)可被包括在同樣 (或甚至主要)利用傳輸介質(zhì)的計(jì)算機(jī)系統(tǒng)組件中。計(jì)算機(jī)可執(zhí)行指令例如包括,使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼、諸如匯編語(yǔ)言或微軟中間語(yǔ)言⑧的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語(yǔ)言描述了本主題,但可以理解的是,所附權(quán)利要求書(shū)中定義的主題不必限于上述特征或動(dòng)作。相反,上述特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開(kāi)的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計(jì)算機(jī)系統(tǒng)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)、路由器、交換機(jī)等等。本發(fā)明也可以在其中通過(guò)網(wǎng)絡(luò)鏈接(或者通過(guò)硬連線數(shù)據(jù)鏈路、無(wú)線數(shù)據(jù)鏈路,或者通過(guò)硬連線和無(wú)線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)系統(tǒng)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)踐。在分布式系統(tǒng)環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備二者中。本發(fā)明可具體化為其他具體形式而不背離其精神或特征。所描述的實(shí)施方式在所有方面都應(yīng)被認(rèn)為僅是說(shuō)明性而非限制性的。從而,本發(fā)明的范圍由所附權(quán)利要求書(shū)而非前述描述指示。落入權(quán)利要求書(shū)的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書(shū)的范圍所涵蓋。
權(quán)利要求
1.一種計(jì)算環(huán)境中的創(chuàng)建平臺(tái)便攜式代碼的方法,所述計(jì)算環(huán)境包括使用靜態(tài)編譯語(yǔ)言編寫(xiě)的程序,其中所述靜態(tài)編譯語(yǔ)言規(guī)定動(dòng)態(tài)編譯元素,所述方法包括聲明對(duì)象是程序中的動(dòng)態(tài)對(duì)象O02),所述程序是所用靜態(tài)語(yǔ)言編譯的程序,其中聲明對(duì)象為動(dòng)態(tài)對(duì)象使得被聲明為動(dòng)態(tài)對(duì)象的對(duì)象在編譯程序時(shí)被排除在對(duì)對(duì)象的靜態(tài)分析之外,其中動(dòng)態(tài)對(duì)象包括對(duì)平臺(tái)專用API的依賴調(diào)用,平臺(tái)專用API在將對(duì)其部署所述程序的經(jīng)編譯版本的一個(gè)或多個(gè)平臺(tái)上是可用的,但是在將對(duì)其部署所述程序的經(jīng)編譯版本的一個(gè)或多個(gè)其它平臺(tái)上是不可用的;以及將所述程序靜態(tài)編譯成平臺(tái)便攜式代碼,所述平臺(tái)便攜式代碼然后被部署至不同平臺(tái)并在不同平臺(tái)上成功執(zhí)行O04),其中將所述程序靜態(tài)編譯成平臺(tái)便攜式代碼包括將所述動(dòng)態(tài)對(duì)象排除在編譯期間對(duì)所述程序中的未被聲明為動(dòng)態(tài)的其它對(duì)象執(zhí)行的靜態(tài)分析之外。
2.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)平臺(tái)專用API的依賴調(diào)用依賴于經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定支持平臺(tái)專用API的方法。
3.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)平臺(tái)專用API的依賴調(diào)用依賴于所述經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定所述經(jīng)編譯程序正在其上執(zhí)行的平臺(tái)的方法。
4.如權(quán)利要求1所述的方法,其特征在于,所述方法創(chuàng)建作為平臺(tái)便攜式二進(jìn)制代碼的平臺(tái)便攜式代碼,使得從包括一個(gè)或多個(gè)源代碼文件的單個(gè)源代碼程序中創(chuàng)建單個(gè)二進(jìn)制代碼,其中所述單個(gè)二進(jìn)制代碼可分發(fā)至多個(gè)不同平臺(tái)。
5.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)平臺(tái)專用API的依賴調(diào)用方便在對(duì)其部署所述經(jīng)編譯程序的一個(gè)或多個(gè)平臺(tái)上啟用功能的點(diǎn)亮功能,被啟用的功能在對(duì)其部署所述經(jīng)編譯程序的一個(gè)或多個(gè)其它平臺(tái)上不存在。
6.如權(quán)利要求1所述的方法,其特征在于,所述對(duì)平臺(tái)專用API的依賴調(diào)用方便使用替換機(jī)制來(lái)在對(duì)其部署所述經(jīng)編譯程序的不同平臺(tái)上實(shí)現(xiàn)類似功能,其中每個(gè)平臺(tái)具有類似功能但使用不同API來(lái)實(shí)現(xiàn)該功能。
7.如權(quán)利要求1所述的方法,其特征在于,不同平臺(tái)包括具有不同操作系統(tǒng)的平臺(tái)。
8.如權(quán)利要求1所述的方法,其特征在于,不同平臺(tái)包括具有操作系統(tǒng)的不同版本的D ο
9.如權(quán)利要求1所述的方法,其特征在于,不同平臺(tái)包括具有不同硬件或軟件配置中的至少一個(gè)的平臺(tái)。
10.如權(quán)利要求1所述的方法,其特征在于,不同平臺(tái)包括具有不同虛擬機(jī)的平臺(tái)。
11.一種在計(jì)算環(huán)境中的執(zhí)行平臺(tái)便攜式代碼的方法,所述計(jì)算環(huán)境包括靜態(tài)編譯語(yǔ)言,其中所述靜態(tài)編譯語(yǔ)言規(guī)定動(dòng)態(tài)編譯元素,所述方法包括訪問(wèn)從靜態(tài)語(yǔ)言程序編譯的經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象(302),但其中所述動(dòng)態(tài)對(duì)象被排除在所述經(jīng)編譯程序的編譯期間的靜態(tài)分析之外,并且其中所述動(dòng)態(tài)對(duì)象包括用作代理對(duì)象的功能,所述代理對(duì)象被配置成在平臺(tái)專用對(duì)象在運(yùn)行時(shí)在執(zhí)行所述經(jīng)編譯程序的平臺(tái)上是可訪問(wèn)的情況下在運(yùn)行時(shí)加載所述平臺(tái)專用對(duì)象;測(cè)試所述代理對(duì)象以確定所述平臺(tái)專用對(duì)象是否成功加載(304);以及確定所述平臺(tái)專用對(duì)象成功加載,并因此調(diào)用平臺(tái)專用對(duì)象API (306)。
12.如權(quán)利要求11所述的方法,其特征在于,測(cè)試所述代理對(duì)象以確定所述平臺(tái)專用對(duì)象是否成功加載包括所述經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定支持所述平臺(tái)專用對(duì)象的方法。
13.如權(quán)利要求11所述的方法,其特征在于,測(cè)試所述代理對(duì)象以確定所述平臺(tái)專用對(duì)象是否成功加載包括所述經(jīng)編譯程序中包括的動(dòng)態(tài)對(duì)象確定所述經(jīng)編譯對(duì)象正在其上執(zhí)行的平臺(tái)的方法。
14.如權(quán)利要求11所述的方法,其特征在于,所述經(jīng)編譯程序是平臺(tái)便攜式二進(jìn)制代碼,并且是從單個(gè)源代碼程序中創(chuàng)建的單個(gè)二進(jìn)制代碼,其中所述單個(gè)二進(jìn)制代碼可分發(fā)至多個(gè)不同平臺(tái)。
15.如權(quán)利要求11所述的方法,其特征在于,所述對(duì)平臺(tái)專用API的調(diào)用方便在對(duì)其部署所述經(jīng)編譯程序的一個(gè)或多個(gè)平臺(tái)上啟用功能的點(diǎn)亮功能,被啟用的功能在對(duì)其部署所述經(jīng)編譯程序的一個(gè)或多個(gè)其它平臺(tái)上不存在。
全文摘要
本發(fā)明涉及動(dòng)態(tài)自適應(yīng)編程。創(chuàng)建和執(zhí)行平臺(tái)便攜式代碼。一種方法包括聲明對(duì)象是程序中的動(dòng)態(tài)對(duì)象。程序是所用靜態(tài)語(yǔ)言編譯的程序,不同之處在于動(dòng)態(tài)對(duì)象在程序被編譯時(shí)被排除在對(duì)對(duì)象的靜態(tài)分析之外。動(dòng)態(tài)對(duì)象包括對(duì)平臺(tái)專用API的依賴調(diào)用。平臺(tái)專用API在對(duì)其部署程序的經(jīng)編譯版本的一個(gè)或多個(gè)平臺(tái)上是可用的,但是在對(duì)其部署程序的經(jīng)編譯版本的一個(gè)或多個(gè)其它平臺(tái)上是不可用的。
文檔編號(hào)G06F9/45GK102289384SQ20111017160
公開(kāi)日2011年12月21日 申請(qǐng)日期2011年6月15日 優(yōu)先權(quán)日2010年6月15日
發(fā)明者K·J·克瓦里納, W·哈格德 申請(qǐng)人:微軟公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1