在相關(guān)司法中的適用法律所準(zhǔn)許的限度內(nèi),本公開(kāi)通過(guò)援引共同擁有的提交于2014年3月27日的美國(guó)專(zhuān)利申請(qǐng)第14/227,036(“’036申請(qǐng)”)全部而將其納入于此。
背景
一些計(jì)算機(jī)程序環(huán)境提供針對(duì)一個(gè)或多個(gè)動(dòng)態(tài)行為的運(yùn)行時(shí)支持。一些動(dòng)態(tài)行為包括動(dòng)態(tài)分派、反射、向下類(lèi)型轉(zhuǎn)換、自修改代碼、動(dòng)態(tài)類(lèi)型校驗(yàn)和/或即時(shí)編譯。動(dòng)態(tài)分派涉及在運(yùn)行時(shí)選擇多形態(tài)方法(或函數(shù))的哪個(gè)實(shí)現(xiàn)從給定調(diào)用被調(diào)用。類(lèi)型自測(cè)涉及正在運(yùn)行的程序檢查其自己的值、元數(shù)據(jù)、屬性和/或函數(shù);反射則進(jìn)一步深入,因?yàn)樗婕罢谶\(yùn)行的程序更改其自己的值、元數(shù)據(jù)、屬性和/或函數(shù)。向下類(lèi)型轉(zhuǎn)換或類(lèi)型細(xì)化涉及將基類(lèi)的引用類(lèi)型轉(zhuǎn)換到該基類(lèi)的導(dǎo)出類(lèi)。自修改涉及程序在運(yùn)行時(shí)修改其自己的代碼。動(dòng)態(tài)類(lèi)型校驗(yàn)涉及在程序正在運(yùn)行的同時(shí)驗(yàn)證程序的類(lèi)型安全性。即時(shí)(JIT)編譯涉及在程序正在運(yùn)行的同時(shí)編譯該程序的代碼;已編譯代碼可以是本機(jī)代碼或者它可以是接著例如被解釋的更高級(jí)的代碼。一些動(dòng)態(tài)編程語(yǔ)言在運(yùn)行時(shí)執(zhí)行被執(zhí)行的程序行為,而非在針對(duì)靜態(tài)編程語(yǔ)言的編譯期間,例如通過(guò)添加新的代碼、擴(kuò)展對(duì)象和它們的定義和/或修改類(lèi)型系統(tǒng)來(lái)擴(kuò)展程序。
在一個(gè)環(huán)境中對(duì)動(dòng)態(tài)特征和靜態(tài)特征進(jìn)行平衡可能是具有挑戰(zhàn)性的。在具有動(dòng)態(tài)行為的程序也可具有諸如靜態(tài)類(lèi)型校驗(yàn)、靜態(tài)編譯、和/或在應(yīng)用開(kāi)始執(zhí)行之前在提前編譯期間對(duì)其所有組件已經(jīng)被標(biāo)識(shí)的可執(zhí)行應(yīng)用的創(chuàng)建的特征的意義上,平衡有時(shí)是可能的。動(dòng)態(tài)特征可以提供從熟悉的靜態(tài)編譯的程序中丟失的靈活性和能力。然而,在許多情景中,對(duì)程序的靜態(tài)編譯準(zhǔn)許較小且較不復(fù)雜的運(yùn)行時(shí),并且提供了關(guān)于在測(cè)試期間程序的行為和/或何時(shí)校驗(yàn)程序以獲取惡意軟件的更大的確定性。相應(yīng)地,對(duì)靜態(tài)功能性和動(dòng)態(tài)功能性進(jìn)行平衡的新的方式可能是有用的并且是計(jì)算機(jī)編程領(lǐng)域的堅(jiān)實(shí)進(jìn)步。
概述
考慮了支持動(dòng)態(tài)行為(諸如反射)的同時(shí)減少或消除對(duì)JIT編譯和大型運(yùn)行時(shí)平臺(tái)的依賴(lài)的技術(shù)挑戰(zhàn)。在這種上下文中,計(jì)算機(jī)程序的類(lèi)型和類(lèi)型成員可被視為具有“語(yǔ)義特征”,其例如指定類(lèi)型和類(lèi)型成員是否能從程序的運(yùn)行時(shí)平臺(tái)中被安全地省略而不具有執(zhí)行錯(cuò)誤的風(fēng)險(xiǎn)。在過(guò)去,這些語(yǔ)義特征被無(wú)條件地假定(因?yàn)檫\(yùn)行時(shí)包括所有動(dòng)態(tài)類(lèi)型和類(lèi)型成員(潛在過(guò)度的資源成本))或者語(yǔ)義特征由各個(gè)元素的屬性來(lái)指定(其要求大量的冗長(zhǎng)的細(xì)節(jié)并且通常還要求訪問(wèn)程序的源代碼)。本文中呈現(xiàn)了替代方式。
雖然在沒(méi)有JIT編譯的情況下支持反射的挑戰(zhàn)刺激了本文中描述的一些實(shí)施例的一些方面的發(fā)展,但是本發(fā)明既不被限于反射支持也不被限于JIT編譯的消除。例如,一些實(shí)施例涉及選擇性地將語(yǔ)義特征附加到計(jì)算機(jī)程序的類(lèi)型和類(lèi)型成員的技術(shù)問(wèn)題。一些實(shí)施例涉及降低目標(biāo)環(huán)境(諸如智能電話(huà)和平板)中的運(yùn)行時(shí)要求的技術(shù)問(wèn)題。一些實(shí)施例涉及擴(kuò)展提前編譯的能力以便促進(jìn)應(yīng)用測(cè)試的技術(shù)問(wèn)題。一些實(shí)施例提供針對(duì)管理反射和其他動(dòng)態(tài)行為的元數(shù)據(jù)的技術(shù)問(wèn)題的工具和技術(shù)。編程領(lǐng)域的技術(shù)人員還將認(rèn)識(shí)由文本所述的創(chuàng)新所解決的其它技術(shù)問(wèn)題。
在一些實(shí)施例中,人類(lèi)或軟件進(jìn)程用戶(hù)獲得來(lái)自數(shù)字存儲(chǔ)的指令文檔。指令文檔旨在幫助在運(yùn)行時(shí)環(huán)境中管理計(jì)算機(jī)程序的類(lèi)型和類(lèi)型成員的運(yùn)行時(shí)行為特征。該環(huán)境可以是例如相對(duì)于熟悉的運(yùn)行時(shí)具有縮減大小的運(yùn)行時(shí)的智能電話(huà)或平板。計(jì)算機(jī)程序具有用至少一種數(shù)據(jù)類(lèi)型化的編程語(yǔ)言編寫(xiě)的源代碼。
在一些實(shí)施例中,用戶(hù)可以通過(guò)讀取已經(jīng)被生成的指令文檔文件來(lái)獲得指令文檔,或者用戶(hù)可以通過(guò)例如生成指令文檔來(lái)獲得指令文檔。指令文檔包含采用也能夠被軟件解析的格式(諸如XML、JSON、YAML、或SDL格式(這些縮寫(xiě)詞在以下被定義在詳細(xì)描述中))的人類(lèi)可讀指令。與用語(yǔ)義屬性來(lái)注釋源代碼的辦法不同,指令文檔的指令不與該指令所涉及的計(jì)算機(jī)程序的源代碼交織。結(jié)果,不一定需要對(duì)源代碼的訪問(wèn)來(lái)進(jìn)行對(duì)指令的有效使用。具體地,不需要程序的源代碼就能通過(guò)添加指令、刪除指令、或更改指令來(lái)修改適用的指令文檔。給定程序可以服從例如針對(duì)不同運(yùn)行時(shí)來(lái)被定制的不同指令文檔。
在用戶(hù)檢查后,指令文檔公開(kāi)各種運(yùn)行時(shí)行為特征指令。例如,一指令可指定,計(jì)算機(jī)程序源代碼的類(lèi)型T在環(huán)境中是要求類(lèi)型,或者T在環(huán)境中是可任選類(lèi)型,或者T在環(huán)境中是禁止類(lèi)型。類(lèi)似地,另一指令可以指定,計(jì)算機(jī)程序源代碼的類(lèi)型成員M在環(huán)境中是要求類(lèi)型成員,是可任選的,或者在環(huán)境中是禁止的。在一些情形中,一指令指定在環(huán)境中針對(duì)類(lèi)型T程度D被啟用、或者D被禁用,并且在一些情形中,一指令指定在環(huán)境中針對(duì)類(lèi)型成員M程度D被啟用,或者在環(huán)境中D針對(duì)M被禁用。
在一些實(shí)施例中,指令可以引用程序項(xiàng)組;一些示例包括以下組運(yùn)行時(shí)行為特征指令:應(yīng)用(Application)指令、庫(kù)(Library)指令、匯編件(Assembly)指令、命名空間(Namespace)指令。在一些實(shí)施例中,指令可以引用組的各分量,諸如以下的組分量運(yùn)行時(shí)行為特征指令:類(lèi)型(Type)指令、類(lèi)型實(shí)例化(TypeInstantiation)指令、方法(Method)指令、方法實(shí)例化(MethodInstantiation)指令、字段(Field)指令、屬性(Property)指令、事件(Event)指令。在一些實(shí)施例中,指令可以迫使泛型實(shí)例化的存在,假設(shè)給出該指令的編譯器符合該指令。在一些實(shí)施例中,指令可以對(duì)類(lèi)型作出間接引用;一些示例包括以下參數(shù)運(yùn)行時(shí)行為特征指令:參數(shù)(Parameter)指令、類(lèi)型參數(shù)(TypeParameter)指令、泛型參數(shù)(GenericParameter)指令。
在一些實(shí)施例中,指令可以能夠引用以下程度中的一者或多者:指代經(jīng)由反射的對(duì)類(lèi)型實(shí)例的運(yùn)行時(shí)激活的激活程度;指代經(jīng)由反射允許對(duì)類(lèi)型的運(yùn)行時(shí)自測(cè)的瀏覽程度;指代經(jīng)由反射的運(yùn)行時(shí)訪問(wèn)的動(dòng)態(tài)程度;指代啟用對(duì)基于反射的序列化和/或去序列化的反射支持的運(yùn)行時(shí)序列化程度;或者指代采用特定格式(諸如XML或JSON)的靜態(tài)合成的序列化的靜態(tài)序列化程度。在一些實(shí)施例中,準(zhǔn)許的程度值包括以下各項(xiàng)中的兩個(gè)或更多個(gè):要求全部(Required-All)、要求公開(kāi)并且內(nèi)部(Required-PublicAndInternal)、要求公開(kāi)(Required-Public)、全部(All)、公開(kāi)且內(nèi)部(PublicAndInternal)、公開(kāi)(Public)、包括的(Included)、自動(dòng)(Auto)、或排除的(Excluded)。在給定的實(shí)施例和環(huán)境中,各個(gè)程度可以適用于類(lèi)型、它們的實(shí)例構(gòu)造函數(shù)、它們的特性設(shè)置函數(shù)、它們的特性獲得函數(shù)、字段和/或所有類(lèi)型成員。在一些實(shí)施例中,各個(gè)程度被自動(dòng)傳播通過(guò)相關(guān)的類(lèi)型和類(lèi)型成員。
在一些實(shí)施例中,指示被提交給提前編譯器以指示以下內(nèi)容以供在編譯期間使用:(a)程度D是否適用于類(lèi)型T,(b)程度D是否適用于類(lèi)型成員M,(c)類(lèi)型T是否是要求的,以及(d)類(lèi)型成員M是否是要求的。如果類(lèi)型T或類(lèi)型成員M不是要求的(至少根據(jù)指令文檔),則編譯器和運(yùn)行時(shí)可以通過(guò)分別略去對(duì)T或?qū)的動(dòng)態(tài)支持來(lái)相應(yīng)地降低空間和處理要求。為了確定所提交的指令針對(duì)給定類(lèi)型T或給定類(lèi)型成員M指示了什么,在一些實(shí)施例中,編譯器尋找適用于T(或適用于M,按具體情形而定)的所有指令,應(yīng)用合成規(guī)則以產(chǎn)生合成指令,并且接著根據(jù)合成指令來(lái)確定結(jié)果。編譯器接著如由指令文檔所指示地將計(jì)算機(jī)程序源代碼的至少一部分編譯成本機(jī)代碼。
所給出的示例只是說(shuō)明性的。本
技術(shù)實(shí)現(xiàn)要素:
并不旨在標(biāo)識(shí)所要求保護(hù)主題的關(guān)鍵特征或必要特征,也不旨在用于限制所要求保護(hù)主題的范圍。相反地,提供本發(fā)明內(nèi)容是為了以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式中進(jìn)一步描述的一些技術(shù)概念。本發(fā)明由權(quán)利要求書(shū)限定,在本發(fā)明內(nèi)容與權(quán)利要求書(shū)有沖突的情況下,應(yīng)該以權(quán)利要求書(shū)為準(zhǔn)。
附圖簡(jiǎn)述
將參考附圖給出更具體的描述。這些附圖只示出了選定的方面,且因此不完全確定覆蓋或范圍。
圖1是解說(shuō)具有至少一個(gè)處理器和至少一個(gè)存儲(chǔ)器的計(jì)算機(jī)系統(tǒng)的框圖,該至少一個(gè)處理器和至少一個(gè)存儲(chǔ)器在軟件的控制之下與彼此交互,該軟件用于管理在目標(biāo)運(yùn)行時(shí)環(huán)境中計(jì)算機(jī)程序的類(lèi)型和類(lèi)型成員的運(yùn)行時(shí)行為特征,該目標(biāo)運(yùn)行時(shí)環(huán)境不必是與計(jì)算機(jī)程序在其中已經(jīng)編譯、正被編譯、或?qū)⒁痪幾g的編譯環(huán)境相同的環(huán)境,圖1還解說(shuō)了可存在于多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上的操作環(huán)境中的其它項(xiàng),并且圖1還解說(shuō)了經(jīng)配置的存儲(chǔ)介質(zhì)(與單純的信號(hào)相對(duì))實(shí)施例,其中操作環(huán)境解說(shuō)編譯環(huán)境并且還解說(shuō)目標(biāo)運(yùn)行時(shí)環(huán)境;
圖2是解說(shuō)一示例體系結(jié)構(gòu)中的運(yùn)行時(shí)行為特征管理的各方面的框圖;
圖3是進(jìn)一步解說(shuō)在一些實(shí)施例中符合圖2的該方面的參數(shù)運(yùn)行時(shí)行為特征指令的框圖;
圖4是進(jìn)一步解說(shuō)在一些實(shí)施例中符合圖2的該方面的組運(yùn)行時(shí)行為特征指令的框圖;
圖5是進(jìn)一步解說(shuō)在一些實(shí)施例中符合圖2的該方面的運(yùn)行時(shí)行為特征指令程度的框圖;
圖6是解說(shuō)本文描述的一些過(guò)程的步驟和經(jīng)配置的存儲(chǔ)介質(zhì)實(shí)施例的流程圖;
圖7是進(jìn)一步解說(shuō)在一些實(shí)施例中符合圖2的該方面的組分量運(yùn)行時(shí)行為特征指令的框圖;以及
圖8是圖6流程圖的延續(xù)。
詳細(xì)描述
概覽
本文中描述的創(chuàng)新中的一些方面響應(yīng)于由以下技術(shù)問(wèn)題造成的挑戰(zhàn)而產(chǎn)生:當(dāng)反射語(yǔ)義的實(shí)現(xiàn)沒(méi)有被執(zhí)行引擎(即,被運(yùn)行時(shí))提供時(shí),向這些反射語(yǔ)義提供提前編譯系統(tǒng)會(huì)產(chǎn)生小而快的二進(jìn)制文件。然而,創(chuàng)新也可適用于原始上下文之外。
一些實(shí)施例提供或利用針對(duì)將語(yǔ)義特征附加到計(jì)算機(jī)程序的類(lèi)型和類(lèi)型成員所定制的軟件可解析數(shù)據(jù)格式化語(yǔ)言。在一些實(shí)施例中,軟件可解析數(shù)據(jù)格式化語(yǔ)言是諸如XML之類(lèi)的標(biāo)記語(yǔ)言,并且在一些實(shí)施例中,其是諸如YAML之類(lèi)的數(shù)據(jù)序列化標(biāo)準(zhǔn)。軟件可解析數(shù)據(jù)格式化語(yǔ)言在本文中還被統(tǒng)稱(chēng)為“格式”或“格式語(yǔ)言”。用格式語(yǔ)言編寫(xiě)的指令文檔與程序的原始源代碼分離,但在將該源代碼編譯或解釋為受管代碼匯編件、庫(kù)等時(shí)被采用。編譯或解釋指代用該語(yǔ)言編寫(xiě)的用于確定是否將語(yǔ)義特征應(yīng)用到特定類(lèi)型和/或類(lèi)型成員的指令。語(yǔ)言特征本身接著由編譯器、解釋器和/或運(yùn)行時(shí)庫(kù)來(lái)實(shí)施。用該語(yǔ)言編寫(xiě)的指令文檔由此在被應(yīng)用到特定程序或庫(kù)時(shí)控制編譯器、解釋器和/或運(yùn)行時(shí)的語(yǔ)義方面,而不被卷入該程序或庫(kù)的源代碼中。
在一些實(shí)施例中,用該語(yǔ)言編寫(xiě)的指令文檔是分層指令集合。這樣的指令以分層結(jié)構(gòu)來(lái)相對(duì)于彼此地被組織;該結(jié)構(gòu)例如通過(guò)嵌套命名空間和嵌套類(lèi)型來(lái)分層地反映受管計(jì)算機(jī)程序的源代碼中使用的編程語(yǔ)言的各組織概念的組合。在一些實(shí)施例中,源代碼將被編譯為單個(gè)或多個(gè)受管代碼匯編件。這種分層組織允許應(yīng)用到整個(gè)應(yīng)用、庫(kù)、跨各匯編件的命名空間、匯編件組、特定匯編件、匯編件內(nèi)的命名空間、各個(gè)類(lèi)型和/或各個(gè)類(lèi)型成員的指令。這種指令提供對(duì)該分層內(nèi)多個(gè)層處的運(yùn)行時(shí)行為特征的控制,從而給予用戶(hù)在若干個(gè)層中的每一層處細(xì)化或超控特征的能力。
在一些實(shí)施例中,“程度”是語(yǔ)義特征的名稱(chēng)。該語(yǔ)言的指令針對(duì)該指令所應(yīng)用到的類(lèi)型和/或類(lèi)型成員來(lái)開(kāi)啟或關(guān)閉程度。就指定指令中的一個(gè)程度不影響其他程度而言,各程度是彼此正交的。如果多個(gè)指令應(yīng)用到一類(lèi)型或類(lèi)型成員,則程度根據(jù)用于合成指令的規(guī)則來(lái)針對(duì)該類(lèi)型成員開(kāi)啟或關(guān)閉。這允許針對(duì)庫(kù)的元素以及針對(duì)在對(duì)于應(yīng)用對(duì)庫(kù)的使用而言適當(dāng)時(shí)還可被超控的那些特征來(lái)指定特征??梢詮谋窘虒?dǎo)中意識(shí)到,程度集也可從本文中給出的示例中擴(kuò)展或修改。
在一些實(shí)施例中,用于應(yīng)用并合成指令的規(guī)則確定給定類(lèi)型或類(lèi)型成員是否具有特定語(yǔ)義特征。在一些實(shí)施例中,一些指令可做出對(duì)類(lèi)型的間接引用,從而暗示被用于特定上下文中的類(lèi)型的程度的應(yīng)用。在一些實(shí)施例中,指令可迫使泛型類(lèi)型或泛型方法的特定實(shí)例化在運(yùn)行時(shí)存在。
本文中描述的一些創(chuàng)新的一個(gè)方面是具體句法。一個(gè)說(shuō)明性的具體句法利用XML,并且其可由此被符合本文中提供的教導(dǎo)的XSD文檔所描述和約束。熟悉的編譯器或解釋器可被本領(lǐng)域的技術(shù)人員修改來(lái)解析XML指令文檔,從而識(shí)別符合本文中教導(dǎo)的語(yǔ)義指令。更一般地,本公開(kāi)教導(dǎo)了抽象句法,即指令的英語(yǔ)描述,其支持用于安排、合成和使用指令的說(shuō)明性規(guī)則。指令定義語(yǔ)言的示例語(yǔ)義用英語(yǔ)被給出為抽象句法。
此處描述的某些實(shí)施例可以在較寬泛的上下文中查看。例如,諸如行為、編譯、執(zhí)行、自測(cè)、參數(shù)、要求和類(lèi)型等概念可以與特定實(shí)施例相關(guān)。然而,并不能從寬泛上下文的可用性中得出此處對(duì)抽象概念尋求專(zhuān)有權(quán);它們并不是專(zhuān)有的。相反,本發(fā)明聚焦于適當(dāng)具體的實(shí)施例,其技術(shù)效果完全或部分地解決特定技術(shù)問(wèn)題。涉及行為、編譯、轉(zhuǎn)換、執(zhí)行、自測(cè)、參數(shù)、要求和/或類(lèi)型的其他介質(zhì)、系統(tǒng)和方法在本范圍之外。因此,在對(duì)本發(fā)明的正確理解下,也避免了模糊性、抽象性、缺少技術(shù)性和附帶的證據(jù)問(wèn)題。
技術(shù)特性
本文描述的實(shí)施例的技術(shù)特征對(duì)于本領(lǐng)域技術(shù)人員而言將顯而易見(jiàn),并且對(duì)于各種關(guān)注的讀者而言也以各種方式顯而易見(jiàn)。第一,一些實(shí)施例解決諸如在沒(méi)有JIT編譯的情況下支持反射、選擇性地將語(yǔ)義特征附加到類(lèi)型和類(lèi)型成員、降低運(yùn)行時(shí)要求、擴(kuò)展提前編譯能力、和/或管理用于反射和其它動(dòng)態(tài)行為的元數(shù)據(jù)等技術(shù)問(wèn)題。本領(lǐng)域技術(shù)人員還將認(rèn)識(shí)由文本所述的創(chuàng)新所解決的其它技術(shù)問(wèn)題。
第二,一些實(shí)施例包括諸如計(jì)算硬件等技術(shù)組件,這些技術(shù)組件以除了通用計(jì)算機(jī)中的典型交互之外的方式與軟件交互。例如,除了諸如一般的存儲(chǔ)器分配、一般的存儲(chǔ)器讀寫(xiě)、一般的指令執(zhí)行和某種I/O排序等普通交互之外,本文描述的一些實(shí)施例還包括用于創(chuàng)建和/或使用以格式語(yǔ)言編寫(xiě)的指令,該指令被設(shè)計(jì)成幫助管理運(yùn)行時(shí)行為特征。
第三,一些實(shí)施例所提供或受到一些實(shí)施例影響的技術(shù)效果包括合成指令的產(chǎn)生、泛型實(shí)例化的強(qiáng)行存在、以及特定元數(shù)據(jù)在本機(jī)代碼中的編譯器包括/排除。
第四,一些實(shí)施例包括技術(shù)自適應(yīng),諸如相互正交且在指令的分層結(jié)構(gòu)內(nèi)操作的指令程度。
第五,一些實(shí)施例通過(guò)影響技術(shù)考量的指令來(lái)支持編譯器的經(jīng)修改的技術(shù)功能,技術(shù)考量諸如特定類(lèi)型或類(lèi)型成員是(a)目標(biāo)運(yùn)行時(shí)環(huán)境中要求的,(b)在該環(huán)境是可任選的,還是(c)在該環(huán)境中被禁止的。
第六,一些實(shí)施例的技術(shù)優(yōu)點(diǎn)包括在無(wú)需訪問(wèn)源代碼的情況下指定類(lèi)型和類(lèi)型成員的存在和/或缺失的能力、縮減的運(yùn)行時(shí)大小、縮減的運(yùn)行時(shí)處理工作負(fù)載、以及在應(yīng)用被發(fā)布到市場(chǎng)之前完整地測(cè)試該應(yīng)用的行為的改進(jìn)的機(jī)會(huì)。
一些首字母縮寫(xiě)
AOT:提前
API:應(yīng)用程序編程接口
CD:緊致盤(pán)
DVD:數(shù)字視頻盤(pán)或數(shù)字多功能盤(pán)
ECMA:前歐洲計(jì)算機(jī)制造商協(xié)會(huì);這一首字母縮寫(xiě)已經(jīng)被國(guó)際Ecma的非首字母“Ecma”所取代。
JIT:即時(shí)
JSON:JavaScript對(duì)象記法
RAM:隨機(jī)存取存儲(chǔ)器
ROM:只讀存儲(chǔ)器
SDL:簡(jiǎn)單聲明性語(yǔ)言
URI:統(tǒng)一資源標(biāo)識(shí)符
XML:可擴(kuò)展標(biāo)記語(yǔ)言
XSD:XML模式定義
YAML:YAML不是標(biāo)記語(yǔ)言
一些術(shù)語(yǔ)
下面將參考諸如附圖中所示出的那些示例性實(shí)施例,并使用特定語(yǔ)言來(lái)對(duì)其進(jìn)行描述。但是,相關(guān)技術(shù)領(lǐng)域的且擁有本公開(kāi)內(nèi)容的技術(shù)人員將想到的對(duì)此處所示出的特征的更改和進(jìn)一步的修改以及對(duì)此處的特定實(shí)施例所示的抽象原理的其他技術(shù)應(yīng)用,都應(yīng)該被視為在權(quán)利要求的范圍內(nèi)。
在本公開(kāi)中闡明了各術(shù)語(yǔ)的含義,因此應(yīng)該在仔細(xì)關(guān)注這些闡明的情況下閱讀權(quán)利要求書(shū)。給出了具體示例,但是相關(guān)領(lǐng)域的技術(shù)人員將理解其他示例也可落在所使用的術(shù)語(yǔ)的含義范圍內(nèi)以及落在一個(gè)或多個(gè)權(quán)利要求的范圍內(nèi)。各術(shù)語(yǔ)不一定需要具有與它們?cè)谝话闶褂弥?尤其在非技術(shù)使用中)或在特定行業(yè)使用中、或在特定字典或一組字典的使用中所具有的意義相同的意義。附圖標(biāo)記可以與各種措詞一起使用,以幫助示出術(shù)語(yǔ)的廣度。從給定文本片段中省略附圖標(biāo)記不一定意味著沒(méi)有通過(guò)文本討論附圖的內(nèi)容。發(fā)明人聲明并行使他們對(duì)他們自己的詞典的權(quán)利。所引用的術(shù)語(yǔ)被顯式定義,但在隱式定義術(shù)語(yǔ)時(shí)不使用引用標(biāo)記。這里可在具體實(shí)施方式中和/或在申請(qǐng)文件的別處顯式地或隱式地定義術(shù)語(yǔ)。
如此處所使用的,“計(jì)算機(jī)系統(tǒng)”可包括例如一個(gè)或多個(gè)服務(wù)器、主板、處理節(jié)點(diǎn)、個(gè)人計(jì)算機(jī)(便攜式或非便攜式)、個(gè)人數(shù)字助理、智能電話(huà)、蜂窩或移動(dòng)電話(huà)、至少具有處理器和存儲(chǔ)器的其他移動(dòng)設(shè)備、和/或提供至少部分地由指令來(lái)控制的一個(gè)或多個(gè)處理器的其他設(shè)備。指令可以采用存儲(chǔ)器中的固件或其他軟件和/或?qū)S秒娐返男问?。具體而言,雖然可發(fā)生許多實(shí)施例在工作站或膝上型計(jì)算機(jī)上運(yùn)行,但是其他實(shí)施例也可以在其他計(jì)算設(shè)備上運(yùn)行,并且任何一個(gè)或多個(gè)這樣的設(shè)備都可以是給定實(shí)施例的一部分。
“多線(xiàn)程化”計(jì)算機(jī)系統(tǒng)是支持多個(gè)執(zhí)行線(xiàn)程的計(jì)算機(jī)系統(tǒng)。術(shù)語(yǔ)“線(xiàn)程”應(yīng)被理解為包括能夠或經(jīng)歷調(diào)度(以及可能同步)的任何代碼,并且也可以另一名稱(chēng)來(lái)為人所知,如“任務(wù)”、“進(jìn)程”或“協(xié)同例程”等。線(xiàn)程可以并行地、按順序、或以并行執(zhí)行(例如,多處理)和順序執(zhí)行(例如,時(shí)間分片)的組合來(lái)運(yùn)行。在各種配置中都已設(shè)計(jì)了多線(xiàn)程化環(huán)境。執(zhí)行線(xiàn)程可以并行地運(yùn)行,或者線(xiàn)程可以被組織為并行執(zhí)行,但是實(shí)際上輪流按順序執(zhí)行。例如,多線(xiàn)程化可以通過(guò)在多處理環(huán)境中在不同核上運(yùn)行不同線(xiàn)程、通過(guò)對(duì)單個(gè)處理器核上的不同線(xiàn)程進(jìn)行時(shí)間分片、或者通過(guò)時(shí)間分片和多處理器線(xiàn)程化的某種組合來(lái)實(shí)現(xiàn)。線(xiàn)程上下文切換可以例如由內(nèi)核的線(xiàn)程調(diào)度器、由用戶(hù)空間信號(hào)、或由用戶(hù)空間和內(nèi)核操作的組合來(lái)發(fā)起。線(xiàn)程可以輪流對(duì)共享數(shù)據(jù)進(jìn)行操作,或者例如每一線(xiàn)程都可以對(duì)其自己的數(shù)據(jù)進(jìn)行操作。
“邏輯處理器”或“處理器”是單個(gè)獨(dú)立硬件線(xiàn)程處理單元,如同時(shí)多線(xiàn)程實(shí)現(xiàn)中的核。作為另一示例,每核運(yùn)行兩個(gè)線(xiàn)程的超線(xiàn)程四核芯片具有8個(gè)邏輯處理器。邏輯處理器包括硬件。術(shù)語(yǔ)“邏輯”被用來(lái)防止給定芯片具有至多一個(gè)處理器的錯(cuò)誤結(jié)論;“邏輯處理器”和“處理器”在此可互換地使用。處理器可以是通用的,或者它們可被定制用于特定用途,例如圖形處理、信號(hào)處理、浮點(diǎn)算術(shù)處理、加密、I/O處理等等。
“多處理器”計(jì)算機(jī)系統(tǒng)是具有多個(gè)邏輯處理器的計(jì)算機(jī)系統(tǒng)。多處理器環(huán)境存在于各種配置中。在一給定配置中,所有處理器可在功能上相同,而在另一配置中,由于具有不同的硬件能力、不同的軟件分配或兩者,某些處理器可與其他處理器不同。取決于配置,處理器可在單個(gè)總線(xiàn)上緊密地彼此耦合,或它們可松散地耦合。在某些配置中,處理器共享一中央存儲(chǔ)器,在某些配置中,它們各自具有自己的本地存儲(chǔ)器,在某些配置中,存在共享和本地存儲(chǔ)器兩者。
“內(nèi)核”包括操作系統(tǒng)、系統(tǒng)管理程序、虛擬機(jī)、BIOS代碼、以及類(lèi)似的硬件接口軟件。
“代碼”指的是處理器指令、數(shù)據(jù)(包括常量、變量、以及數(shù)據(jù)結(jié)構(gòu))、或指令和數(shù)據(jù)兩者。
“程序”在本文中被廣泛地使用以包括應(yīng)用、內(nèi)核、驅(qū)動(dòng)程序、中斷處理程序、庫(kù)、以及程序員(也被成為開(kāi)發(fā)者)編寫(xiě)的其他代碼。
如此處所使用的“包括”允許附加元素(即,包括意味著包含),除非另外指明?!坝伞瓨?gòu)成”意味著基本上由……構(gòu)成或完全由……構(gòu)成。當(dāng)X中的非Y部分(如果有的話(huà))可以被自由更改、移除和/或添加而不在考慮所述權(quán)利要求時(shí)更改所要求保護(hù)的實(shí)施例的功能時(shí),X基本上由Y構(gòu)成。
“進(jìn)程”在此有時(shí)被用作計(jì)算科學(xué)領(lǐng)域的術(shù)語(yǔ),并且在該技術(shù)意義上涵蓋資源使用者,即例如協(xié)同例程、線(xiàn)程、任務(wù)、中斷處理程序、應(yīng)用進(jìn)程、內(nèi)科進(jìn)程、過(guò)程和對(duì)象方法?!斑M(jìn)程”在此還可被用作本領(lǐng)域的專(zhuān)利法術(shù)語(yǔ),例如,在描述與系統(tǒng)權(quán)利要求或制品(經(jīng)配置的存儲(chǔ)介質(zhì)權(quán)利要求)相對(duì)的過(guò)程權(quán)利要求時(shí)。類(lèi)似地,“方法”在此有時(shí)被用作計(jì)算科學(xué)領(lǐng)域內(nèi)的技術(shù)術(shù)語(yǔ)(一種“例程”)并且還被用作本領(lǐng)域的專(zhuān)利法術(shù)語(yǔ)(“過(guò)程”)。技術(shù)人員將理解在特定實(shí)例中旨在是什么含義,并且還將理解給定所要求保護(hù)的過(guò)程或方法(在專(zhuān)利法的意義上)有時(shí)可使用一個(gè)或多個(gè)過(guò)程或方法(在計(jì)算科學(xué)意義上)來(lái)實(shí)現(xiàn)。
“自動(dòng)地”指的是使用自動(dòng)化(例如,由用于這里所討論的特定操作和技術(shù)效果的軟件配置的通用計(jì)算硬件),與沒(méi)有自動(dòng)化相對(duì)。具體而言,“自動(dòng)”執(zhí)行的步驟在理論上或在一個(gè)人的意識(shí)中不是用手執(zhí)行的,但這些步驟可由人類(lèi)來(lái)啟動(dòng)或由人類(lèi)來(lái)交互式地引導(dǎo)。自動(dòng)化步驟使用機(jī)器執(zhí)行的以獲得在沒(méi)有由此提供的技術(shù)交互的情況下將不會(huì)實(shí)現(xiàn)的一個(gè)或多個(gè)技術(shù)效果。
技術(shù)人員理解技術(shù)效果是技術(shù)實(shí)施例的假定目標(biāo)。僅僅是在一實(shí)施例中涉及計(jì)算并且這些計(jì)算也可以在沒(méi)有技術(shù)組件(例如,通過(guò)紙和筆或甚至作為腦力步驟)的情況下執(zhí)行的事實(shí)不會(huì)移除技術(shù)效果的存在或更改該實(shí)施例的具體且技術(shù)的特性。
“在計(jì)算上”同樣指的是使用計(jì)算設(shè)備(至少是處理器加上存儲(chǔ)器),且排除了僅通過(guò)人類(lèi)思考或僅通過(guò)單獨(dú)的人類(lèi)動(dòng)作而獲得結(jié)果。例如,用紙和筆作算術(shù)不是如本文所理解的在計(jì)算上作算術(shù)。計(jì)算結(jié)果更快、更寬泛、更深、更準(zhǔn)確、更一致、更全面和/或以其他方式提供超出單獨(dú)的人類(lèi)表現(xiàn)范圍的技術(shù)效果。“計(jì)算步驟”是通過(guò)計(jì)算執(zhí)行的步驟。然而,“自動(dòng)地”和“在計(jì)算上”都不一定意味著“立即”?!霸谟?jì)算上”和“自動(dòng)地”在此可互換地使用。
“搶先式”意味著沒(méi)有來(lái)自用戶(hù)的直接請(qǐng)求。的確,用戶(hù)甚至可能直到已經(jīng)向該用戶(hù)呈現(xiàn)一實(shí)施例中的搶先式步驟的結(jié)果才意識(shí)到該步驟是可能的。除非另外指明,否則此處描述的任何計(jì)算和/或自動(dòng)化步驟都可以被搶先完成。
貫穿本文,對(duì)任選復(fù)數(shù)“(諸)”的使用意味著一個(gè)或多個(gè)所指示的特征存在。例如,“(諸)處理器”意味著“一個(gè)或多個(gè)處理器”或等效于“至少一個(gè)處理器”。
貫穿本文,除非另外明確表明,否則對(duì)過(guò)程中的某一步驟的任何引用都假定該步驟可直接由所關(guān)注的一方執(zhí)行和/或由該方通過(guò)介入機(jī)制和/或介入實(shí)體而間接地執(zhí)行,且仍然在該步驟的范圍內(nèi)。也就是說(shuō),除非直接執(zhí)行是被明確表明的要求,否則并不要求由關(guān)注方對(duì)步驟的直接執(zhí)行。例如,涉及某一關(guān)注方的對(duì)于目的或其他主體的諸如訪問(wèn)、添加、允許、更改、應(yīng)用、避免、行為、編譯、合成、包含、刪除、去串行化、指示、禁用、公開(kāi)、啟用、執(zhí)行、施加、格式化、檢查、解釋、定位、維護(hù)、管理、修改、獲得、解析、產(chǎn)生、禁止、讀取、敘述、參考、要求、串行化、存儲(chǔ)、提交、支持、定標(biāo)、利用、編寫(xiě)以及訪問(wèn)、被訪問(wèn)、添加、被添加之類(lèi)的動(dòng)作的步驟可涉及:諸如由某一其他方執(zhí)行的轉(zhuǎn)發(fā)、復(fù)制、上傳、下載、編碼、解碼、壓縮、解壓、加密、解密、認(rèn)證、調(diào)用等中間動(dòng)作,但仍被理解為是由該關(guān)注方直接執(zhí)行的。
在參考數(shù)據(jù)或指令時(shí),要理解這些項(xiàng)配置了計(jì)算機(jī)可讀存儲(chǔ)器和/或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),從而將其變換為特定物品,而非簡(jiǎn)單地存在于紙張上、人的頭腦中、或僅僅作為例如線(xiàn)路上的傳播的信號(hào)。除非在權(quán)利要求中另外指明,否則權(quán)利要求不涵蓋信號(hào)本身。出于美國(guó)專(zhuān)利審查的目的,存儲(chǔ)器或其它計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)不是美國(guó)專(zhuān)利商標(biāo)局(USPTO)對(duì)In re Nuijten案例的解釋下的可授予專(zhuān)利的主題的范圍之外的傳播信號(hào)或載波。
此外,盡管明顯相反,但將理解一方面的(a)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)和計(jì)算機(jī)可讀存儲(chǔ)器,和另一方面的(b)也被稱(chēng)為信號(hào)介質(zhì)的傳輸介質(zhì)之間的清楚區(qū)別。傳輸介質(zhì)是傳播信號(hào)或載波計(jì)算機(jī)可讀介質(zhì)。相反,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)和計(jì)算機(jī)可讀存儲(chǔ)器不是傳播信號(hào)或載波計(jì)算機(jī)可讀介質(zhì)。除非另外聲明,否則“計(jì)算機(jī)可讀介質(zhì)”意味著計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),而不是傳播信號(hào)本身。
操作環(huán)境
參考圖1,用于一個(gè)實(shí)施例的操作環(huán)境100可包括計(jì)算機(jī)系統(tǒng)102。計(jì)算機(jī)系統(tǒng)102可以是多處理器計(jì)算機(jī)系統(tǒng),或者也可以不是。操作環(huán)境可包括給定計(jì)算機(jī)系統(tǒng)中的一個(gè)或多個(gè)機(jī)器,它們可以群集的、客戶(hù)機(jī)-服務(wù)器聯(lián)網(wǎng)的、和/或?qū)Φ嚷?lián)網(wǎng)的。個(gè)體機(jī)器是一計(jì)算機(jī)系統(tǒng),且一組協(xié)同操作的機(jī)器也是計(jì)算機(jī)系統(tǒng)。給定計(jì)算機(jī)系統(tǒng)102可以例如用應(yīng)用被配置用于最終用戶(hù)、用于管理員、作為服務(wù)器、作為分布式處理節(jié)點(diǎn)、和/或以其他方式配置。
人類(lèi)用戶(hù)104可以經(jīng)由鍵入的文本、觸摸、語(yǔ)音、移動(dòng)、計(jì)算機(jī)視覺(jué)、姿勢(shì)和/或其它形式的I/O,通過(guò)使用顯示器、鍵盤(pán)和其它外圍設(shè)備106來(lái)與計(jì)算機(jī)系統(tǒng)102交互。用戶(hù)界面可支持實(shí)施例和一個(gè)或多個(gè)人類(lèi)用戶(hù)之間的交互。用戶(hù)界面可包括命令行界面、圖形用戶(hù)界面(GUI)、自然用戶(hù)界面(NUI)、語(yǔ)音命令界面和/或其它界面呈現(xiàn)。用戶(hù)界面可以在本地臺(tái)式計(jì)算機(jī)或例如智能電話(huà)上生成,或者它可以從web服務(wù)器生成并被發(fā)送到客戶(hù)機(jī)。用戶(hù)界面可被生成為服務(wù)的一部分并且它可以與諸如社交網(wǎng)絡(luò)服務(wù)等其它服務(wù)集成。給定操作環(huán)境包括支持這些不同的用戶(hù)界面生成選項(xiàng)和使用的設(shè)備和基礎(chǔ)結(jié)構(gòu)。
例如,自然用戶(hù)界面(NUI)操作可使用例如語(yǔ)音識(shí)別、觸摸和指示筆識(shí)別、屏幕上和屏幕附近的姿勢(shì)識(shí)別、空中姿勢(shì)、頭部和眼睛跟蹤、話(huà)音和語(yǔ)音、視覺(jué)、觸摸、姿勢(shì)、和/或機(jī)器智能的那些方法。NUI技術(shù)的一些示例包括觸敏顯示、話(huà)音和語(yǔ)音識(shí)別、意圖和目的理解、使用深度相機(jī)(如立體相機(jī)系統(tǒng)、紅外相機(jī)系統(tǒng)、RGB相機(jī)系統(tǒng)、以及這些的組合)的運(yùn)動(dòng)姿勢(shì)檢測(cè)、使用加速度計(jì)/陀螺儀的運(yùn)動(dòng)姿勢(shì)檢測(cè)、面部識(shí)別、3D顯示、頭部、眼睛和注視跟蹤、浸入式增強(qiáng)現(xiàn)實(shí)和虛擬現(xiàn)實(shí)系統(tǒng),所有這些都提供更自然的接口,以及用于使用電場(chǎng)傳感電極(腦電儀和相關(guān)工具)的傳感大腦活動(dòng)的技術(shù)。
技術(shù)人員將認(rèn)識(shí)到此處在“操作環(huán)境”下呈現(xiàn)的上述各方面和其它方面還可形成給定實(shí)施例的一部分。本文的標(biāo)題不旨在提供將特征嚴(yán)格地歸類(lèi)成實(shí)施例和非實(shí)施例特征類(lèi)別。
作為另一示例,游戲可以駐留在Microsoft XBOX(微軟公司的商標(biāo))服務(wù)器上。游戲可從控制臺(tái)購(gòu)買(mǎi)或者整體或部分在服務(wù)器上、在控制臺(tái)上、或在兩者上執(zhí)行。多個(gè)用戶(hù)可以使用標(biāo)準(zhǔn)控制器、空中姿勢(shì)、語(yǔ)音或使用諸如智能電話(huà)或平板等附隨設(shè)備來(lái)與該游戲交互。給定操作環(huán)境包括支持這些不同的使用場(chǎng)景的設(shè)備和基礎(chǔ)結(jié)構(gòu)。
系統(tǒng)管理員、開(kāi)發(fā)人員、工程技術(shù)人員、以及最終用戶(hù)各自都是特定類(lèi)型的用戶(hù)104。代表一個(gè)或多個(gè)人操作的自動(dòng)化代理、腳本、回放軟件等也可以是用戶(hù)104。在某些實(shí)施例中,存儲(chǔ)設(shè)備和/或聯(lián)網(wǎng)設(shè)備可以被認(rèn)為是外圍設(shè)備。圖1中未示出的其他計(jì)算機(jī)系統(tǒng)可以按各技術(shù)方式與計(jì)算機(jī)系統(tǒng)102進(jìn)行交互,或者例如通過(guò)網(wǎng)絡(luò)接口設(shè)備使用到網(wǎng)絡(luò)108的一個(gè)或多個(gè)連接與另一系統(tǒng)實(shí)施例進(jìn)行交互。
計(jì)算機(jī)系統(tǒng)102包括至少一個(gè)邏輯處理器110。計(jì)算機(jī)系統(tǒng)102與其他合適的系統(tǒng)一樣,還包括一個(gè)或多個(gè)計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112。介質(zhì)112可以是不同的物理類(lèi)型。介質(zhì)112可以是易失性存儲(chǔ)器、非易失性存儲(chǔ)器、被安裝就位的介質(zhì)、可移動(dòng)介質(zhì)、磁介質(zhì)、光學(xué)介質(zhì)、固態(tài)介質(zhì)和/或其他類(lèi)型的物理可持續(xù)介質(zhì)(而不僅僅是傳播信號(hào))。具體而言,諸如便攜式(即外置)硬盤(pán)驅(qū)動(dòng)器、CD、DVD、記憶棒、或其他可移動(dòng)非易失性存儲(chǔ)器介質(zhì)之類(lèi)的經(jīng)配置的介質(zhì)114在被插入或以其他方式安裝時(shí)可以在功能上變?yōu)橛?jì)算機(jī)系統(tǒng)的技術(shù)部分,從而使其內(nèi)容可被訪問(wèn)以供與處理器110交互并由處理器110使用??梢苿?dòng)的經(jīng)配置的介質(zhì)114是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112的示例。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112的某些其他示例包括內(nèi)置RAM、ROM、硬盤(pán)、以及其他不能被用戶(hù)104輕松地移走的存儲(chǔ)器存儲(chǔ)設(shè)備。為了符合當(dāng)前美國(guó)專(zhuān)利要求,計(jì)算機(jī)可讀介質(zhì)、計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)或計(jì)算機(jī)可讀存儲(chǔ)器都不是信號(hào)本身。
介質(zhì)114用可由處理器110執(zhí)行的指令116來(lái)配置;“可執(zhí)行”在此以寬泛的意義被使用以包括機(jī)器代碼、可解釋代碼、字節(jié)碼和/或在例如虛擬機(jī)上運(yùn)行的代碼。介質(zhì)114還被配置有數(shù)據(jù)118,該數(shù)據(jù)通過(guò)指令116的執(zhí)行被創(chuàng)建、修改、引用和/或以別的方式用于技術(shù)效果。指令116和數(shù)據(jù)118配置它們所駐留的存儲(chǔ)器或其它存儲(chǔ)介質(zhì)114;當(dāng)該存儲(chǔ)器或其它計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)是給定計(jì)算機(jī)系統(tǒng)的功能部分時(shí),指令116和數(shù)據(jù)118還配置該計(jì)算機(jī)系統(tǒng)。在某些實(shí)施例中,數(shù)據(jù)118的一部分代表了諸如產(chǎn)品特征、清單、物理測(cè)量值、設(shè)定、圖像、讀數(shù)、目標(biāo)、卷等等之類(lèi)的現(xiàn)實(shí)世界的項(xiàng)。這一數(shù)據(jù)還通過(guò)備份、還原、提交、中止、重新格式化和/或其它技術(shù)操作來(lái)變換。
盡管一實(shí)施例可被描述為被實(shí)現(xiàn)為由計(jì)算設(shè)備(例如臺(tái)式計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、智能電話(huà)、平板、膝上型計(jì)算機(jī)或游戲控制臺(tái))中的一個(gè)或多個(gè)處理器執(zhí)行的軟件指令,但這一描述并非意味著窮盡所有可能的實(shí)施例。技術(shù)人員將會(huì)理解還可經(jīng)常整體地或部分地直接用硬件邏輯來(lái)實(shí)現(xiàn)相同或相似功能,以提供相同或相似的技術(shù)效果。作為對(duì)軟件實(shí)現(xiàn)的替換或補(bǔ)充,本文描述的技術(shù)功能可以至少部分地由一個(gè)或多個(gè)硬件邏輯組件來(lái)執(zhí)行。作為示例并且不排除其它實(shí)現(xiàn),一實(shí)施例可包括硬件邏輯組件,諸如現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA)、專(zhuān)用集成電路(ASIC)、專(zhuān)用標(biāo)準(zhǔn)產(chǎn)品(ASSP)、片上系統(tǒng)組件(SOC)、復(fù)雜可編程邏輯器件(CPLD)和類(lèi)似組件。一實(shí)施例的組件可基于它們的輸入、輸出和/或它們的技術(shù)效果來(lái)被分組成各個(gè)交互功能模塊。
在一些所解說(shuō)的環(huán)境100中,一個(gè)或多個(gè)應(yīng)用或其它程序120具有伴隨例程124和其它部分的源代碼122。軟件開(kāi)發(fā)工具126(諸如提前編譯器128、即時(shí)編譯器130、調(diào)試器、和剖析器)通過(guò)產(chǎn)生和/或?qū)⒃创a122轉(zhuǎn)換成本機(jī)代碼、中間語(yǔ)言代碼、和/或另一經(jīng)編譯形式140來(lái)協(xié)助軟件開(kāi)發(fā)。源代碼122和其它信息通常被存儲(chǔ)在文件132中,文件132被保存在非易失性存儲(chǔ)112中,可以從非易失性存儲(chǔ)112將文件132讀取到易失性工作存儲(chǔ)器112中。更一般地,代碼122、工具126、以及圖中和/或本文中討論的其他項(xiàng)可各自部分地或全部地駐留于一個(gè)或多個(gè)硬件介質(zhì)112中,由此配置那些介質(zhì)以實(shí)現(xiàn)所有硬件-軟件合作操作中固有的“正?!?即,最小公分母)交互的技術(shù)效果。除了處理器110(CPU、ALU、FPU和/或GPU)、存儲(chǔ)器/存儲(chǔ)介質(zhì)112、顯示器134和電池之外,操作環(huán)境還可包括其它硬件,諸如總線(xiàn)、電源、有線(xiàn)和無(wú)線(xiàn)網(wǎng)絡(luò)接口卡和加速度計(jì),這些硬件的各自操作在此被描述為并非已經(jīng)對(duì)技術(shù)人員顯而易見(jiàn)。CPU是中央處理單元、ALU是算術(shù)和邏輯單元、FPU是浮點(diǎn)處理單元而GPU是圖形處理單元。
在每一環(huán)境100、101、103包括處理器110和存儲(chǔ)器112并且每一環(huán)境100、101、103還常常包括圖1中示出的其它項(xiàng)的意義上,操作環(huán)境100解說(shuō)編譯環(huán)境101和目標(biāo)運(yùn)行時(shí)環(huán)境103兩者,在編譯環(huán)境101中對(duì)給定程序進(jìn)行編譯,在目標(biāo)運(yùn)行時(shí)環(huán)境103中經(jīng)編譯程序執(zhí)行。然而,本領(lǐng)域技術(shù)人員理解,許多程序在一個(gè)環(huán)境中被編譯并且接著在一個(gè)不同的環(huán)境中被執(zhí)行,從而一張附圖幫助解說(shuō)環(huán)境101和103兩者的單純事實(shí)并不意味著那些環(huán)境之一中存在的每一事物都必然存在于另一環(huán)境中。具體地,編譯環(huán)境101將包含不一定存在于運(yùn)行時(shí)環(huán)境103中的靜態(tài)編譯器128以及源代碼122,而運(yùn)行時(shí)環(huán)境103將包含不一定存在于編譯環(huán)境101中的運(yùn)行時(shí)136。
給定編譯環(huán)境101可包括向開(kāi)發(fā)者提供一組協(xié)調(diào)的軟件開(kāi)發(fā)工具126(諸如編譯器、源代碼編輯器、剖析器、調(diào)試器等)的集成開(kāi)發(fā)環(huán)境(IDE)138。對(duì)于一些實(shí)施例,合適的操作環(huán)境100中的一些包括或幫助創(chuàng)建被配置成支持程序開(kāi)發(fā)的Visual開(kāi)發(fā)環(huán)境(微軟公司的商標(biāo))。一些合適的操作環(huán)境100包括環(huán)境(Oracle America有限公司的商標(biāo)),并且一些操作環(huán)境包括利用諸如C++或C#(“C-Sharp”)等語(yǔ)言的環(huán)境,但本文的教導(dǎo)適用于各種各樣的程序設(shè)計(jì)語(yǔ)言、程序設(shè)計(jì)模型、以及程序,以及本質(zhì)上適用于軟件開(kāi)發(fā)領(lǐng)域之外的使用內(nèi)聯(lián)的技術(shù)努力。
在圖1中以輪廓形式示出了一個(gè)或多個(gè)項(xiàng)來(lái)強(qiáng)調(diào)它們不一定是所示操作環(huán)境的一部分,但是可以與此處討論的操作環(huán)境中的各項(xiàng)互操作。未采用輪廓形式的項(xiàng)在任何附圖或任何實(shí)施例中也不一定是必需的。圖1是為了方便而提供的;在圖1中包括一項(xiàng)目不暗示該項(xiàng)目或?qū)υ擁?xiàng)目的描述使用在本發(fā)明之前是已知的。
系統(tǒng)
圖2幫助解說(shuō)了適用于一些實(shí)施例的架構(gòu)的各方面;下面還參考了其它附圖。在一個(gè)實(shí)施例中,計(jì)算機(jī)系統(tǒng)102包括采用一個(gè)或多個(gè)單核和/或多核處理器形式的邏輯處理器110、以及與邏輯處理器112可操作的通信的存儲(chǔ)器112。存儲(chǔ)器112包括RAM、硬盤(pán)、和/或其它易失性或非易失性存儲(chǔ)設(shè)備。計(jì)算機(jī)程序源代碼122駐留在存儲(chǔ)器中的至少一個(gè)源代碼文件132中。除非另外指明,在本文中假定,源代碼122沒(méi)有會(huì)阻止編譯814的慣常錯(cuò)誤,諸如編程語(yǔ)言句法錯(cuò)誤、未定義的標(biāo)識(shí)符、對(duì)未聲明函數(shù)的引用、靜態(tài)類(lèi)型違背等。在本文中也被稱(chēng)為提前編譯器或AOT編譯器的靜態(tài)編譯器128是系統(tǒng)102的一部分。
指令文檔202在存儲(chǔ)器112中駐留在計(jì)算機(jī)程序源代碼122的編譯部分640的外部。指令文檔202包括用人類(lèi)可讀軟件可解析格式206編寫(xiě)620的運(yùn)行時(shí)行為特征指令204。在一些實(shí)施例中,指令204用以下格式206中的至少一個(gè)來(lái)編寫(xiě):XML格式、JSON格式、YAML格式和/或SDL格式。當(dāng)XML格式或句法上類(lèi)似的格式被使用時(shí),指令文檔204包括元素224和屬性226;一些示例稍后在本文中給出。
如本文中使用的,“編譯部分”包括以至少一個(gè)編程語(yǔ)言636編寫(xiě)的源代碼語(yǔ)句,并且尤其包括具有由該編程語(yǔ)言定義的定界符的注釋。并且,根據(jù)C#(C-sharp)編程語(yǔ)言定義的屬性在源代碼中這些屬性出現(xiàn)在其中的編譯部分內(nèi)。
由于指令文檔202駐留在計(jì)算機(jī)程序源代碼122的任意編譯部分640的外部,所以源代碼和指令文檔物理上不關(guān)聯(lián),不同于例如C#屬性與其他C#源代碼關(guān)聯(lián)的方式。作為源代碼122和指令204之間分離的結(jié)果,源代碼122一般可用傳統(tǒng)方式來(lái)被使用634(雖然沒(méi)有獲得本文中討論的益處),而傳統(tǒng)IDE、傳統(tǒng)編譯器或不識(shí)別指令文檔的其他工具沒(méi)有給予對(duì)指令文檔202的任何關(guān)注。但是,源代碼122還可通過(guò)適當(dāng)修改的編譯器以符合指令204并根據(jù)本文中描述的各技術(shù)的方式來(lái)被編譯814,以獲得對(duì)應(yīng)的益處,諸如在程序的執(zhí)行816期間對(duì)該程序的運(yùn)行時(shí)行為特征的增加的控制。
在一些實(shí)施例中,運(yùn)行時(shí)行為特征指令204包括以下中的至少一個(gè):對(duì)于編譯器128的計(jì)算機(jī)程序源代碼122的類(lèi)型T是要求類(lèi)型208的指令204、對(duì)于編譯器128的源代碼122的類(lèi)型T是禁止類(lèi)型208的指令204、對(duì)于編譯器128的源代碼122的類(lèi)型成員M是要求類(lèi)型成員210的指令204或?qū)τ诰幾g器218的源代碼122的類(lèi)型成員M是禁止類(lèi)型成員210的指令204。在一些實(shí)施例中,類(lèi)型208和/或類(lèi)型成員210還可或可替代地通過(guò)使用指令204來(lái)被指定為任選的。
在一些實(shí)施例中,指令204包括以下中的至少一個(gè):對(duì)于編譯器128的程度D是類(lèi)型T的啟用程度212的指令204、對(duì)于編譯器的程度D對(duì)于類(lèi)型T禁用的指令204、對(duì)于編譯器的程度D對(duì)于類(lèi)型成員M啟用的指令204或?qū)τ诰幾g器的程度D對(duì)于類(lèi)型成員M禁用的指令204。
在由邏輯處理器110對(duì)適當(dāng)增強(qiáng)的編譯器128的執(zhí)行期間,編譯器128將計(jì)算機(jī)程序源代碼122的至少編譯部分640從源代碼文件132和/或中間語(yǔ)言文件132編譯814成至少一個(gè)本機(jī)代碼文件132或其它已編譯140文件,并且如由指令文檔202所指示地這么做。例如,當(dāng)指令204指定802動(dòng)態(tài)程度針對(duì)類(lèi)型T被啟用時(shí),一個(gè)創(chuàng)新編譯器128生成T的垃圾收集布局的描述以及T的實(shí)現(xiàn)接口列表,并且將該元數(shù)據(jù)映射到表示T的本機(jī)代碼。當(dāng)指令204指定另一類(lèi)型T1具有禁用反射但準(zhǔn)許自測(cè)的程度時(shí),這一編譯器128生成具有T的成員名稱(chēng)及其類(lèi)型的元數(shù)據(jù),但不創(chuàng)建到本機(jī)代碼或T的垃圾收集布局的描述的運(yùn)行時(shí)映射。這一編譯器128還生成用于接口方法和用于虛擬方法、用于在被調(diào)用時(shí)具有邊界校驗(yàn)的方法、以及用于在反射API與被調(diào)用方法的調(diào)用約定之間的調(diào)用約定轉(zhuǎn)換的彈跳代碼。響應(yīng)于指令204的編譯器128活動(dòng)或節(jié)制的其它示例和描述在以上標(biāo)識(shí)且通過(guò)援引納入于此的‘036申請(qǐng)中提供。
在一些實(shí)施例中,指令文檔202包括804至少一個(gè)指令204,其是以下參數(shù)運(yùn)行時(shí)行為特征指令214中的一個(gè):參數(shù)(Parameter)指令302、類(lèi)型參數(shù)(TypeParameter)指令304、或泛型參數(shù)(GenericParameter)指令306。在一些實(shí)施例中,指令文檔202包括804至少一個(gè)指令204,其是以下組運(yùn)行時(shí)行為特征指令216中的一個(gè):應(yīng)用(Application)指令402、庫(kù)(Library)指令404、匯編件(Assembly)指令406或命名空間(Namespace)指令408。在一些實(shí)施例中,指令文檔202包括804至少一個(gè)指令204,其是以下組分量運(yùn)行時(shí)行為特征指令218中的一個(gè):類(lèi)型(Type)指令702、類(lèi)型實(shí)例化(TypeInstantiation)指令704、方法(Method)指令706、方法實(shí)例化(MethodInstantiation)指令708、字段(Field)指令710、特性(Property)指令712或事件(Event)指令714。在一些實(shí)施例中也可使用642其他種類(lèi)的指令204來(lái)經(jīng)由元數(shù)據(jù)、到本機(jī)代碼的映射和/或通過(guò)靜態(tài)編譯器128對(duì)彈跳代碼的生成來(lái)控制806運(yùn)行時(shí)行為特征。
在一些實(shí)施例中,指令文檔202包括804敘述具有值502的程度212的至少一個(gè)指令204。例如,在一些實(shí)施例中,激活程度504指類(lèi)型實(shí)例的運(yùn)行時(shí)激活。在一些實(shí)施例中,瀏覽程度506指對(duì)各類(lèi)型的運(yùn)行時(shí)自測(cè)。在一些實(shí)施例中,運(yùn)行時(shí)序列化程度508指運(yùn)行時(shí)序列化和/或去序列化。在一些實(shí)施例中,動(dòng)態(tài)反射程度510指經(jīng)由反射的運(yùn)行時(shí)訪問(wèn)。在一些實(shí)施例中,靜態(tài)合成的序列化程度512指編譯時(shí)序列化和/或去序列化。在一些實(shí)施例中,指令具有以下程度值502中的一個(gè)或多個(gè):要求全部(Required-All)、要求公開(kāi)并且內(nèi)部(Required-PublicAndInternal)、要求公開(kāi)(Required-Public)、全部(All)、公開(kāi)且內(nèi)部(PublicAndInternal)、公開(kāi)(Public)、包括的(Included)、自動(dòng)(Auto)、或排除的(Excluded)。
在一些實(shí)施例中,創(chuàng)新編譯器128執(zhí)行指令116,指令116將至少一個(gè)合成規(guī)則222應(yīng)用到至少兩個(gè)運(yùn)行時(shí)行為特征指令204以產(chǎn)生一合成的運(yùn)行時(shí)行為特征指令220。合成規(guī)則222的示例在本文中稍后提供。
在一些實(shí)施例中,創(chuàng)新編譯器128執(zhí)行輸出本機(jī)代碼140的指令116,本機(jī)代碼140響應(yīng)于至少一個(gè)運(yùn)行時(shí)行為特征指令306來(lái)實(shí)例化泛型參數(shù)??墒褂檬煜さ姆盒蛯?shí)例化(generic instantiation)技術(shù),但是在這個(gè)示例中,該技術(shù)被創(chuàng)新指令文檔202控制。
在某些實(shí)施例中,諸如人類(lèi)用戶(hù)I/O設(shè)備(屏幕、鍵盤(pán)、鼠標(biāo)、圖形輸入板、話(huà)筒、揚(yáng)聲器、運(yùn)動(dòng)傳感器等等)之類(lèi)的外圍設(shè)備106將可以在操作上與一個(gè)或多個(gè)處理器110和存儲(chǔ)器進(jìn)行通信。然而,一實(shí)施例也可以深嵌入在技術(shù)系統(tǒng)中,以便沒(méi)有人類(lèi)用戶(hù)104直接與該實(shí)施例進(jìn)行交互。軟件進(jìn)程可以是用戶(hù)104。
在某些實(shí)施例中,該系統(tǒng)包括通過(guò)網(wǎng)絡(luò)連接的多個(gè)計(jì)算機(jī)。網(wǎng)絡(luò)接口設(shè)備可以使用例如諸如分組交換網(wǎng)絡(luò)接口卡、無(wú)線(xiàn)收發(fā)機(jī)或電話(huà)網(wǎng)絡(luò)接口之類(lèi)的組件提供對(duì)網(wǎng)絡(luò)108的接入,并可存在于給定計(jì)算機(jī)系統(tǒng)中。然而,一實(shí)施例也可以通過(guò)直接存儲(chǔ)器存取、可移動(dòng)非易失性介質(zhì)、或其他信息存儲(chǔ)-檢索和/或傳輸方法來(lái)傳遞技術(shù)數(shù)據(jù)和/或技術(shù)指令,或者,計(jì)算機(jī)系統(tǒng)中的一實(shí)施例可以在不與其他計(jì)算機(jī)系統(tǒng)進(jìn)行通信的情況下操作。
許多實(shí)施例駐留在單個(gè)設(shè)備上并且在單個(gè)設(shè)備上操作,諸如特定智能手機(jī)、特定平板或特定膝上型計(jì)算機(jī)或工作站或服務(wù)器箱。然而,一些更廣泛的實(shí)施例在“云”計(jì)算環(huán)境和/或“云”存儲(chǔ)環(huán)境中操作,其中計(jì)算服務(wù)不是自有的,而是按需提供的。例如,指令文檔202以及被該文檔202指導(dǎo)的創(chuàng)新AOT編譯器可以在聯(lián)網(wǎng)云中的開(kāi)發(fā)系統(tǒng)102上,經(jīng)編譯的代碼104可被存儲(chǔ)在云內(nèi)的其他設(shè)備(服務(wù)器)中以用于通過(guò)應(yīng)用市場(chǎng)來(lái)呈現(xiàn),并且購(gòu)買(mǎi)的/租用的應(yīng)用程序120可在又一云設(shè)備102(諸如消費(fèi)者的智能電話(huà)或平板)上執(zhí)行并配置顯示。
過(guò)程
圖6和圖8共同地在流程圖600中示出一些過(guò)程實(shí)施例。各附圖中示出或以其他方式公開(kāi)的技術(shù)過(guò)程可以在某些實(shí)施例中自動(dòng)地執(zhí)行,例如通過(guò)編譯器128在指令文檔202的控制之下并且需要極少或不需要同時(shí)發(fā)生的實(shí)況用戶(hù)輸入。除非另外指明,否則過(guò)程也可以部分自動(dòng)地且部分手動(dòng)地執(zhí)行。在一給定實(shí)施例中,可以重復(fù)過(guò)程的零個(gè)或更多個(gè)所示出的步驟,有可能利用不同的參數(shù)或數(shù)據(jù)來(lái)操作。一實(shí)施例中的各步驟也可按與圖6和8中列出的從上到下次序不同的次序來(lái)完成。步驟可以串行地、以部分重疊的方式、或完全并行地執(zhí)行。遍歷流程圖600以指出在過(guò)程中執(zhí)行的步驟的次序可以在過(guò)程的一次執(zhí)行與該過(guò)程的另一次執(zhí)行之間不同。流程圖遍歷次序也可以在一個(gè)過(guò)程實(shí)施例與另一過(guò)程實(shí)施例之間不同。各步驟還可以被省略、組合、重命名、重組、或以其他方式偏離所示出的流程,只要所執(zhí)行的過(guò)程是可操作的,并符合至少一個(gè)權(quán)利要求。
此處提供了幫助示出該技術(shù)的各方面的示例,但是在本文內(nèi)給出的示例并未描述所有可能的實(shí)施例。實(shí)施例不僅限于此處所提供的具體實(shí)現(xiàn)、布置、顯示、特征、方法或情形。給定實(shí)施例可包括例如附加的或不同的技術(shù)特征、機(jī)制、和/或數(shù)據(jù)結(jié)構(gòu),并可以以別的方式偏離此處所提供的示例。
在一些實(shí)施例中,人類(lèi)或軟件進(jìn)程用戶(hù)104從數(shù)字存儲(chǔ)112中的文件中獲得602指令文檔202,該文檔先前被存儲(chǔ)在數(shù)字存儲(chǔ)112中。作為示例,人類(lèi)用戶(hù)104可以是編寫(xiě)并檢查604指令文檔202的開(kāi)發(fā)者,而軟件進(jìn)程用戶(hù)可以是解析606文檔202的編譯器128或其他開(kāi)發(fā)時(shí)工具。在每種情況下,指令文檔202旨在幫助在運(yùn)行時(shí)環(huán)境103中提供對(duì)計(jì)算機(jī)程序120的類(lèi)型208和類(lèi)型成員210的運(yùn)行時(shí)行為特征的管理?!斑\(yùn)行時(shí)行為特征”的一些示例是自測(cè)、反射、動(dòng)態(tài)分派、向下類(lèi)型轉(zhuǎn)換、自修改程序代碼、動(dòng)態(tài)類(lèi)型校驗(yàn)以及即時(shí)編譯。對(duì)這些行為的“管理”包括要求它們、允許它們、阻止它們以及指示元數(shù)據(jù)、到本機(jī)代碼的映射、彈跳代碼和/或泛型實(shí)例化是否被需要來(lái)支持626它們。
運(yùn)行時(shí)環(huán)境103可以例如位于智能電話(huà)或平板中。一些環(huán)境103利用630縮減大小的運(yùn)行時(shí)136、632,縮減大小的運(yùn)行時(shí)與用于多語(yǔ)言平臺(tái)的熟悉的較大運(yùn)行時(shí)(如由例如微軟公司、谷歌公司、Oracle公司或Xamarin公司先前提供的)相比相對(duì)較小。一些實(shí)施例準(zhǔn)許程序120展現(xiàn)動(dòng)態(tài)行為,諸如在執(zhí)行816期間的反射同時(shí)避免624對(duì)JIT編譯器130的依賴(lài)。
計(jì)算機(jī)程序120具有可跨一個(gè)或多個(gè)文件132的源代碼122。源代碼122用至少一種數(shù)據(jù)類(lèi)型化的編程語(yǔ)言636來(lái)編寫(xiě),例如,C族語(yǔ)言、BASIC語(yǔ)言、公共語(yǔ)言基礎(chǔ)結(jié)構(gòu)語(yǔ)言之一,諸如在標(biāo)準(zhǔn)ECMA-334和ECMA-335中討論的那些語(yǔ)言、或者許多其它熟悉的或之后開(kāi)發(fā)的數(shù)據(jù)類(lèi)型化的編程語(yǔ)言636之一。
在一些實(shí)施例中,用戶(hù)通過(guò)讀取已經(jīng)被生成的指令文檔文件來(lái)獲得602指令文檔。在一些實(shí)施例中,用戶(hù)通過(guò)生成指令文檔來(lái)獲得602它。指令文檔202包含采用620也能夠被軟件解析的格式206(諸如XML、JSON、YAML、或SDL格式)的人類(lèi)可讀指令204。與某些C#編碼以及用語(yǔ)義屬性來(lái)注釋源代碼122的其他辦法不同,指令文檔202的指令204不與該指令204所涉及的計(jì)算機(jī)程序120的源代碼122交織。
作為維持618這種分離的結(jié)果,對(duì)于對(duì)指令的有效使用而言,開(kāi)發(fā)者104對(duì)源代碼122的訪問(wèn)不是必要的。具體而言,程序的源代碼不被需要就能通過(guò)添加指令204、刪除指令204或通過(guò)改變類(lèi)型、類(lèi)型成員、程度和/或指令的程度值來(lái)更改指令204來(lái)修改608適用的指令文檔202。維持618源代碼和指令之間的分離還使得一給定程序120清楚地服從不同的指令文檔202成為可能。例如,一給定程序的若干個(gè)指令文檔202中的每一個(gè)可針對(duì)不同的運(yùn)行時(shí)環(huán)境103被定制622以反映相比于智能手機(jī)上在工作站上更大的存儲(chǔ)和/或更快的處理的可用性。
在被用戶(hù)檢查604后,指令文檔公開(kāi)一個(gè)或多個(gè)運(yùn)行時(shí)行為特征指令204。編譯器128進(jìn)行的解析606可類(lèi)似地在文檔202被提交610到編譯器128之后來(lái)定位612指令204。例如,一指令204可指定802,計(jì)算機(jī)程序源代碼122的類(lèi)型T在環(huán)境103中是要求類(lèi)型208,或者T在環(huán)境103中是可任選類(lèi)型,或者T在環(huán)境103中是禁止類(lèi)型。類(lèi)似地,另一指令可以指定802,計(jì)算機(jī)程序源代碼的類(lèi)型成員M在環(huán)境130中是要求類(lèi)型成員210,是可任選的,或者在環(huán)境中是禁止的。在一些情況下,指令指定802程度D在環(huán)境中針對(duì)類(lèi)型T被啟用或指定D被禁用。類(lèi)似地,在一些情況下,指令指定802程度D在環(huán)境中針對(duì)類(lèi)型成員M被啟用或指定D在環(huán)境103中針對(duì)M被禁用。
在一些實(shí)施例中,指令204可被直接提交到創(chuàng)新運(yùn)行時(shí)136以模擬它們的影響,而無(wú)需進(jìn)行干預(yù)的編譯814。例如,模擬運(yùn)行時(shí)可以是“胖”運(yùn)行時(shí),其通過(guò)墊片(shim)228來(lái)過(guò)濾動(dòng)態(tài)訪問(wèn)請(qǐng)求,該墊片228基于接收到的指令來(lái)允許或拒絕請(qǐng)求。
在一些實(shí)施例中,指令204可以能夠引用808程序120分量組810;一些實(shí)例包括這些組指令216:應(yīng)用(Application)指令、庫(kù)(Library)指令、匯編件(Assembly)指令、命名空間(Namespace)指令。在一些實(shí)施例中,指令可引用808一組中的各個(gè)分量810,諸如在這些組分量指令218中:類(lèi)型(Type)指令、類(lèi)型實(shí)例化(TypeInstantiation)指令、方法(Method)指令、方法實(shí)例化(MethodInstantiation)指令、字段(Field)指令、特性(Property)指令、事件(Event)指令。
在一些實(shí)施例中,指令可以能夠參考808程度212,諸如:指代經(jīng)由反射的對(duì)類(lèi)型實(shí)例的運(yùn)行時(shí)激活的激活程度;指代經(jīng)由反射允許對(duì)類(lèi)型的運(yùn)行時(shí)自測(cè)的瀏覽程度;指代經(jīng)由反射的運(yùn)行時(shí)訪問(wèn)的動(dòng)態(tài)程度;指代啟用對(duì)基于反射的序列化和/或去序列化的反射支持的運(yùn)行時(shí)序列化程度;或者指代采用特定格式(諸如XML或JSON)的靜態(tài)合成的序列化的靜態(tài)序列化程度。在一些實(shí)施例中,支持DataContractSerializer(數(shù)據(jù)合約序列化器)(DCS)類(lèi)序列化器。在一些實(shí)施例中,運(yùn)行時(shí)序列化程度允許基于反射的序列化器和去序列化器對(duì)類(lèi)型、其屬性和字段的反射訪問(wèn),這將運(yùn)行時(shí)序列化程度與靜態(tài)序列化程度XML/DCS/JSON序列化支持區(qū)分開(kāi)來(lái)。在一些實(shí)施例中,指令204中準(zhǔn)許的程度值502包括以下各項(xiàng)中的一個(gè)或多個(gè):要求全部(Required-All)、要求公開(kāi)并且內(nèi)部(Required-PublicAndInternal)、要求公開(kāi)(Required-Public)、全部(All)、公開(kāi)且內(nèi)部(PublicAndInternal)、公開(kāi)(Public)、包括的(Included)、自動(dòng)(Auto)、排除的(Excluded)。在給定的實(shí)施例和環(huán)境103中,各個(gè)程度可以適用于類(lèi)型、它們的實(shí)例構(gòu)造函數(shù)、它們的特性設(shè)置函數(shù)、它們的特性獲得函數(shù)、字段和/或所有類(lèi)型成員。在一些實(shí)施例中,程度可被自動(dòng)地傳播到一類(lèi)型的組成字段和屬性,并接著被傳播到這些字段和屬性的類(lèi)型等等。
在一些實(shí)施例中,指令204被提交610給提前編譯器128以指示以下內(nèi)容以供在編譯期間使用:程度D是否適用于類(lèi)型T、程度D是否適用于類(lèi)型成員M、類(lèi)型T是否是要求的以及類(lèi)型成員M是否是要求的。如果類(lèi)型T或類(lèi)型成員M不是要求的(根據(jù)指令文檔),則編譯器和運(yùn)行時(shí)可以通過(guò)分別略去對(duì)T或?qū)的動(dòng)態(tài)支持626來(lái)相應(yīng)地降低空間和處理要求。為了確定所提交的指令針對(duì)給定類(lèi)型T或給定類(lèi)型成員M指示了什么,在一些實(shí)施例中,編譯器128尋找適用于T(或適用于M,按具體情形而定)的所有指令,應(yīng)用614合成規(guī)則222以產(chǎn)生合成指令220,并且接著根據(jù)合成指令來(lái)確定結(jié)果。編譯器128接著如由指令文檔所指示地將計(jì)算機(jī)程序源代碼的至少一部分編譯成本機(jī)代碼。
在一些實(shí)施例中,指令可以迫使616泛型實(shí)例化的存在,假設(shè)給出指令的編譯器128符合這些指令。在一些實(shí)施例中,指令可通過(guò)使用參數(shù)指令214中的一個(gè)(即,參數(shù)(Parameter)指令、類(lèi)型參數(shù)(TypeParameter)指令或泛型參數(shù)(GenericParameter)指令)來(lái)做出812對(duì)類(lèi)型的間接引用。
經(jīng)配置的介質(zhì)
一些實(shí)施例包括經(jīng)配置的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)112。介質(zhì)112可包括盤(pán)(磁盤(pán)、光盤(pán),或其他)、RAM、EEPROM或其他ROM、和/或其他可配置存儲(chǔ)器,特別包括計(jì)算機(jī)可讀介質(zhì)(而不僅僅是傳播信號(hào))。經(jīng)配置的存儲(chǔ)介質(zhì)可以特別地是諸如CD、DVD或閃存之類(lèi)的可移動(dòng)存儲(chǔ)介質(zhì)114??梢允强梢苿?dòng)的或不可移動(dòng)的且可以是易失性的或非易失性的通用存儲(chǔ)器可被配置到使用諸如指令204以及顯式或代碼隱式指令合成規(guī)則222等項(xiàng)目的實(shí)施例中來(lái)形成配置的介質(zhì),這些項(xiàng)目采用從可移動(dòng)介質(zhì)114和/或諸如網(wǎng)絡(luò)連接等另一源讀取的數(shù)據(jù)118和指令116的形式。經(jīng)配置的介質(zhì)112能夠使計(jì)算機(jī)系統(tǒng)執(zhí)行本文所公開(kāi)的用于管理運(yùn)行時(shí)行為特征的技術(shù)過(guò)程步驟。如此,圖1到8幫助示出了經(jīng)配置的存儲(chǔ)介質(zhì)實(shí)施例和過(guò)程實(shí)施例,以及系統(tǒng)和過(guò)程實(shí)施例。具體而言,圖6和/或圖8中示出的各過(guò)程步驟中的任一步驟或本文以其他方式教導(dǎo)的任一步驟可被用來(lái)幫助配置存儲(chǔ)介質(zhì)來(lái)形成經(jīng)配置的介質(zhì)實(shí)施例。
其他示例
下面提供了額外的細(xì)節(jié)和設(shè)計(jì)考慮。如同此處的其他示例,在給定實(shí)施例中,所描述的特征可以單獨(dú)地使用和/或組合地使用,或根本不使用。
那些本領(lǐng)域的技術(shù)人員將理解,實(shí)現(xiàn)細(xì)節(jié)可以涉及諸如特定API和特定示例程序之類(lèi)的特定代碼,且因此不必出現(xiàn)在每個(gè)實(shí)施例中。本領(lǐng)域的技術(shù)人員還將理解,在討論細(xì)節(jié)時(shí)所使用的程序標(biāo)識(shí)符和某些其他術(shù)語(yǔ)是針對(duì)具體實(shí)現(xiàn)的,且如此不必涉及每個(gè)實(shí)施例。盡管如此,雖然它們不一定需要出現(xiàn)在這里,但是提供了這些細(xì)節(jié),因?yàn)樗鼈兺ㄟ^(guò)提供上下文可以幫助一些讀者,和/或可以示出此處所討論的技術(shù)的許多可能的實(shí)現(xiàn)中的一些。
以下討論部分地從某種項(xiàng)目N文檔中導(dǎo)出。項(xiàng)目N是微軟公司的多部分開(kāi)發(fā)項(xiàng)目,其包括但不限于,程序運(yùn)行時(shí)支持和編譯器技術(shù)方面的發(fā)展。一些項(xiàng)目N程序和/或文檔的各方面與在此描述的各實(shí)施方式的各方面相一致或以其它方式示出這些方面。然而,要理解,項(xiàng)目N文檔和/或?qū)崿F(xiàn)選擇不必約束這些實(shí)施例的范圍,且同樣地項(xiàng)目N和/或其文檔將很好地包含位于這些實(shí)施例范圍外的特征。還要理解,下面的討論是部分作為對(duì)未必是本領(lǐng)域技術(shù)人員的讀者的幫助的一部分來(lái)提供的,并且因此可能包含和/或省略了其下面的引述沒(méi)有被閹割要求來(lái)支持本公開(kāi)的細(xì)節(jié)。
具體句法
在一些實(shí)現(xiàn)中,在格式206中使用的用于指定802指令204的語(yǔ)言的具體句法716包括一組XML元素224;當(dāng)被告知本文中的教導(dǎo)時(shí),本領(lǐng)域的技術(shù)人員可使用XSD和XML的一般知識(shí)來(lái)在.xsd文件中指定這些元素224。
在一個(gè)實(shí)現(xiàn)中,元素224和它們的關(guān)系如以下在特定具體句法716內(nèi)那樣。指令(Directive)元素是文檔的最外層的元素,并可包括任意數(shù)量的庫(kù)(Library)元素和任選的應(yīng)用(Application)元素。庫(kù)和應(yīng)用元素可包括任意數(shù)量的匯編件(Assembly)、命名空間(Namespace)、類(lèi)型(Type)或類(lèi)型實(shí)例化(TypeInstantiation)元素。匯編件元素可包括任意數(shù)量的命名空間(Namespace)、類(lèi)型(Type)或類(lèi)型實(shí)例化(TypeInstantiation)元素。命名空間元素可包括任意數(shù)量的命名空間(Namespace)、類(lèi)型(Type)或類(lèi)型實(shí)例化(TypeInstantiation)元素。在一些實(shí)現(xiàn)中,如果命名空間元素不在一特定匯編件元素內(nèi),則命名空間元素可與任意數(shù)量的匯編件元素相關(guān)聯(lián)。類(lèi)型或類(lèi)型實(shí)例化元素可包括任意數(shù)量的類(lèi)型(Type)、方法(Method)、特性(Property)、字段(Field)、事件(Event)、類(lèi)型實(shí)例化(TypeInstantiation)或方法實(shí)例化(MethodInstantiation)元素,并且類(lèi)型元素可包括任意數(shù)量的泛型參數(shù)(GenericParameter)元素。方法元素可包括任意數(shù)量的泛型參數(shù)(GenericParameter)、類(lèi)型參數(shù)(TypeParameter)或參數(shù)(Parameter)元素。
在這個(gè)實(shí)現(xiàn)中,指令元素224具有名為xmlns的屬性226,其具有標(biāo)識(shí)元數(shù)據(jù)模式(例如,微軟元數(shù)據(jù)模式或針對(duì)程序120的另一元數(shù)據(jù)方案)的URI。庫(kù)元素224具有名為名稱(chēng)(Name)的屬性226,其值給出庫(kù)的名稱(chēng)。應(yīng)用元素224具有給出程度212的名稱(chēng)的屬性226。匯編件元素224具有以下屬性226:名稱(chēng),其值給出匯編件的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。命名空間元素224具有以下屬性226:名稱(chēng),其值給出命名空間的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。類(lèi)型元素224具有以下屬性226:名稱(chēng),其值給出類(lèi)型的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。類(lèi)型實(shí)例化元素具有以下屬性226:名稱(chēng),其值給出要被實(shí)例化的泛型類(lèi)型的名稱(chēng);自變量(Argument),其值給出要在實(shí)例化中被用為參數(shù)的類(lèi)型(類(lèi)型參數(shù)的具體句法可以類(lèi)似于例如C#語(yǔ)言中的類(lèi)型命名);以及給出程度212的名稱(chēng)的屬性226。字段、特性或事件元素224具有以下屬性226:名稱(chēng),其值給出字段、特性或事件的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。方法元素224具有以下屬性226:名稱(chēng),其值給出方法的名稱(chēng);簽名(Signature),其值給出方法的參數(shù)簽名;以及給出程度212的名稱(chēng)的屬性226。方法實(shí)例化元素224具有以下屬性226:名稱(chēng),其值給出要被實(shí)例化的泛型方法的名稱(chēng);簽名,其值給出要被實(shí)例化的泛型方法的參數(shù)簽名;自變量,其值給出要在實(shí)例化中被用為自變量的類(lèi)型;以及給出程度212的名稱(chēng)的屬性226。泛型參數(shù)元素224具有以下屬性226:名稱(chēng),其值給出泛型參數(shù)的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。類(lèi)型參數(shù)元素224具有以下屬性226:名稱(chēng),其值給出參數(shù)的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。參數(shù)元素224具有以下屬性226:名稱(chēng),其值給出參數(shù)的名稱(chēng);以及給出程度212的名稱(chēng)的屬性226。
在這個(gè)實(shí)現(xiàn)中,可作為屬性226出現(xiàn)的程度的名稱(chēng)包括但不限于:激活(Activate)、瀏覽(Browse)、動(dòng)態(tài)(Dynamic)、序列化(Serialize)、Xml序列化器(XmlSerializer)、數(shù)據(jù)合約序列化器(DataContractSerializer)、數(shù)據(jù)合約Json序列化器(DataContractJsonSerializer)。當(dāng)程度的名稱(chēng)作為字段、特性、事件、方法或方法實(shí)例化元素的屬性226出現(xiàn)時(shí),在這個(gè)實(shí)現(xiàn)中可能的值502是:排除的(Excluded)、自動(dòng)(Auto)、包括的(Included)、要求(Required)。當(dāng)程度的名稱(chēng)作為泛型參數(shù)、類(lèi)型參數(shù)或參數(shù)元素224的屬性226出現(xiàn)時(shí),在這個(gè)實(shí)現(xiàn)中其可能的值502是:公開(kāi)(Public)、公開(kāi)且內(nèi)部(PublicAndInternal)、全部(All)、要求公開(kāi)(Required-Public)、要求公開(kāi)并且內(nèi)部(Required-PublicAndInternal)、要求全部(Required All)。當(dāng)程度的名稱(chēng)作為應(yīng)用、匯編件、命名空間、類(lèi)型或類(lèi)型實(shí)例化元素224的屬性226出現(xiàn)時(shí),在這個(gè)實(shí)現(xiàn)中其可能的值502是:排除(Excluded)、自動(dòng)(Auto)、公開(kāi)(Public)、公開(kāi)且內(nèi)部(PublicAndInternal)、全部(All)、要求公開(kāi)(Required-Public)、要求公開(kāi)并且內(nèi)部(Required-PublicAndInternal)、要求全部(Required All)。
抽象句法
在特定實(shí)現(xiàn)的上下文中,可通過(guò)諸如以下的步驟從具體句法716中導(dǎo)出指令204的抽象句法718。用“指令”來(lái)替換對(duì)“元素”的每個(gè)使用。對(duì)于表示可包括其他元素的元素224的指令204,引入子(Children)特性,其值是表示被包括在原始元素中的元素的指令集。對(duì)于表示除了指令之外的元素224的指令204,引入父(Parent)特性,其值是表示包括所表示的元素的元素的指令。忽略指令的xmlns屬性。用“特性”來(lái)替換對(duì)“屬性”的每個(gè)使用。用對(duì)于方法簽名和泛型自變量更抽象的編碼來(lái)替換簽名和自變量值;“更抽象”意味著“較少因?qū)崿F(xiàn)而異的”。使用以下映射來(lái)用結(jié)構(gòu)化值替換程度值。
在這個(gè)抽象句法導(dǎo)出過(guò)程中,程度值到結(jié)構(gòu)化值的映射如下:
·Excluded(排除的)→{Required(要求)=false(假),Inclusion(包含)=Excluded(排除的)}
·Auto(自動(dòng))→{Required(要求)=false(假),Inclusion(包含)=Auto(自動(dòng))}
·Included(包括的)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的)}
·Required(要求)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的)}
·Public(公開(kāi))→{Required(要求)=false(假),Inclusion(包含)=Included(包括的),Contained(含有的)=Public(公開(kāi))}
·PublicAndInternal(公開(kāi)且內(nèi)部)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的),Contained(含有的)=PublicAndInternal(公開(kāi)且內(nèi)部)}
·All(所有)→{Required(要求)=false(假),Inclusion(包含)=Included(包括的),Contained(含有的)=All(所有)}
·Required Public(要求公開(kāi))→{Required(要求)=true(真),Inclusion(包含)=Included(包括的),Contained(含有的)=Public(公開(kāi))}
·Required PublicAndInternal(要求公開(kāi)并且內(nèi)部)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的),Contained(含有的)=PublicAndInternal(公開(kāi)且內(nèi)部)}
·Required All(要求全部)→{Required(要求)=true(真),Inclusion(包含)=Included(包括的),Contained(含有的)=All(全部)}
具有語(yǔ)言設(shè)計(jì)領(lǐng)域的普通技能的人將能夠想象各種映射到這樣的抽象句法718的具體句法716。
程度的含義
盡管程度212的精確語(yǔ)義可在各實(shí)現(xiàn)之間不同,但是以下程度集或其子集可能是感興趣的:
·激活(Activate):指代類(lèi)型實(shí)例的運(yùn)行時(shí)激活。應(yīng)用到各類(lèi)型、它們的實(shí)例構(gòu)造函數(shù)以及特性設(shè)置函數(shù)。
·瀏覽(Borwse):指代對(duì)類(lèi)型的運(yùn)行時(shí)自測(cè)。應(yīng)用到各類(lèi)型和所有類(lèi)型成員。
·動(dòng)態(tài)(Dynamic):指代經(jīng)由反射的運(yùn)行時(shí)訪問(wèn)。應(yīng)用到各類(lèi)型和所有類(lèi)型成員。
·序列化(Serialize):指代經(jīng)由反射的運(yùn)行時(shí)序列化和去序列化。應(yīng)用到類(lèi)型、它們的實(shí)例構(gòu)造函數(shù)、字段以及特性設(shè)置函數(shù)和取得函數(shù)。在一些實(shí)現(xiàn)中被自動(dòng)地傳播到這些字段和特性的類(lèi)型。
·Xml序列化器(XmlSerializer):指代到XML的靜態(tài)合成的序列化。應(yīng)用到各類(lèi)型。
·數(shù)據(jù)合約序列化器(DataContractSerializer):指代針對(duì)數(shù)據(jù)合約(DataContract)的靜態(tài)合成的序列化。應(yīng)用到各類(lèi)型。
·數(shù)據(jù)合約Json序列化器(DataContractJsonSerializer):指代將JSON用作格式的針對(duì)DataContract的靜態(tài)合成的序列化。應(yīng)用到各類(lèi)型。
在一些情況下,程度可被添加或移除,而無(wú)需對(duì)現(xiàn)有文檔202做出任何改變。為了滿(mǎn)足特定程度的語(yǔ)義要求,一種方式可引入規(guī)則來(lái)自動(dòng)地將程度傳播到?jīng)]有被這個(gè)機(jī)制注釋的類(lèi)型或成員,如例如在‘036申請(qǐng)的納入的公開(kāi)中討論的那樣。
指令應(yīng)用和合成
在一些實(shí)施例中,指令文檔202回答以下問(wèn)題:程度D應(yīng)用到類(lèi)型T還是類(lèi)型成員M?類(lèi)型T或類(lèi)型成員M是要求的嗎?回答這些問(wèn)題中的任一可涉及這些步驟:定位612應(yīng)用到T或M的所有指令;將合成規(guī)則222應(yīng)用614到適用的指令來(lái)產(chǎn)生合成指令220;從合成指令中確定642回答。指令應(yīng)用和合成中的每者在以下更加詳細(xì)地討論。
指令應(yīng)用
在一些實(shí)施例中,如果以下條件之一成立,則指令204應(yīng)用到類(lèi)型T:
·指令是應(yīng)用(Application)。
·指令是命名空間(Namespace),具有作為匯編件(Assembly)的非直接或間接的父,并且指令的完整命名空間名稱(chēng)匹配T的完整名稱(chēng)的主要子串。
·指令是匯編件(Assembly)并且指令的名稱(chēng)(Name)特性匹配包含T的匯編件的名稱(chēng)。在一些實(shí)現(xiàn)中,通配符是可能的,以避免對(duì)于精確匹配的需要。
·指令是命名空間(Namespace),具有作為匯編件(Assembly)的帶有匹配包括T的匯編件的名稱(chēng)的名稱(chēng)(Name)的直接或間接的父,并且指令的完整命名空間名稱(chēng)匹配T的完整名稱(chēng)的主要子串。
·T不是泛型實(shí)例化,指令是類(lèi)型(Type),具有作為匯編件(Assembly)的帶有匹配包括T的匯編件的名稱(chēng)的名稱(chēng)(Name)的直接或間接的父,并且指令的完整類(lèi)型名稱(chēng)匹配T的完整名稱(chēng)或T的完整名稱(chēng)的主要子串。
·T是泛型實(shí)例化,指令的類(lèi)型實(shí)例化(TypeInstantiation),指令被解釋為將類(lèi)型(Type)應(yīng)用到T的未經(jīng)實(shí)例化的泛型類(lèi)型,并且指令的自變量(Argument)特性表示等效于T的自變量類(lèi)型的類(lèi)型列表。
·指令是泛型參數(shù)(GenericParameter),并且T作為泛型自變量出現(xiàn),其匹配在指令的父所應(yīng)用到的類(lèi)型或方法的實(shí)例化中由指令的名稱(chēng)(Name)特性所命名的泛型參數(shù)。
·指令是參數(shù)(Parameter),并且T作為自變量的靜態(tài)類(lèi)型出現(xiàn),其匹配在對(duì)指令的父所應(yīng)用到的方法的調(diào)用中由指令的名稱(chēng)(Name)特性所命名的參數(shù)。
·指令是類(lèi)型參數(shù)(TypeParameter),并且T作為T(mén)ypeOf(.......的類(lèi)型)表達(dá)式的操作對(duì)象來(lái)出現(xiàn),其是匹配在對(duì)指令的父所應(yīng)用到的方法的調(diào)用中由指令的名稱(chēng)(Name)特性所命名的參數(shù)的自變量。在一替代方式中,類(lèi)型參數(shù)(TypeParameter)處理被增強(qiáng)以允許用其他方式找出System(系統(tǒng)).Type(類(lèi)型)的值,諸如跟蹤typeof是否在調(diào)用一調(diào)用被標(biāo)記的方法的方法中被使用。
在一些實(shí)施例中,如果這些條件之一成立,則指令204應(yīng)用到成員M:
·指令應(yīng)用到包括M的類(lèi)型。
·M是字段、特性、事件或方法,指令是對(duì)應(yīng)的字段、特性、事件或方法,指令的父(Parent)應(yīng)用到包括M的類(lèi)型,指令的名稱(chēng)(Name)特性匹配M的名稱(chēng),并且M不是方法或者指令不具有簽名(Signature)特性,或者簽名(Signature)特性匹配M的參數(shù)簽名。
在一些實(shí)施例中,命名空間(Namespace)指令的完整命名空間名稱(chēng)被確定,由此:
·如果指令的父(Parent)特性是應(yīng)用(Application)、庫(kù)(Library)或匯編件(Assembly),則指令的完整命名空間名稱(chēng)是指令的名稱(chēng)(Name)特性的值。
·否則,指令的父(Parent)特性必然是命名空間(Namespace),并且指令的完整命名空間名稱(chēng)是父的完整命名空間名稱(chēng)連結(jié)有用“.”連結(jié)的指令的名稱(chēng)(Name)特性的值。
在一些實(shí)施例中,類(lèi)型(Type)指令的完整類(lèi)型名稱(chēng)被確定,由此:
·如果指令的父(Parent)特性是應(yīng)用(Application)、庫(kù)(Library)或匯編件(Assembly),則指令的完整類(lèi)型名稱(chēng)是指令的名稱(chēng)(Name)特性的值。
·如果指令的父(Parent)特性是命名空間(Namespace),則指令的完整類(lèi)型名稱(chēng)是父的完整命名空間名稱(chēng)連結(jié)有用“.”連結(jié)的指令的名稱(chēng)(Name)特性的值。
·如果指令的父(Parent)特性是類(lèi)型(Type)或類(lèi)型實(shí)例化(TypeInstantiation),則指令的完整類(lèi)型名稱(chēng)是父的完整類(lèi)型名稱(chēng)連結(jié)有用“.”連結(jié)的指令的名稱(chēng)(Name)特性的值。
·類(lèi)型實(shí)例化(TypeInstantiation)指令的完整類(lèi)型名稱(chēng)是被解釋為類(lèi)型(Type)的指令的完整類(lèi)型名稱(chēng)連結(jié)有用“<”連接的用“>”連結(jié)的自變量類(lèi)型的完整類(lèi)型名稱(chēng)的逗號(hào)分割的列表。
·在一些實(shí)現(xiàn)中,類(lèi)型的完整名稱(chēng)如由C#語(yǔ)言指定的那樣。
指令合成
在一些實(shí)施例中,形成應(yīng)用到類(lèi)型T或成員M的指令集的合成根據(jù)以下規(guī)則222來(lái)進(jìn)行:
·如果沒(méi)有指令應(yīng)用到T或M,則合成是空的。
·如果只有一個(gè)指令應(yīng)用到T或M,則合成是該指令。
·如果多于一個(gè)的指令應(yīng)用到T或M,則指令中的兩個(gè)被選擇以用于合成以及接著被構(gòu)成,并接著用該合成來(lái)替換兩個(gè)指令。重復(fù)直到只有一個(gè)指令剩余,并且該指令是合成。
并且,為了選擇兩個(gè)指令用于合成,將各指令排序?yàn)椴糠钟行?,其中一指令在作為其直接或間接的父(Parent)的任一指令之前,并且選擇前兩個(gè)指令。如果指令D1具有作為直接或間接的父(Parent)的指令D2,則D1和D2的合成使用這些規(guī)則222來(lái)形成:
·如果給定程度DG存在于D1中,則合成中DG的值是D1中DG的值。
·否則,如果DG存在于D2中,則合成中DG的值是D2中DG的值。
·否則,DG不存在于合成中。
·合成具有與D2的父(Parent)相同的父。
在一些實(shí)施例中,如果指令D1和D2都不具有作為直接或間接的父(Parent)的對(duì)方,則D1和D2的合成使用這些規(guī)則222來(lái)形成:
·如果給定程度DG存在于D1中但不存在于D2中,則合成中DG的值是D1中DG的值。
·如果DG存在于D2中但不存在于D1中,則合成中DG的值是D2中DG的值。
·如果DG存在于D1和D2兩者中,則合成中DG的值是D1和D2中DG的值的合成。
在一些實(shí)施例中,程度值V1和V2的合成使用這些規(guī)則222來(lái)形成:
·如果V1或V2具有Inclusion(包含)=Excluded(排除的),則合成是{Required(要求)=false(假),Inclusion(包含)=Excluded(排除的)}。
·否則,如果V1或V2具有Required(要求)=true(真),則合成具有Required(要求)=true(真),否則具有Required(要求)=false(假)。
·如果V1或V2具有Inclusion(包含)=Included(包括的),并且都不具有Inclusion(包含)=Excluded(排除的),則合成具有Inclusion(包含)=Included(包括的)。
·如果V1或V2都不具有Inclusion(包含)=Included(包括的)或Inclusion(包含)=Excluded(排除的),則合成具有Inclusion(包含)=Auto(自動(dòng))。
并且,在一些實(shí)施例中,如果指令D通過(guò)除了直接應(yīng)用到類(lèi)型T或成員M之外的方式應(yīng)用到類(lèi)型T或成員M,則對(duì)于D中針對(duì)其T或M不滿(mǎn)足可見(jiàn)性要求的任意程度DG,D中針對(duì)T或M的DG的值是{Required(要求)=false(假),Inclusion(包含)=Excluded(排除的)}。在一些實(shí)施例中,結(jié)果會(huì)是Inclusion(包含)=Included(包括的);即,如果指令表明針對(duì)一類(lèi)型Dynamic(動(dòng)態(tài))=“Public(公開(kāi))”,則允許另一指令表明Dynamic(動(dòng)態(tài))=“RequiredAll(要求全部)”。
要求的類(lèi)型和成員
在一些實(shí)施例中,如果應(yīng)用到一類(lèi)型或成員的指令的合成針對(duì)任一程度具有Required(要求)=true(真),則該類(lèi)型或成員被要求。被要求的含義由編譯器128和/或解釋642指令的系統(tǒng)的其他部分來(lái)確定,但是很可能是該類(lèi)型或成員不能被丟棄。尤其,如果泛型類(lèi)型實(shí)例化或泛型方法實(shí)例化被要求,則解釋指令的系統(tǒng)可被預(yù)期迫使616實(shí)例化存在。
結(jié)語(yǔ)
雖然具體實(shí)施例在此處被明確示出并描述為進(jìn)程、已配置的介質(zhì)、或系統(tǒng),但是可以理解,對(duì)一種類(lèi)型的實(shí)施例的討論也一般性地延伸到其他實(shí)施例類(lèi)型。例如,結(jié)合圖6和8的過(guò)程描述還幫助描述配置的介質(zhì),并幫助描述如結(jié)合其他附圖討論的那些技術(shù)效果以及系統(tǒng)和制品等技術(shù)效果以及系統(tǒng)和制品的操作。對(duì)一個(gè)實(shí)施例的限制也不一定適用于另一個(gè)實(shí)施例。具體而言,進(jìn)程不一定僅限于在討論諸如已配置的存儲(chǔ)器之類(lèi)的系統(tǒng)或產(chǎn)品時(shí)呈現(xiàn)的數(shù)據(jù)結(jié)構(gòu)和方案。
本文對(duì)具有某一特征X的實(shí)施例的引用以及本文別處對(duì)具有某一特征Y的實(shí)施例的應(yīng)用不從具有特征X和特征Y兩者的本公開(kāi)的實(shí)施例中排除,除非這一排除在此被明確指明。術(shù)語(yǔ)“實(shí)施例”在此僅僅被用作“過(guò)程、系統(tǒng)、制品、經(jīng)配置的計(jì)算機(jī)可讀介質(zhì)和/或此處如以與適用法律一致的方式應(yīng)用的教導(dǎo)的其它示例”的更方便的形式。因此,給定“實(shí)施例”在該實(shí)施例與至少一個(gè)權(quán)利要求一致的情況下可包括此處所公開(kāi)的特征的任何組合。
不是圖中所示出的每一項(xiàng)都需要存在于每個(gè)實(shí)施例中。相反,實(shí)施例可以包含圖中未顯式地示出的項(xiàng)。雖然一些可能性在此處通過(guò)具體示例在文本和附圖中示出,但是各實(shí)施例可以偏離這些示例。例如,一示例的具體技術(shù)效果或技術(shù)特征可以被省略、重命名、以不同的方式分組、重復(fù)、不同地以硬件和/或軟件實(shí)例化,或是在兩個(gè)或更多示例中出現(xiàn)的效果或特征的混合。在一些實(shí)施例中,在一個(gè)位置示出的功能也可以在不同位置提供;技術(shù)人員認(rèn)識(shí)到在給定實(shí)現(xiàn)中功能模塊能夠以各種方式定義,而不必從作為一個(gè)整體來(lái)看的交互模塊的集合中省略所需技術(shù)效果
通過(guò)附圖標(biāo)記參考了附圖。在附圖或文本中與給定附圖標(biāo)記相關(guān)聯(lián)的措詞中的任何顯而易見(jiàn)的不一致性應(yīng)該被理解為僅僅時(shí)拓寬該標(biāo)記所引用的內(nèi)容的范圍。即使使用相同的附圖標(biāo)記,給定附圖標(biāo)記的不同實(shí)例也可以指不同的實(shí)施例。
如此處所使用的,諸如“一”和“該”等術(shù)語(yǔ)包括了所指示的項(xiàng)或步驟中的一個(gè)或多個(gè)。具體而言,在權(quán)利要求書(shū)中,對(duì)一個(gè)項(xiàng)的引用一般表示至少一個(gè)這樣的項(xiàng)存在,并且對(duì)一個(gè)步驟的引用表示執(zhí)行該步驟的至少一個(gè)實(shí)例。
標(biāo)題僅是為了方便;關(guān)于給定話(huà)題的信息可在其標(biāo)題指示該話(huà)題的章節(jié)之外被尋找到。
所提交的所有權(quán)利要求和摘要是說(shuō)明書(shū)的一部分。
盡管在附圖中示出并在上文中描述了示例性實(shí)施例,但本領(lǐng)域普通技術(shù)人員將明白,可作出多種修改而不脫離權(quán)利要求書(shū)中闡明的原理和概念,且這些修改不需要涵蓋整個(gè)抽象概念。盡管用結(jié)構(gòu)特征和/或過(guò)程動(dòng)作專(zhuān)用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書(shū)中定義的主題不必限于權(quán)利要求書(shū)上面所描述的具體特征或動(dòng)作。不一定在給定定義或示例中標(biāo)識(shí)的每一個(gè)手段或方面或技術(shù)效果都在每個(gè)實(shí)施例中存在或使用。相反,所描述的具體特征和動(dòng)作以及效果是作為供當(dāng)實(shí)現(xiàn)權(quán)利要求書(shū)時(shí)考慮的示例來(lái)公開(kāi)的。
無(wú)法包圍整個(gè)抽象概念但落入權(quán)利要求的等效技術(shù)方案的意義和范圍內(nèi)的所有改變都在法律所準(zhǔn)許的最大程度內(nèi)被包含在其范圍內(nèi)。