專利名稱::動(dòng)態(tài)運(yùn)行時(shí)間環(huán)境中使用標(biāo)簽化類型的系統(tǒng)和方法
技術(shù)領(lǐng)域:
:本發(fā)明通常涉及計(jì)算機(jī)系統(tǒng),更具體地,涉及在動(dòng)態(tài)運(yùn)行時(shí)間中促進(jìn)動(dòng)態(tài)語(yǔ)言的運(yùn)算和執(zhí)行的系統(tǒng)和方法。
背景技術(shù):
:隨著計(jì)算機(jī)科學(xué)發(fā)展,面向?qū)ο缶幊桃殉蔀槠胀ㄔO(shè)計(jì)者和程序員利用來(lái)實(shí)現(xiàn)計(jì)算機(jī)系統(tǒng)內(nèi)功能的眾多常見(jiàn)的模型之一。對(duì)象模型通常由類結(jié)構(gòu)定義,類結(jié)構(gòu)包括提供屬于該類的方法和關(guān)聯(lián)的數(shù)據(jù)元素兩者的類成員。類成員因而提供/定義計(jì)算機(jī)程序內(nèi)所希望的功能,其中對(duì)象被聲明為特定類的實(shí)例。如很普通的,對(duì)象常常必須交換數(shù)據(jù)和/或調(diào)用在同一平臺(tái)上的運(yùn)行的其它對(duì)象和/或與屬于遠(yuǎn)程平臺(tái)的對(duì)象通信。為了在對(duì)象間通信,已開(kāi)發(fā)了接口系統(tǒng)和標(biāo)準(zhǔn)來(lái)定義對(duì)象如何彼此通信和/或交互。在對(duì)象間通信和接口的常見(jiàn)系統(tǒng)稱為組件對(duì)象模型(COM),其中另一個(gè)類似的系統(tǒng)稱為公共對(duì)象代理體系結(jié)構(gòu)(CommonObjectRequestBrokersArchitecture)(CORBA)。還有另一個(gè)通信接口可用語(yǔ)言定義的,例如諸如在Java虛擬機(jī)的操作框架內(nèi)的JAVA語(yǔ)言。雖然由于已開(kāi)發(fā)了這些和其它系統(tǒng),但是,兩個(gè)公共對(duì)象結(jié)構(gòu)或模型通常已經(jīng)被合并起來(lái),并且通??砂凑绽缡芄芾淼暮头鞘芄芾淼膶?duì)象系統(tǒng)來(lái)定義。受管理的對(duì)象可從受管理的軟件環(huán)境內(nèi)的堆分配,并且通常不負(fù)責(zé)管理相關(guān)的對(duì)象生存期。受管理的對(duì)象可按照數(shù)據(jù)類型(例如,元數(shù)據(jù))來(lái)描述,并自動(dòng)由受管理的環(huán)境“無(wú)用單元收集器”收集(例如,收回),它在對(duì)象不再被訪問(wèn)時(shí)將對(duì)象從內(nèi)存中移去。相反,非受管理的對(duì)象可從標(biāo)準(zhǔn)的操作系統(tǒng)堆分配,其中當(dāng)對(duì)象引用不再存在時(shí),對(duì)象本身負(fù)責(zé)釋放它使用的內(nèi)存。這可通過(guò)眾所周知的技術(shù)例如諸如引用計(jì)數(shù)來(lái)實(shí)現(xiàn)。如上所述,受管理的對(duì)象可從受管理的堆分配并自動(dòng)地被作為無(wú)用單元收集。為了達(dá)到這一點(diǎn),跟蹤對(duì)受管理的對(duì)象的引用。當(dāng)對(duì)對(duì)象的最后一個(gè)引用被刪除時(shí),無(wú)用單元收集器回收由對(duì)象占用的內(nèi)存,減少對(duì)受管理的對(duì)象引用計(jì)數(shù)的需求。這樣,受管理的環(huán)境基本上內(nèi)部地處理引用計(jì)數(shù)。在受管理的代碼內(nèi)跟蹤是可能的,因?yàn)槭芄芾淼沫h(huán)境記錄了存在于對(duì)象上的未完結(jié)的引用。由于每個(gè)新對(duì)象引用要在受管理的代碼中聲明,受管理的環(huán)境添加該引用至有效引用的列表中。在任意給定時(shí)間,受管理的環(huán)境,而不是對(duì)象本身,因而知道存在于給定對(duì)象上的有效引用。在引用超出范圍或改變了值的時(shí)候,更新有效引用列表,而且只要引用保留在受管理的代碼內(nèi),受管理的環(huán)境就能跟蹤它。連同上述對(duì)象生存期問(wèn)題,受管理的和非受管理的對(duì)象系統(tǒng)通常還在許多其它重要方式上有所不同。這些不同可包括,例如,對(duì)象系統(tǒng)如何在各自的對(duì)象系統(tǒng)中提供對(duì)象接口,如何結(jié)構(gòu)化和/或定義數(shù)據(jù),以及如何處理錯(cuò)誤和異常。涉及對(duì)象執(zhí)行環(huán)境,動(dòng)態(tài)編程語(yǔ)言提供了各種各樣的不同代碼類型,由此開(kāi)發(fā)多個(gè)應(yīng)用。動(dòng)態(tài)類型化語(yǔ)言,諸如Perl、Scheme、Ruby、Python、Smalltalk等等,一般利用各種標(biāo)簽方案來(lái)克服在堆上分配小的(通常是字大小的)對(duì)象的開(kāi)銷,但仍保持了用于參數(shù)運(yùn)算的值的統(tǒng)一表示法的好處。例如,假設(shè)指針對(duì)齊于4字節(jié)邊界,通用技術(shù)是用32位值的最低有效位來(lái)區(qū)別指針和立即值。例如在基于Windows的系統(tǒng)上,可能考慮設(shè)置兩個(gè)最高有效位為1,因?yàn)榧僭O(shè)指針不指向最高內(nèi)存段。然而對(duì)許多系統(tǒng)設(shè)計(jì)者是顯然的,即使用這樣的編碼(例如,用以區(qū)別指針和整數(shù)值的編碼)的程序,當(dāng)在受管理的執(zhí)行環(huán)境諸如通用語(yǔ)言運(yùn)行時(shí)間(CommonLanguageRuntime)或Java虛擬機(jī)上執(zhí)行時(shí)是不可檢驗(yàn)的。目前,一個(gè)實(shí)現(xiàn)統(tǒng)一表示法的可檢驗(yàn)的方式是利用封裝(boxing)(例如,封裝將整數(shù)與對(duì)象關(guān)聯(lián)起來(lái)),但是,對(duì)被封裝的值的運(yùn)算可能比直接在原值上運(yùn)算相對(duì)于處理器執(zhí)行性能要慢一個(gè)數(shù)量級(jí)。概述為了提供本發(fā)明一些方面的基本理解,以下介紹本發(fā)明的簡(jiǎn)要概述。這個(gè)概述不是本發(fā)明詳盡的概觀。不是想要確定本發(fā)明的關(guān)鍵/重要的要素或描繪本發(fā)明的范圍。它的唯一作用是以簡(jiǎn)單的形式作為稍后提供的更為詳細(xì)描述的序言來(lái)介紹本發(fā)明的一些概念。本發(fā)明涉及在受管理的對(duì)象環(huán)境中處理從動(dòng)態(tài)編程語(yǔ)言生成的標(biāo)簽化類型值的系統(tǒng)和方法。標(biāo)簽化類型值包括數(shù)據(jù)的特殊編碼部分,例如諸如32位值的最低有效位使執(zhí)行引擎能夠區(qū)別指針和立即數(shù)據(jù)值。本發(fā)明定義一個(gè)抽象根類型類用于動(dòng)態(tài)編程語(yǔ)言,所述動(dòng)態(tài)編程語(yǔ)言可在諸如由虛擬機(jī)提供的受管理的對(duì)象環(huán)境中執(zhí)行。這種類型的類被定義為,在類層次中具有一個(gè)頂部分,頂部分表示不透明的、自然的大小值,用于在類的頂部分之下定義的數(shù)據(jù)元素。在一種情況下,在類的頂部分或根下面展開(kāi)二叉樹(shù),其中在樹(shù)的一邊展開(kāi)系統(tǒng)對(duì)象層次體系(例如非標(biāo)簽化的元素),而在樹(shù)的另一邊表示標(biāo)簽化值的密封的類型。然后將各種規(guī)則應(yīng)用于抽象根類型類,來(lái)促進(jìn)使用標(biāo)簽化類型的動(dòng)態(tài)編程語(yǔ)言的正確執(zhí)行(例如,密封或防止由用戶定義類型對(duì)標(biāo)簽化類型的數(shù)據(jù)訪問(wèn))。更具體地,執(zhí)行規(guī)則減少關(guān)聯(lián)于用戶定義類型的值或數(shù)據(jù)從抽象類的標(biāo)簽化成員導(dǎo)出或者繼承屬性。以這種方式,標(biāo)簽化類型值可以在類型安全執(zhí)行環(huán)境中執(zhí)行。而且,通過(guò)定義抽象類以及限制對(duì)類成員的訪問(wèn),增強(qiáng)了代碼執(zhí)行性能,超過(guò)了使用標(biāo)簽化值的常規(guī)算法諸如如上所述的封裝協(xié)議的執(zhí)行性能。依照本發(fā)明的一個(gè)方面,定義了標(biāo)簽化類型的元素和頂類型的元素,其中頂定義了樹(shù)的最上面成員,所述樹(shù)在樹(shù)的一個(gè)分支具有標(biāo)簽化的數(shù)據(jù)子類型,以及在樹(shù)的另一分支中具有與非標(biāo)簽化成員有關(guān)的數(shù)據(jù)子類型。隨后擴(kuò)展元數(shù)據(jù)規(guī)則來(lái)幫助保證非標(biāo)簽化分支的成員不從標(biāo)簽化子類型或頂類型的元素導(dǎo)出或繼承屬性。還可擴(kuò)展規(guī)則來(lái)支持這樣的運(yùn)算,如將算術(shù)的或其它類型的運(yùn)算應(yīng)用于標(biāo)簽化值??稍诙褩?zhí)行過(guò)程中應(yīng)用規(guī)則,并且規(guī)則包括這樣的運(yùn)算,如將對(duì)象強(qiáng)制轉(zhuǎn)換為頂元素類型和/或標(biāo)簽化類型。這還可以包括測(cè)試運(yùn)算,來(lái)確定一個(gè)值是否是相應(yīng)類或子類型的成員。其它執(zhí)行規(guī)則包括將數(shù)據(jù)的一種類型(例如,整數(shù))轉(zhuǎn)換成標(biāo)簽化類型,以及反之亦然。通過(guò)定義同時(shí)包含標(biāo)簽化和非標(biāo)簽化值的抽象類,以及提供規(guī)則來(lái)隔離類的子類型之間的繼承,本發(fā)明提供快速而安全的環(huán)境用于執(zhí)行動(dòng)態(tài)編程語(yǔ)言。為實(shí)現(xiàn)前述的和有關(guān)的目標(biāo),在此結(jié)合以下描述和附圖描述本發(fā)明某些說(shuō)明性方面。這些方面表示可實(shí)施本發(fā)明的各種不同方式,所有這些方式都是要由本發(fā)明覆蓋的。本發(fā)明的其它優(yōu)點(diǎn)和新穎特征,在結(jié)合附圖考慮時(shí)可從本發(fā)明的以下詳述中變得顯而易見(jiàn)。圖1是示意性方框圖,示出依照本發(fā)明一個(gè)方面的標(biāo)簽化類型處理系統(tǒng)。圖2是一方框圖,示出依照本發(fā)明一個(gè)方面的標(biāo)簽化類型層次結(jié)構(gòu)。圖3是一流程圖,示出依照本發(fā)明一個(gè)方面的標(biāo)簽化類型處理。圖4是一流程圖,示出依照本發(fā)明一個(gè)方面的標(biāo)簽化類型指令執(zhí)行。圖5示出依照本發(fā)明一個(gè)方面的執(zhí)行規(guī)則。圖6是一流程圖,示出依照本發(fā)明一個(gè)方面的強(qiáng)制轉(zhuǎn)換類規(guī)則。圖7是一流程圖,示出依照本發(fā)明一個(gè)方面的測(cè)試類規(guī)則。圖8是一流程圖,示出依照本發(fā)明一個(gè)方面的從整數(shù)到標(biāo)簽化類型的轉(zhuǎn)換規(guī)則。圖9是一流程圖,示出依照本發(fā)明一個(gè)方面的從標(biāo)簽化類型到整數(shù)的轉(zhuǎn)換規(guī)則。圖10是示意性方框圖,示出依照本發(fā)明一個(gè)方面的適當(dāng)?shù)牟僮鳝h(huán)境。圖11是本發(fā)明可交互的一個(gè)樣本計(jì)算環(huán)境的示意性方框圖。詳細(xì)說(shuō)明本發(fā)明涉及在受管理的代碼環(huán)境中促進(jìn)動(dòng)態(tài)編程語(yǔ)言執(zhí)行的系統(tǒng)和方法。提供類組件,它聲明用于一個(gè)或多個(gè)關(guān)聯(lián)于動(dòng)態(tài)編程語(yǔ)言的標(biāo)簽化值的繼承層次結(jié)構(gòu)。在標(biāo)簽化值的執(zhí)行過(guò)程中,規(guī)則組件減少了用戶定義類型從標(biāo)簽化值繼承或?qū)С鰧傩?,以便支持類型安全運(yùn)行時(shí)間環(huán)境。提供分叉的類樹(shù),定義非標(biāo)簽化類型元素在樹(shù)的一邊,而標(biāo)簽化類型元素值在樹(shù)的另一分支上。規(guī)則組件分析運(yùn)行時(shí)間擴(kuò)展,所述運(yùn)行時(shí)間擴(kuò)展幫助防止來(lái)自樹(shù)的一個(gè)組件的數(shù)據(jù)從樹(shù)的另一組件導(dǎo)出或繼承屬性。運(yùn)行時(shí)間擴(kuò)展包括這樣的方面,如強(qiáng)制轉(zhuǎn)換類擴(kuò)展,測(cè)試類擴(kuò)展,以及轉(zhuǎn)換類擴(kuò)展,用于將數(shù)據(jù)類型從一個(gè)類的子類型轉(zhuǎn)換成另一個(gè)類的子類型(例如,將標(biāo)簽化元素轉(zhuǎn)換成非標(biāo)簽化元素,以及反之亦然)。如本申請(qǐng)中所用到的,術(shù)語(yǔ)“組件(component)”、“類(class)”、“層次結(jié)構(gòu)(hierarchy)”、“系統(tǒng)(system)”等等都是指與計(jì)算機(jī)有關(guān)的實(shí)體,或者硬件、硬件和軟件的結(jié)合、軟件,或者執(zhí)行中的軟件。例如,組件可以是,但不限于,運(yùn)行于處理器上的過(guò)程、處理器、對(duì)象、可執(zhí)行的(excutable)、執(zhí)行的線程、程序和/或計(jì)算機(jī)。作為說(shuō)明,運(yùn)行于服務(wù)器上的應(yīng)用和服務(wù)器兩者都可以是組件。一個(gè)或多個(gè)組件可駐留在過(guò)程和/或執(zhí)行的線程內(nèi),且組件可局部化在一臺(tái)計(jì)算機(jī)上和/或分布于兩臺(tái)或多臺(tái)計(jì)算機(jī)之間。先參考圖1,系統(tǒng)100示出了依照本發(fā)明一個(gè)方面的標(biāo)簽化類型處理。一個(gè)或多個(gè)動(dòng)態(tài)語(yǔ)言110被供給編譯器120(例如,運(yùn)行時(shí)編譯執(zhí)行的編譯器(JustinTimecompiler)),生成可由虛擬機(jī)130執(zhí)行的中間語(yǔ)言指令124。動(dòng)態(tài)語(yǔ)言110實(shí)質(zhì)上包括任何類型的計(jì)算機(jī)語(yǔ)言,諸如Perl、Scheme、Ruby、Python和Smalltalk,例如,它們可由編譯器120編譯并由虛擬機(jī)130執(zhí)行。這樣的機(jī)器可包括例如,虛擬執(zhí)行系統(tǒng)(VirtualExecutionSystem)(VES)、通用語(yǔ)言運(yùn)行時(shí)間(CommonLanguageRuntime)(CLR)或Java虛擬機(jī)。當(dāng)執(zhí)行中間語(yǔ)言代碼時(shí),虛擬機(jī)130在單個(gè)或多個(gè)計(jì)算機(jī)系統(tǒng)(可以是本地和/或遠(yuǎn)程網(wǎng)絡(luò)化系統(tǒng))上運(yùn)行一個(gè)或多個(gè)計(jì)算機(jī)應(yīng)用134。在本發(fā)明的一個(gè)方面,動(dòng)態(tài)語(yǔ)言110宣稱并生成一個(gè)或多個(gè)標(biāo)簽化類型140,它們?cè)谔摂M機(jī)130上被編譯并且隨后被執(zhí)行。標(biāo)簽化類型140表示將指針值與其它值諸如立即數(shù)據(jù)值區(qū)別開(kāi)來(lái)的編碼,并且常常由動(dòng)態(tài)語(yǔ)言110使用。標(biāo)簽化類型140在分叉的類結(jié)構(gòu)中說(shuō)明,所述分叉的類在類結(jié)構(gòu)的一邊或根具有標(biāo)簽化值,以及在另一邊或根具有非標(biāo)簽化的或用戶定義類型的值,由此這種類型的類結(jié)構(gòu)將在下面參考圖2更詳細(xì)地描述。為了處理中間指令124和標(biāo)簽化類型140,虛擬機(jī)130和/或編譯器120使用一組確認(rèn)規(guī)則150,來(lái)幫助確保用戶定義的數(shù)據(jù)類型不從標(biāo)簽化數(shù)據(jù)類型導(dǎo)出或繼承。同樣,各種堆棧執(zhí)行規(guī)則160(下面描述)由堆棧異常處理修改并執(zhí)行,以便處理標(biāo)簽化和非標(biāo)簽化值。通過(guò)提供新類的類型框架、確認(rèn)規(guī)則150和/或堆棧異常處理程序160,本發(fā)明改善了虛擬機(jī)130的執(zhí)行性能。這是通過(guò)依照代替和/或減少諸如將標(biāo)簽化值視為“封裝的”變量這樣的技術(shù)的類框架和規(guī)則處理標(biāo)簽化值來(lái)實(shí)現(xiàn)的。這些變量在這樣的標(biāo)準(zhǔn)中描述,如定義通用語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CommonLanguageInfrastructure)(CLI)的“ECMA標(biāo)準(zhǔn)”。通常,系統(tǒng)100遵守ECMA標(biāo)準(zhǔn)和通用語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CLI),其中以多種高級(jí)語(yǔ)言編寫的應(yīng)用可在不同的系統(tǒng)環(huán)境中執(zhí)行,而不需要重寫應(yīng)用以考慮這些環(huán)境的獨(dú)特性。要理解,也可以依照本發(fā)明適應(yīng)處理動(dòng)態(tài)語(yǔ)言和/或虛擬執(zhí)行環(huán)境的其它標(biāo)準(zhǔn)。ECMA標(biāo)準(zhǔn)包括幾個(gè)可在因特網(wǎng)上容易地得到的部分,以便通過(guò)在它們各自部分中描述那些組件來(lái)促進(jìn)理解各種組件。這些部分是部分I體系結(jié)構(gòu)部分II元數(shù)據(jù)定義和語(yǔ)義部分IIICIL指令集部分IV簡(jiǎn)檔和庫(kù)部分V附錄通用語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CLI)為可執(zhí)行代碼和它運(yùn)行于其中的執(zhí)行環(huán)境(虛擬執(zhí)行系統(tǒng)(VirtualExecutionSystem),或VES)提供了規(guī)范。可執(zhí)行代碼作為模塊提供給VES。模塊一般是單個(gè)文件,以規(guī)定的格式包含可執(zhí)行內(nèi)容。通常,在通用語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CLI)的中心是一個(gè)單類型系統(tǒng),即編譯器、工具和CLI本身所共享的通用類型系統(tǒng)(CommonTypeSystem)(CTS)。正是這樣一個(gè)模型,定義CLI在宣稱、使用和管理類型時(shí)所遵循的規(guī)則。CTS建立一個(gè)框架,它允許交叉語(yǔ)言集成、類型安全,以及高性能代碼執(zhí)行。CLI包括下列基本組件通用類型系統(tǒng)。通用類型系統(tǒng)(CTS)提供一個(gè)豐富類型系統(tǒng)(richtypesystem),支持在許多編程語(yǔ)言中存在的類型和操作。通用類型系統(tǒng)想要支持寬廣范圍的編程語(yǔ)言的完全實(shí)現(xiàn)。元數(shù)據(jù)。CLI使用元數(shù)據(jù)來(lái)描述和引用由通用類型系統(tǒng)定義的類型。以獨(dú)立于任何特定編程語(yǔ)言的方式存儲(chǔ)(“存留(persist)”)元數(shù)據(jù)。因而,元數(shù)據(jù)提供通用交換機(jī)制,在操縱程序的工具(編譯器、調(diào)試器等)之間以及在這些工具和虛擬執(zhí)行系統(tǒng)之間使用所述機(jī)制。通用語(yǔ)言規(guī)范。通用語(yǔ)言規(guī)范是語(yǔ)言設(shè)計(jì)者和框架(類庫(kù))設(shè)計(jì)者之間的協(xié)議。它規(guī)定了CTS類型系統(tǒng)的子集和一組使用約定。語(yǔ)言通過(guò)實(shí)現(xiàn)至少是CLS部分的CTS的那些部分來(lái)為它們的用戶提供訪問(wèn)框架的最大能力。同樣地,將最廣泛地使用框架,如果它們公開(kāi)暴露的方面(類、接口、方法、字段等)使用是CLS的部分的類型并且遵守CLS約定。虛擬執(zhí)行系統(tǒng)。虛擬執(zhí)行系統(tǒng)實(shí)現(xiàn)并實(shí)施CTS模型。VES負(fù)責(zé)加載和運(yùn)行為CLI編寫的程序。它提供執(zhí)行受管理的代碼和數(shù)據(jù)所需要的服務(wù),使用元數(shù)據(jù)在運(yùn)行時(shí)間將分別生成的模塊連接在一起(后綁定)。合起來(lái),CLI的這些方面為設(shè)計(jì)、開(kāi)發(fā)、部署和執(zhí)行分布式組件和應(yīng)用形成統(tǒng)一的框架??蓮母鞣N以CLI為目標(biāo)的編程語(yǔ)言得到通用類型系統(tǒng)的適當(dāng)?shù)淖蛹;谡Z(yǔ)言的工具彼此通信,并且與使用元數(shù)據(jù)來(lái)定義和引用用來(lái)構(gòu)造應(yīng)用的類型的虛擬執(zhí)行系統(tǒng)通信。虛擬執(zhí)行系統(tǒng)使用元數(shù)據(jù)按需創(chuàng)建類型的實(shí)例,并為基礎(chǔ)結(jié)構(gòu)的其它部分提供數(shù)據(jù)類型信息(諸如遠(yuǎn)程服務(wù)、組裝件(assembly)下載、安全等)。現(xiàn)在轉(zhuǎn)向圖2,圖200示出依照本發(fā)明一個(gè)方面的標(biāo)簽化類型層次結(jié)構(gòu)。為了以類型安全方式支持標(biāo)簽化值,本發(fā)明為繼承層次結(jié)構(gòu)提供一種新的(抽象)根類型,標(biāo)注為頂(Top)210,代表不透明的、自然的大小值。在這個(gè)新的根210下面,在一邊宣稱現(xiàn)有的System.Object層次220,而在另一邊是(密封的)標(biāo)簽化(Tagged)類型230。頂類型210通常相應(yīng)于如在ECMA部分III中提供的對(duì)象引用類型0的概念。主題發(fā)明提供O到第一類類型中,并添加新的標(biāo)簽化子類型230。在240,提供一個(gè)或多個(gè)元數(shù)據(jù)確認(rèn)規(guī)則,它們禁止對(duì)定義為頂210和標(biāo)簽化類型230的元素的繼承。這些規(guī)則在下面更詳細(xì)地描述。同樣,要意識(shí)到,盡管兩個(gè)分支都繪于頂210之下,但也同樣可提供其它分支(例如,在System.0bj和標(biāo)簽化類型旁邊或下面定義的多個(gè)分支)。在ECMA部分III中定義的對(duì)象引用(類型0)通常被認(rèn)為是完全不透明的。一般沒(méi)有算術(shù)指令允許對(duì)象引用作為操作數(shù),盡管本發(fā)明為標(biāo)簽化類型提供算術(shù)運(yùn)算,如下所述。所允許的比較運(yùn)算是對(duì)象引用之間的相等(和不相等),在本發(fā)明提供測(cè)試類指令的情況下。在ECMA部分III中沒(méi)有在對(duì)象引用上定義的轉(zhuǎn)換運(yùn)算,但是本發(fā)明提供標(biāo)簽化和非標(biāo)簽化值之間的轉(zhuǎn)換。對(duì)象引用一般由某些CIL對(duì)象指令(例如,newobj和newarr)創(chuàng)建。例如,這些引用也能作為參量傳遞、作為局部變量存儲(chǔ)、作為值返回,并可存儲(chǔ)在數(shù)組中并作為對(duì)象字段。本發(fā)明還為通用運(yùn)行時(shí)間語(yǔ)言(CLR)提供明確的支持,它實(shí)際上促進(jìn)使用CLR作為真正的多語(yǔ)言運(yùn)行時(shí)間。本發(fā)明的一個(gè)特定方面提供了附加的擴(kuò)展(例如,算術(shù)運(yùn)算、確認(rèn)規(guī)則)來(lái)同樣支持動(dòng)態(tài)語(yǔ)言(例如開(kāi)放源應(yīng)用)。本發(fā)明通過(guò)使用代表不透明的、自然大小值的、具有繼承層次結(jié)構(gòu)的抽象根類型(例如頂),以類型安全方式支持標(biāo)簽化值。本發(fā)明減少了與使用各種標(biāo)簽方案來(lái)克服在堆上分配小(例如字大小的)對(duì)象的開(kāi)銷的需求相關(guān)聯(lián)的常規(guī)問(wèn)題,但仍保持例如用于參數(shù)操作的值的統(tǒng)一表示法的好處。圖3-4和6-9示出依照本發(fā)明的各種方法。盡管為了簡(jiǎn)化說(shuō)明的目的,將方法示出和描述為一系列動(dòng)作,但要理解和意識(shí)到,本發(fā)明不受動(dòng)作的順序限制,因?yàn)橐勒毡景l(fā)明,某些動(dòng)作可以以不同順序和/或與來(lái)自在此所示和描述的其它動(dòng)作進(jìn)發(fā)地發(fā)生。例如,那些在本領(lǐng)域中熟練技術(shù)人員將理解和意識(shí)到,方法可供替換地表示為一系列相關(guān)的狀態(tài)或事件,諸如在狀態(tài)圖中。此外,不要求所有例示的動(dòng)作來(lái)實(shí)現(xiàn)依照本發(fā)明的方法。現(xiàn)在參考圖3,圖300示出依照本發(fā)明一個(gè)方面的標(biāo)簽化類型處理。在進(jìn)行310和320之前,注意可作為對(duì)ECMA部分II的修改提供這些過(guò)程。在310,至少定義兩個(gè)新元素類型ELEMENT_TYPE_TAGGED和ELEMENT_TYPE_TOP作為層次化類結(jié)構(gòu)的部分用于處理標(biāo)簽化值。在320,元數(shù)據(jù)確認(rèn)規(guī)則擴(kuò)展以保證用戶定義類型不能從頂或標(biāo)簽化類型元素導(dǎo)出。如上面提到的,CLI使用元數(shù)據(jù)描述和引用由通用類型系統(tǒng)定義的類型。元數(shù)據(jù)以獨(dú)立于特定編程語(yǔ)言的方式存儲(chǔ)(“存留”)。這樣,元數(shù)據(jù)提供通用交換機(jī)制,在操縱程序的工具(編譯器、調(diào)試器等)之間以及在這些工具與虛擬執(zhí)行系統(tǒng)之間使用所述機(jī)制。元數(shù)據(jù)令牌一般描述一個(gè)4字節(jié)值,例如它指定元數(shù)據(jù)表中的一行,或者在用戶串(UserString)堆中的起始字節(jié)偏移。在進(jìn)行前,注意可作為對(duì)ECMA部分III的修改的部分提供下列內(nèi)容。在330,通常所有帶有.ref后綴的指令變量將在堆棧上加載頂(Top)類型的值,以便處理標(biāo)簽化類型值。在340,在本發(fā)明的一個(gè)可替換方面中,可以重新定義算術(shù)運(yùn)算以在標(biāo)簽化值上計(jì)算。為了達(dá)到這一點(diǎn),可擴(kuò)展部分III的1.5節(jié)中的表(例如,修改操作數(shù)以對(duì)頂和標(biāo)簽(Tag)類型運(yùn)算,擴(kuò)展在算術(shù)運(yùn)算過(guò)程中的確認(rèn)規(guī)則)。下表說(shuō)明來(lái)自ECMA部分III中的各種指令,所述指令可以被擴(kuò)展成對(duì)標(biāo)簽化類型值操作。表1二進(jìn)制數(shù)字運(yùn)算表2一元數(shù)字運(yùn)算表3二進(jìn)制比較或分支運(yùn)算表4整數(shù)運(yùn)算表5移位運(yùn)算表6溢出算術(shù)運(yùn)算表7轉(zhuǎn)換運(yùn)算參考圖4,圖400示出依照本發(fā)明一個(gè)方面標(biāo)簽化類型指令執(zhí)行的例子。盡管下面所述指令涉及到“加法”指令,但要意識(shí)到,任何關(guān)聯(lián)于ECMA或其它標(biāo)準(zhǔn)的指令都可類似地被擴(kuò)展和被應(yīng)用到標(biāo)簽化類型處理或標(biāo)簽化和非標(biāo)簽化處理的組合。在410,聲明類或函數(shù)元素。例如,具有加法指令(或其它操作數(shù))的列表函數(shù)可編寫為L(zhǎng)ist{Add(Topx);在420,可以宣稱標(biāo)簽化和非標(biāo)簽化類型,例如List{Add(Topx);privateTop[]values;private(int,i);在430,執(zhí)行標(biāo)簽化類型操作,例如List{Add(Topx);privateTop[]values;private(int,i);Add(Topx){values[i]=x;i=i+1;}進(jìn)到440,在標(biāo)簽化類型處理之前、期間和/或之后執(zhí)行堆棧運(yùn)算。在450,標(biāo)簽化類型運(yùn)算或函數(shù)結(jié)束。這樣,在這個(gè)例子中,最后的示例列表函數(shù)可呈現(xiàn)為L(zhǎng)ist{Add(Topx);privateTop[]values;private(int,i);Add(Topx){values[i]=x;i=i+1;}}圖5示出依照本發(fā)明一個(gè)方面的一個(gè)或多個(gè)執(zhí)行規(guī)則500。在一個(gè)方面,強(qiáng)制轉(zhuǎn)換類指令或規(guī)則可在520提供。這種類型的指令將對(duì)象強(qiáng)制轉(zhuǎn)換到一個(gè)類,并且在下面參考圖6更詳細(xì)地描述。在另一個(gè)方面中,測(cè)試類指令或規(guī)則可以在524提供。這種類型的指令在對(duì)象上執(zhí)行測(cè)試,以確定一個(gè)對(duì)象是否是類或接口的實(shí)例,并在下面參考圖7更詳細(xì)地描述。在又另一個(gè)方面中,將整數(shù)轉(zhuǎn)換成對(duì)象引用的指令或規(guī)則可在530提供。這種類型的指令(例如,標(biāo)簽指令)將整數(shù)值轉(zhuǎn)換成對(duì)象引用,并在下面參考圖8更詳細(xì)地描述。在又另一方面中,將對(duì)象引用轉(zhuǎn)換成整數(shù)的指令或規(guī)則可在534提供。這種類型的指令(例如,非標(biāo)簽(untag)指令)將對(duì)象引用轉(zhuǎn)換成整數(shù)值,并在下面參考圖9更詳細(xì)地描述。要意識(shí)到,其它指令或規(guī)則可同樣地定義(例如,算術(shù)指令)。在進(jìn)行圖6-9的討論之前,提供以下內(nèi)容來(lái)描述這里講的堆棧概念。堆棧轉(zhuǎn)移圖(StackTransitionDiagram)堆棧轉(zhuǎn)移圖顯示在指令執(zhí)行前后的評(píng)估堆棧的狀態(tài)。下面是一個(gè)典型的堆棧轉(zhuǎn)移圖?!瑅alue1,value2->…,result這個(gè)示例圖表示堆棧至少必須在其上具有兩個(gè)元素,并且在定義中最上面的值(“棧頂”或“最近被壓入的”)將稱為value2(值2)且在下面的值(在value2之前被壓入的)將稱為value1(值1)。(在象這樣的圖中,堆棧沿著紙向右增長(zhǎng))。指令從堆棧中移走了這些值,并用另一個(gè)值取代它們,在描述中稱為result(結(jié)果)。圖6是圖600,示出依照本發(fā)明一個(gè)方面的強(qiáng)制轉(zhuǎn)換(cast)類規(guī)則。castclass(強(qiáng)制轉(zhuǎn)換類)一指定對(duì)象到類在610,為強(qiáng)制轉(zhuǎn)換類定義堆棧轉(zhuǎn)移如下StackTransition(堆棧轉(zhuǎn)移)…,obj->…,obj2在620,將強(qiáng)制轉(zhuǎn)換類定義如下,其中斜體項(xiàng)示出對(duì)ECMA部分III的修改castclass指令試圖強(qiáng)制轉(zhuǎn)換一個(gè)對(duì)象(例如,頂)為一個(gè)類。類是元數(shù)據(jù)標(biāo)記(token)(typeref或typedef),表示所希望的類。如果在類的頂上的對(duì)象是非標(biāo)簽化的并且T是標(biāo)簽化的,那么發(fā)出無(wú)效異常。如果在堆棧頂上的對(duì)象的類沒(méi)有實(shí)現(xiàn)類(如果類是接口),且不是類的子類(如果類是正規(guī)的類),那么發(fā)出InvalidCastException(無(wú)效強(qiáng)制轉(zhuǎn)換異常)。注意1.數(shù)組繼承自System.Array2.如果Foo可以被強(qiáng)制轉(zhuǎn)換為Bar,則Foo[]可被強(qiáng)制轉(zhuǎn)換為Bar[]3.為了上面的2,將enum(枚舉類型)視為它們的基本類型因而如果E1和E2共享基本類型,E1[]可以強(qiáng)制轉(zhuǎn)換為E2[],如果obj(對(duì)象)為空,castclass完成并返回空。這個(gè)行為不同于下面所述的isInst。在630,將用于強(qiáng)制轉(zhuǎn)換類的異常描述如下如果obj不能被強(qiáng)制轉(zhuǎn)換為類,發(fā)出InvalidCastException。如果不能找到類,則發(fā)出TypeLoadException(類型加載異常)。這一般在將CIL轉(zhuǎn)換成本地代碼時(shí)而不在運(yùn)行時(shí)間檢測(cè)。在640,描述用于強(qiáng)制轉(zhuǎn)換類的可檢驗(yàn)性(Verifiability)標(biāo)準(zhǔn)的CIL保證類是有效的TypeRef或TypeDef標(biāo)記,且保證obj為空、對(duì)象引用或標(biāo)簽化立即值。圖7是圖700,示出依照本發(fā)明一個(gè)方面的測(cè)試類規(guī)則。isinst(是實(shí)例)—測(cè)試對(duì)象是否是類或接口的實(shí)例在710,為強(qiáng)制轉(zhuǎn)換類定義堆棧轉(zhuǎn)移如下StackTransition(堆棧轉(zhuǎn)移)…,obj->…,result在720,強(qiáng)制轉(zhuǎn)換類如下定義,其中斜體項(xiàng)示出對(duì)ECMA部分III的修改isinst指令測(cè)試obj(typeTop)是否是類的實(shí)例。類是表示所希望的類的元數(shù)據(jù)標(biāo)記(typeref或typedef)。如果在堆棧頂上的對(duì)象是未標(biāo)簽化的以及T是標(biāo)簽化的,NULL(空)被壓在堆棧上。如果在堆棧頂上的對(duì)象的類實(shí)現(xiàn)類(如果類是接口)或者類的子類(如果類是正規(guī)的類),那么它被強(qiáng)制轉(zhuǎn)換為此類型的類并且結(jié)果被壓在堆棧上—好象已經(jīng)調(diào)用了castclass。否則,NULL被壓在堆棧上。如果obj(對(duì)象)是NULL,則isinst返回NULL。注意1.數(shù)組從System.Array繼承2.如果可以將Foo強(qiáng)制轉(zhuǎn)換為Bar,那么Foo[]可以被強(qiáng)制轉(zhuǎn)換為Bar[]3.為了2,將enum視為它們的基本類型因而如果E1和E2共享基本類型,則E1[]可以強(qiáng)制轉(zhuǎn)換到E2[]在730,將用于測(cè)試類的異常描述如下如果不能找到類,則發(fā)出TypeLoadException。這—般是在CIL被轉(zhuǎn)換成本地代碼時(shí)而不是在運(yùn)行時(shí)間檢測(cè)的。在740,描述用于測(cè)試類的可檢驗(yàn)性正確的CIL保證類是表示類的有效的typeref或typedef標(biāo)記,且obj總是或者為空、或者為對(duì)象引用。圖8是圖800,示出依照本發(fā)明一個(gè)方面的從整數(shù)到標(biāo)簽化類型的轉(zhuǎn)換規(guī)則。tag[.ovf]--將整數(shù)轉(zhuǎn)換成對(duì)象引用在810,為標(biāo)簽類定義堆棧轉(zhuǎn)移如下StackTransition(堆棧轉(zhuǎn)移)…,i->…,obj在820,定義tag如下tag指令將非標(biāo)簽化值i(原型整數(shù))轉(zhuǎn)換為類型頂(類型O)的實(shí)例。這通過(guò)在i中設(shè)置特殊標(biāo)簽位來(lái)完成。在830,將用于tag的異常描述如下如果已經(jīng)設(shè)置值標(biāo)簽位,則發(fā)出OverflowException(溢出異常)。在840,描述用于tag的可檢驗(yàn)性標(biāo)準(zhǔn)的CIL保證i是nativeint類型的。圖9是圖900,示出依照本發(fā)明一個(gè)方面的從標(biāo)簽化類型到整數(shù)的轉(zhuǎn)換規(guī)則。untag[.ovf]一將對(duì)象引用轉(zhuǎn)換成整數(shù)*注操作碼OPCODE_TAG和OPCODE_UNTAG將從可用CLI操作碼范圍中分配(見(jiàn)ECMA部分III,1.2.1節(jié))。在910,為untag(非標(biāo)簽)類定義堆棧轉(zhuǎn)移如下StackTransition(堆棧轉(zhuǎn)移)…,obj->…,i在920,定義untag如下untag指令將標(biāo)簽化對(duì)象引用轉(zhuǎn)換成原型整數(shù)。這是通過(guò)清除在obj中的特殊標(biāo)簽位來(lái)完成的。在930,描述用于untag的異常如下如果obj不是標(biāo)簽化值,則發(fā)出InvalidCastException.如果obj是空,則發(fā)出NullReferenceException(空引用異常)。在940,描述用于untag的可檢測(cè)性正確的CIL保證obj是對(duì)象引用,即,類型Top的對(duì)象引用,并且代表標(biāo)簽化整數(shù)。參考圖10,用于實(shí)現(xiàn)本發(fā)明的各種方面的示例性環(huán)境1010包括計(jì)算機(jī)1012。計(jì)算機(jī)1012包括處理單元1014,系統(tǒng)存儲(chǔ)器1016和系統(tǒng)總線1018。系統(tǒng)總線1018連接包括但不限于系統(tǒng)存儲(chǔ)器1016的系統(tǒng)組件至處理單元1014。處理單元1014可以是任何各種可用的處理器。雙微處理器和其它多處理器結(jié)構(gòu)也可以使用作為處理單元1014。系統(tǒng)總線1018可以是任何幾種類型的總線結(jié)構(gòu),包括存儲(chǔ)器總線或存儲(chǔ)控制器,外設(shè)總線或外部總線,和/或使用任何各種可用總線結(jié)構(gòu)的局部總線,包括但不限于,11-位總線,工業(yè)標(biāo)準(zhǔn)結(jié)構(gòu)(ISA),微通道結(jié)構(gòu)(MSA),擴(kuò)展ISA(EISA),智能驅(qū)動(dòng)器電子設(shè)備(IDE),VESA局部總線(VLB),外圍組件互連(PCI),通用串行總線(USB),高級(jí)圖形端口(AGP),個(gè)人計(jì)算機(jī)存儲(chǔ)卡國(guó)際協(xié)會(huì)總線(PCMCIA),以及小型計(jì)算機(jī)系統(tǒng)接口(SCSI)。系統(tǒng)存儲(chǔ)器1016包括易失性存儲(chǔ)器1020和非易失性存儲(chǔ)器1022?;据斎?輸出系統(tǒng)(BIOS),包含基本例程以在計(jì)算機(jī)1012內(nèi)的元件之間傳送信息,諸如在啟動(dòng)期間,存儲(chǔ)在非易失存儲(chǔ)器1022。作為說(shuō)明,且不是限制,非易失性存儲(chǔ)器1022可以包括只讀存儲(chǔ)器(ROM),可編程ROM(PROM),電可編程ROM(EPROM),電可擦除的ROM(EEPROM),或閃存。易失性存儲(chǔ)器1020包括隨機(jī)存取存儲(chǔ)器(RAM),用作外部高速緩存。作為說(shuō)明且不是限制,RAM可以以許多方式得到,諸如同步RAM(SRAM),動(dòng)態(tài)RAM(DRAM),同步DRAM(SDRAM),兩倍數(shù)據(jù)速率SDRAM(DDRSDRAM),增強(qiáng)型SDRAM(ESDRAM),同步鏈接DRAM(SLDRAM)以及直接存儲(chǔ)器總線(Rambus)RAM(DRRAM)。計(jì)算機(jī)1012還包括可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)。圖10示出,例如盤存儲(chǔ)器1024。盤存儲(chǔ)器1024包括但不限于,象磁盤驅(qū)動(dòng)器、軟盤驅(qū)動(dòng)器、帶驅(qū)動(dòng)器、Jaz驅(qū)動(dòng)器、另外,盤存儲(chǔ)器1024可以單獨(dú)地包括存儲(chǔ)介質(zhì)或者組合其它存儲(chǔ)介質(zhì),所述其它存儲(chǔ)介質(zhì)包括但不限于光盤驅(qū)動(dòng)器,諸如緊致盤ROM設(shè)備(CD-ROM)、CD可記錄驅(qū)動(dòng)器(CD-R驅(qū)動(dòng)器)、CD可重寫驅(qū)動(dòng)器(CD-RW驅(qū)動(dòng)器)或者數(shù)字通用盤ROM驅(qū)動(dòng)器(DVD-ROM)。為了方便盤存儲(chǔ)器設(shè)備1024連接至系統(tǒng)總線1018,一般使用可移動(dòng)或不可移動(dòng)的接口諸如接口1026。要意識(shí)到,圖10描述了用作用戶與在適當(dāng)?shù)牟僮鳝h(huán)境1010中所述的基本計(jì)算機(jī)資源之間的媒介物的軟件。這樣的軟件包括操作系統(tǒng)1028。可存儲(chǔ)在盤存儲(chǔ)器1024上的操作系統(tǒng)1028,用于控制和分配計(jì)算機(jī)系統(tǒng)1012的資源。系統(tǒng)應(yīng)用1030通過(guò)存儲(chǔ)在系統(tǒng)存儲(chǔ)器1016中或者在盤存儲(chǔ)器1024上的程序模塊1032和程序數(shù)據(jù)1034,利用由操作系統(tǒng)1028管理的資源。要意識(shí)到,本發(fā)明可以由各種操作系統(tǒng)或操作系統(tǒng)的組合來(lái)實(shí)現(xiàn)。用戶通過(guò)輸入設(shè)備1036將命令或信息輸入到計(jì)算機(jī)1012中。輸入設(shè)備1036包括但不限于,諸如鼠標(biāo)之類的指點(diǎn)設(shè)備、軌跡球、輸入筆、觸摸板、鍵盤、話筒、游戲桿、游戲板、衛(wèi)星天線、掃描儀、TV調(diào)諧器卡、數(shù)碼照相機(jī)、數(shù)字?jǐn)z像機(jī)、web照相機(jī)等等。這些和其它輸入設(shè)備通過(guò)系統(tǒng)總線1018經(jīng)由接口端口1038連接至處理單元1014。接口端口1038包括,例如,串行端口、并行端口、游戲端口以及通用串行總線(USB)。輸出設(shè)備1040使用某些相同類型的端口作為輸入設(shè)備1036。因而,例如,可使用USB端口提供輸入至計(jì)算機(jī)1012,以及輸出來(lái)自1012的信息至輸出設(shè)備1040。提供輸出適配器1042以說(shuō)明存在某些輸出設(shè)備1040,象監(jiān)視器、揚(yáng)聲器和打印機(jī),尤其是它們要求特殊的適配器。輸出適配器1042包括,作為說(shuō)明且不是限制,視頻和聲卡,它們提供輸出設(shè)備1040與系統(tǒng)總線1018之間連接的裝置。應(yīng)該注意,其它設(shè)備和/或設(shè)備的系統(tǒng)提供輸入和輸出性能兩者,諸如遠(yuǎn)程計(jì)算機(jī)1044。計(jì)算機(jī)1012可以在使用邏輯連接至一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)諸如遠(yuǎn)程計(jì)算機(jī)1044的網(wǎng)絡(luò)化環(huán)境中運(yùn)行。遠(yuǎn)程計(jì)算機(jī)1044可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、工作站、基于微處理器的電器、對(duì)等設(shè)備或其它公共網(wǎng)絡(luò)節(jié)點(diǎn)等等,以及一般包括許多或全部相對(duì)于計(jì)算機(jī)1012所述的元件。為了簡(jiǎn)短,只有一個(gè)存儲(chǔ)器設(shè)備1046與遠(yuǎn)程計(jì)算機(jī)1044一起示出。遠(yuǎn)程計(jì)算機(jī)1044是邏輯地通過(guò)網(wǎng)絡(luò)接口1048并且然后物理地通過(guò)通信連接1050連接至計(jì)算機(jī)1012。網(wǎng)絡(luò)接口1048包括通信網(wǎng)絡(luò),諸如局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)。LAN技術(shù)包括光纖分布式數(shù)據(jù)接口(FDDI)、銅分布式數(shù)據(jù)接口(CDDI)、以太網(wǎng)/IEEE1102.3、令牌環(huán)/IEEE1102.5等等。WAN技術(shù)包括但不限于,點(diǎn)對(duì)點(diǎn)鏈接、電路交換網(wǎng)絡(luò)象綜合數(shù)字業(yè)務(wù)網(wǎng)絡(luò)(ISDN)以及上述的變體、包交換網(wǎng)絡(luò)和數(shù)字訂戶線路(DSL)。通信連接1050指用于連接網(wǎng)絡(luò)接口1048至總線1018的硬件/軟件。盡管為了說(shuō)明清楚在計(jì)算機(jī)1012內(nèi)示出通信連接1050,但它也可以在計(jì)算機(jī)1012之外。用于至網(wǎng)絡(luò)接口1048的連接所需的硬件/軟件包括,僅為示例性目的,內(nèi)部和外部技術(shù),諸如調(diào)制解調(diào)器,包括正規(guī)電話等級(jí)的調(diào)制解調(diào)器、線纜調(diào)制解調(diào)器和DSL調(diào)制解調(diào)器、ISDN適配器和以太網(wǎng)卡。圖11是示例計(jì)算環(huán)境1100的示意性方框圖,本發(fā)明可以與所述環(huán)境交互。系統(tǒng)1100包括一個(gè)或多個(gè)客戶機(jī)1110??蛻魴C(jī)1110可以是硬件和/或軟件(例如,線程、過(guò)程、計(jì)算設(shè)備)。系統(tǒng)1100還包括一個(gè)或多個(gè)服務(wù)器1130。服務(wù)器1130也可以是硬件和/或軟件(例如,線程、過(guò)程、計(jì)算設(shè)備)。服務(wù)器1130可以容留例如通過(guò)使用本發(fā)明執(zhí)行變換的線程。在客戶機(jī)1110與服務(wù)器1130之間一個(gè)可能的通信可以是以適合于在兩個(gè)或多個(gè)計(jì)算機(jī)過(guò)程之間傳輸?shù)臄?shù)據(jù)包形式的。系統(tǒng)1100包括通信框架1150,可以使用它促進(jìn)客戶機(jī)1100與服務(wù)器1130之間的通信。客戶機(jī)1100有效地連接至一個(gè)或多個(gè)客戶機(jī)數(shù)據(jù)存儲(chǔ)器1160,可以使用它們存儲(chǔ)客戶機(jī)1100的本地信息。同樣,服務(wù)器1130有效地連接至一個(gè)或多個(gè)服務(wù)器數(shù)據(jù)存儲(chǔ)器1140,可以使用它們存儲(chǔ)服務(wù)器1130的本地信息。上面已經(jīng)描述的內(nèi)容包括本發(fā)明的例子。當(dāng)然,不可能為了描述本發(fā)明,描述每個(gè)想得到組件或方法的組合,但一個(gè)本領(lǐng)域的普通熟練技術(shù)人員可認(rèn)識(shí)到,還有許多本發(fā)明的組合和改變是可能的。因此,本發(fā)明是想要包括所有落在所附權(quán)利要求書的精神和范圍內(nèi)的這樣的變更、修改和變體。而且,到在詳細(xì)說(shuō)明或權(quán)利要求書中都使用術(shù)語(yǔ)“包括(include)”的程度,這樣的術(shù)語(yǔ)旨在以相似于術(shù)語(yǔ)“包括(comprising)”的方式包括的,如“包括”在權(quán)利要求中作為過(guò)渡詞使用所解釋的。權(quán)利要求1.一系統(tǒng),促進(jìn)在受管理的對(duì)象環(huán)境中動(dòng)態(tài)代碼的執(zhí)行,包括一個(gè)類組件,宣稱一繼承層次結(jié)構(gòu),用于一個(gè)或多個(gè)與動(dòng)態(tài)編程語(yǔ)言相關(guān)聯(lián)的標(biāo)簽化值;以及一個(gè)規(guī)則組件,它減輕了來(lái)自繼承標(biāo)簽化值中用戶定義的類型。2.如權(quán)利要求1所述的系統(tǒng),將動(dòng)態(tài)編程語(yǔ)言提供給編譯器,所述編譯器產(chǎn)生由虛擬機(jī)執(zhí)行的中間語(yǔ)言指令。3.如權(quán)利要求1所述的系統(tǒng),動(dòng)態(tài)編程語(yǔ)言包括Perl、Scheme、Ruby、Python和Smalltalk的至少一個(gè)。4.如權(quán)利要求2所述的系統(tǒng),虛擬機(jī)包括虛擬執(zhí)行系統(tǒng)(VES)、通用語(yǔ)言運(yùn)行時(shí)間(CLR)和Java虛擬機(jī)的至少一個(gè)。5.如權(quán)利要求1所述的系統(tǒng),以一個(gè)分叉的類結(jié)構(gòu)宣稱標(biāo)簽化值,所述分叉的類結(jié)構(gòu)具有在類結(jié)構(gòu)的一邊或根的標(biāo)簽化值以及在類的另一邊或根中的非標(biāo)簽化或用戶定義的值。6.如權(quán)利要求1所述的系統(tǒng),標(biāo)簽化值遵守定義通用語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CLI)的“ECMA標(biāo)準(zhǔn)”。7.如權(quán)利要求6所述的系統(tǒng),ECMA標(biāo)準(zhǔn)包括至少五個(gè)部分,所述部分包括部分I體系結(jié)構(gòu),部分II元數(shù)據(jù)定義和語(yǔ)義,部分IIICIL指令集,部分IV簡(jiǎn)檔和庫(kù),以及部分V附錄。8.如權(quán)利要求6所述的系統(tǒng),通用語(yǔ)言基礎(chǔ)結(jié)構(gòu)(CLI)包括通用類型系統(tǒng)、元數(shù)據(jù)描述、通用語(yǔ)言規(guī)范和虛擬執(zhí)行系統(tǒng)的至少一個(gè)。9.如權(quán)利要求1所述的系統(tǒng),繼承層次結(jié)構(gòu)包括代表不透明的、自然大小值的抽象根類型。10.如權(quán)利要求9所述的系統(tǒng),抽象根類型包括在相關(guān)樹(shù)的一邊上現(xiàn)有的System.Object層次結(jié)構(gòu)以及在樹(shù)的另一邊上密封的類型。11.如權(quán)利要求9所述的系統(tǒng),抽象根類型對(duì)應(yīng)于如在ECMA部分III提供的類型O的對(duì)象引用。12.如權(quán)利要求9所述的系統(tǒng),規(guī)則組件使用元數(shù)據(jù)確認(rèn)規(guī)則,以促使用戶定義類型不從抽象根類型和標(biāo)簽化值導(dǎo)出。13.如權(quán)利要求1所述的系統(tǒng),擴(kuò)展標(biāo)簽化值以執(zhí)行算術(shù)運(yùn)算。14.如權(quán)利要求9所述的系統(tǒng),還包括一組件,所述組件在堆棧上加載與抽象根類型相關(guān)聯(lián)的值,用于具有“.ref”后綴的指令變量。15.如權(quán)利要求1所述的系統(tǒng),還包括用于操縱標(biāo)簽化值的至少一個(gè)指令,所述指令包括強(qiáng)制轉(zhuǎn)換類、測(cè)試類、用于將整數(shù)轉(zhuǎn)換成對(duì)象引用的tag(標(biāo)簽)指令,以及用于將對(duì)象引用轉(zhuǎn)換成整數(shù)的untag(非標(biāo)簽)指令至少之一。16.計(jì)算機(jī)可讀介質(zhì),具有存儲(chǔ)在其上的計(jì)算機(jī)可讀指令,所述指令用于實(shí)現(xiàn)權(quán)利要求1的類組件和規(guī)則組件的至少一個(gè)。17.促進(jìn)動(dòng)態(tài)代碼執(zhí)行的系統(tǒng),包括;裝置,用于分配一數(shù)據(jù)結(jié)構(gòu),所述數(shù)據(jù)結(jié)構(gòu)具有與標(biāo)簽化值相關(guān)聯(lián)的抽象對(duì)象類型和與用戶定義值相關(guān)聯(lián)的系統(tǒng)對(duì)象類型;以及裝置,用于防止系統(tǒng)對(duì)象類型從抽象對(duì)象類型繼承。18.促進(jìn)標(biāo)簽化數(shù)據(jù)類型處理的方法,包括定義分叉的類結(jié)構(gòu),該類結(jié)構(gòu)具有在所述結(jié)構(gòu)的一邊上的對(duì)象引用和在所述結(jié)構(gòu)的另一邊上的用戶定義引用;以及在動(dòng)態(tài)編程環(huán)境中執(zhí)行分叉的類結(jié)構(gòu)。19.如權(quán)利要求18所述的方法,還包括自動(dòng)地檢查用戶定義的引用不是從對(duì)象引用繼承屬性的。20.如權(quán)利要求18所述的方法,還包括擴(kuò)展分叉的類結(jié)構(gòu)以執(zhí)行算術(shù)運(yùn)算。21.如權(quán)利要求18所述的方法,還包括使用表示所希望的類的元數(shù)據(jù)標(biāo)記。22.如權(quán)利要求18所述的方法,還包括處理異常、驗(yàn)證結(jié)果和執(zhí)行堆棧運(yùn)算的至少之一。23.如權(quán)利要求18所述的方法,還包括測(cè)試對(duì)象是否是類的實(shí)例。24.如權(quán)利要求18所述的方法,還包括將對(duì)象強(qiáng)制轉(zhuǎn)換為類。25.如權(quán)利要求18所述的方法,還包括將整數(shù)轉(zhuǎn)換成對(duì)象引用。26.如權(quán)利要求18所述的方法,還包括將對(duì)象引用轉(zhuǎn)換成整數(shù)。27.計(jì)算機(jī)可讀介質(zhì),具有存儲(chǔ)在其上的數(shù)據(jù)結(jié)構(gòu),包括具有對(duì)象引用類型的第一數(shù)據(jù)字段;具有至少一個(gè)能從對(duì)象引用類型繼承的標(biāo)簽化值的第二數(shù)據(jù)字段;以及具有至少一個(gè)不是從對(duì)象引用類型繼承的非標(biāo)簽化值的第三數(shù)據(jù)字段。全文摘要本發(fā)明涉及促進(jìn)在受管理的代碼環(huán)境中動(dòng)態(tài)編程語(yǔ)言執(zhí)行的系統(tǒng)和方法。提供了類組件,它宣稱一個(gè)繼承層次,用于一個(gè)或多個(gè)關(guān)聯(lián)于動(dòng)態(tài)編程語(yǔ)言的標(biāo)簽化值。在標(biāo)簽化值的執(zhí)行期間,規(guī)則組件減輕了從標(biāo)簽化值繼承或?qū)С鰧傩缘挠脩舳x類型,以便支持類型安全運(yùn)行時(shí)間環(huán)境。提供了分叉的類樹(shù),它在樹(shù)的一邊定義了非標(biāo)簽化類型元素,而標(biāo)簽化類型元素值定義在樹(shù)的另一分支上。規(guī)則組件分析運(yùn)行時(shí)間擴(kuò)展,所述擴(kuò)展幫助防止來(lái)自樹(shù)的一個(gè)組件的數(shù)據(jù)從樹(shù)的另一組件導(dǎo)出或繼承屬性。運(yùn)行時(shí)間擴(kuò)展包括這樣的方面,如強(qiáng)制轉(zhuǎn)換類擴(kuò)展、測(cè)試類擴(kuò)展、和用于將數(shù)據(jù)類型從一個(gè)類子類型轉(zhuǎn)換成另一個(gè)的類子類型的轉(zhuǎn)換類擴(kuò)展。文檔編號(hào)G06F9/44GK1573688SQ20041004890公開(kāi)日2005年2月2日申請(qǐng)日期2004年6月9日優(yōu)先權(quán)日2003年6月10日發(fā)明者E·梅葉爾申請(qǐng)人:微軟公司