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

對(duì)中間碼的邏輯擴(kuò)展的制作方法

文檔序號(hào):6595197閱讀:153來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):對(duì)中間碼的邏輯擴(kuò)展的制作方法
對(duì)中間碼的邏輯擴(kuò)展背景傳統(tǒng)上,軟件創(chuàng)建工具產(chǎn)生二進(jìn)制代碼。軟件創(chuàng)建工具所產(chǎn)生的二進(jìn)制代碼一般包括操作系統(tǒng)運(yùn)行該代碼所需的一切東西,但不包括其他。例如,二進(jìn)制代碼一般包含代碼的機(jī)器指令、關(guān)于將指令放在存儲(chǔ)器中何處的信息等等。典型的二進(jìn)制代碼中不存在描述該二進(jìn)制代碼的特征的附加信息,例如代碼中各個(gè)函數(shù)的名稱(chēng)、每個(gè)函數(shù)所預(yù)期的參數(shù)類(lèi)型、代碼所使用的數(shù)據(jù)類(lèi)型的布局等,盡管該信息存在于原始源代碼中。因此,從源代碼到二進(jìn)制代碼的轉(zhuǎn)換是有損的過(guò)程。它產(chǎn)生了可被視為相對(duì)不透明的結(jié)果,意味著難以通過(guò)查看二進(jìn)制代碼來(lái)重構(gòu)丟失的信息。描述二進(jìn)制代碼的特征的附加信息有時(shí)被稱(chēng)為元數(shù)據(jù)描述其他數(shù)據(jù)的數(shù)據(jù)的通用術(shù)語(yǔ),在該情況下所描述的數(shù)據(jù)是二進(jìn)制代碼。如果沒(méi)有元數(shù)據(jù),諸如開(kāi)發(fā)工具和編譯器之類(lèi)的其他軟件難以并有時(shí)不可能確定二進(jìn)制代碼包含什么、完成什么或預(yù)期做什么。例如,通過(guò)檢查二進(jìn)制代碼,工具一般不能確定代碼定義了什么數(shù)據(jù)類(lèi)型、類(lèi)型定義了什么方法、特定方法試圖滿足的契約、軟件調(diào)試工具如何顯示數(shù)據(jù)類(lèi)型、軟件分析工具要如何分析數(shù)據(jù)類(lèi)型和方法,等等。相反,將代碼編譯為中間字節(jié)碼表示的系統(tǒng)一般對(duì)所產(chǎn)生的輸出而不僅僅是對(duì)二進(jìn)制代碼放置了多得多的信息。包含中間字節(jié)碼表示的容器有時(shí)稱(chēng)為匯編件,或者在Java 中稱(chēng)為Java類(lèi)文件或JAR文件(存檔文件,即包含多個(gè)類(lèi)文件的打包文件)。這里使用的術(shù)語(yǔ)“匯編件”是指字節(jié)碼和元數(shù)據(jù)的任何這樣的容器。除了中間字節(jié)碼以外,匯編件因此可包括描述二進(jìn)制代碼本身的各方面的附加信息(元數(shù)據(jù))。當(dāng)今公知的匯編件包括描述類(lèi)、其字段、方法等以及關(guān)于類(lèi)成員的自定義屬性的元數(shù)據(jù)。它還包含關(guān)于匯編件的依賴(lài)關(guān)系的信息、到可能已被移出匯編件的類(lèi)型的鏈接、等等。元數(shù)據(jù)使其他軟件能檢索關(guān)于中間碼的信息。因此,和傳統(tǒng)的二進(jìn)制代碼模塊相比,匯編件對(duì)于檢查該匯編件的工具來(lái)說(shuō)更為透明(意味著關(guān)于二進(jìn)制代碼的信息更可被發(fā)現(xiàn))。然而,附加的元數(shù)據(jù)及其產(chǎn)生的透明度通常伴隨著不期望的成本。例如,意圖供工具和代碼設(shè)計(jì)者使用但不在運(yùn)行時(shí)使用的元數(shù)據(jù)可能在運(yùn)行時(shí)占用存儲(chǔ)器。運(yùn)行代碼可能要求類(lèi)型的中間字節(jié)碼實(shí)現(xiàn),但是類(lèi)型的中間字節(jié)碼實(shí)現(xiàn)可能不是在設(shè)計(jì)時(shí)需要或被許多非運(yùn)行時(shí)工具需要。在已知的系統(tǒng)中,在將源代碼編譯到中間字節(jié)碼中以創(chuàng)建匯編件時(shí),需要已知所有可能的元數(shù)據(jù)。匯編件的代碼和元數(shù)據(jù)中的大多數(shù)一般駐留在單個(gè)儲(chǔ)存庫(kù)中二進(jìn)制匯編件本身,盡管附加元數(shù)據(jù)也可駐留在分開(kāi)的程序數(shù)據(jù)庫(kù)(PDB)儲(chǔ)存庫(kù)中。當(dāng)軟件開(kāi)發(fā)者把源代碼編譯到期望的匯編件中時(shí),軟件開(kāi)發(fā)者創(chuàng)建匯編件的這些代碼和元數(shù)據(jù)儲(chǔ)存庫(kù)。 結(jié)果,只有匯編件的原始作者才能創(chuàng)建或修改該匯編件。安全性特征一般使已改變的代碼無(wú)效。創(chuàng)作、組織、訪問(wèn)以及修改代碼和元數(shù)據(jù)的能力也受到為支持中間字節(jié)碼的文字編譯和執(zhí)行而施加的約束條件所限制。這些約束條件也可以不期望的方式影響諸如性能、安全性等這樣的特征。
概述可以以多種方式對(duì)匯編件聚集進(jìn)行創(chuàng)作、代理、訪問(wèn)、修改和分布等,所述匯編件聚集包括中間碼和元數(shù)據(jù)的任意定義的集合的虛擬的邏輯視圖??梢跃奂瘏R編件信息的多個(gè)物理容器以創(chuàng)建稱(chēng)為匯編件聚集的單個(gè)邏輯匯編件。匯編件可以被重新定義為針對(duì)(或投影至)匯編件聚集的邏輯視圖。匯編件可以被定義為針對(duì)(或投影至)匯編件信息的多個(gè)物理容器的聚集的邏輯視圖。匯編件可以針對(duì)請(qǐng)求者也就是,匯編件可以根據(jù)工具和/ 或執(zhí)行上下文而不是遵循運(yùn)行時(shí)所強(qiáng)制的顯式或隱式要求而被重新定義。有針對(duì)性的定制的視圖可以被消費(fèi)到虛擬匯編件中。可以構(gòu)造到與匯編件聚集相關(guān)聯(lián)的中間碼和元數(shù)據(jù)中的任意視圖,包括擴(kuò)展或改變每一個(gè)的格式和描述性能力。構(gòu)成匯編件聚集的各組件可以被擴(kuò)展、編輯和創(chuàng)作、后編譯、以及在匯編件已被軟件企業(yè)分發(fā)后,而不使該匯編件無(wú)效。擴(kuò)展匯編件可以使用現(xiàn)有的元數(shù)據(jù)/字節(jié)碼格式來(lái)創(chuàng)作,所述現(xiàn)有的元數(shù)據(jù)/字節(jié)碼格式允許現(xiàn)有的工具和應(yīng)用程序編程接口(API)使用擴(kuò)展匯編件。提供本發(fā)明內(nèi)容是為了以簡(jiǎn)化的形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并不旨在標(biāo)識(shí)出所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于限定所要求保護(hù)的主題的范圍。附圖簡(jiǎn)述在附圖中

圖1是一系統(tǒng)的示例的框圖,在該系統(tǒng)中,可以按照本文所公開(kāi)主題各方面作出對(duì)中間碼的邏輯擴(kuò)展;圖2是根據(jù)本文所公開(kāi)主題的各方面用于擴(kuò)展中間碼的方法的示例;圖3是示出其中可實(shí)現(xiàn)本文所公開(kāi)主題的各方面的計(jì)算環(huán)境的示例的框圖;以及圖4是根據(jù)本文所公開(kāi)主題的各方面的集成開(kāi)發(fā)環(huán)境的示例的框圖。詳細(xì)描述概覽歷史上,為在不托管運(yùn)行時(shí)環(huán)境中執(zhí)行而生成的二進(jìn)制代碼尚未以容易檢查和理解的后編譯形式被分發(fā)。這一局限在不存在調(diào)試符號(hào)且代碼在編譯和代碼生成過(guò)程期間已得到顯著優(yōu)化時(shí)特別明顯。然而,即使當(dāng)沒(méi)有優(yōu)化而編譯時(shí),并且在存在豐富的調(diào)試符號(hào)的情況下,源代碼(考慮到經(jīng)由調(diào)試程序的動(dòng)態(tài)執(zhí)行和檢查)和二進(jìn)制代碼相比通常更容易被人類(lèi)所理解。工具分析本機(jī)碼后編譯的能力也受到限制。因此,大多數(shù)本機(jī)分析工具或者針對(duì)源而執(zhí)行或者與編譯器/鏈接器集成一段時(shí)間,在該段時(shí)間內(nèi)存在代碼及其相應(yīng)元數(shù)據(jù)的最全局理解。除了上面列出的復(fù)雜性以外,不托管運(yùn)行時(shí)一般不提供用可支持人類(lèi)驅(qū)動(dòng)的和工具驅(qū)動(dòng)的場(chǎng)景的開(kāi)放集合的任意元數(shù)據(jù)注釋可執(zhí)行代碼的能力。然而,隨著托管運(yùn)行時(shí)環(huán)境的增長(zhǎng)與普及,該情況開(kāi)始改變。托管運(yùn)行時(shí)環(huán)境的例子包括Sun Microsystem公司的JAVA和微軟公司的.NET。Java編譯器將Java源代碼轉(zhuǎn)換成Java字節(jié)碼(Java虛擬機(jī)(JVM)的一種中間語(yǔ)言)。Java運(yùn)行時(shí)環(huán)境(JRE)在進(jìn)行中將中間字節(jié)碼轉(zhuǎn)換成本機(jī)機(jī)器代碼。微軟通用語(yǔ)言運(yùn)行時(shí)(Microsoft Common Language Runtime)提供了驅(qū)動(dòng)通用語(yǔ)言架構(gòu)(CLI)標(biāo)準(zhǔn)的原始實(shí)現(xiàn)。CLI定義了用于將源代碼編譯成CIL (通用中間語(yǔ)言,以前公知為MSIL或微軟中間語(yǔ)言)字節(jié)碼的規(guī)范,并且支持以稱(chēng)為托管匯編件為單元的元數(shù)據(jù)。托管匯編件以及Java類(lèi)文件包括最終可被編譯成機(jī)器代碼解譯成操作碼和操作數(shù)的直接表示時(shí),是人類(lèi)可讀語(yǔ)言。托管匯編件中的附加元數(shù)據(jù)提供了有助于驗(yàn)證字節(jié)碼并將其轉(zhuǎn)換成實(shí)際機(jī)器代碼的支持信息(類(lèi)型和成員細(xì)節(jié)、安全性許可等),實(shí)際機(jī)器代碼對(duì)于人類(lèi)驅(qū)動(dòng)的和工具驅(qū)動(dòng)的場(chǎng)景的開(kāi)放數(shù)也是容易可用的。在正常的加載和執(zhí)行代碼以外,用于檢查中間字節(jié)碼和元數(shù)據(jù)的機(jī)制被稱(chēng)為反射(Reflection)。元數(shù)據(jù)可以是可擴(kuò)展的。元數(shù)據(jù)可擴(kuò)展性的形式可以是自定義屬性,它是一種用簡(jiǎn)單名稱(chēng)和(任選地)由特定系統(tǒng)原語(yǔ)(諸如字符串、整數(shù)等)組成的數(shù)據(jù)團(tuán)來(lái)注釋全部元數(shù)據(jù)對(duì)象的機(jī)制。元數(shù)據(jù)也可以通過(guò)使用自定義修改程序以任意地?cái)U(kuò)展成員簽名來(lái)擴(kuò)展。 這些修改程序可用于支持諸如對(duì)成員的解析、重載或綁定這樣的操作。用于聲明、枚舉和檢索自定義屬性和成員簽名元數(shù)據(jù)的元數(shù)據(jù)API —般是可用的,使得與自定義屬性相關(guān)聯(lián)的任何附加數(shù)據(jù)也可通過(guò)檢查API來(lái)恢復(fù)。然而,最終,用戶可能希望在匯編件中運(yùn)行(執(zhí)行)代碼。一般而言,用戶希望代碼運(yùn)行得盡可能快,使用盡可能少的資源。然而,包括所有可發(fā)現(xiàn)信息可能造成顯著的運(yùn)行時(shí)成本。例如,將元數(shù)據(jù)添加至匯編件增加了匯編件的物理尺寸。較大的匯編件占用了較大的磁盤(pán)空間。將較大的匯編件加載到存儲(chǔ)器中要求更多的輸入輸出操作并且占用更多時(shí)間,因?yàn)橛懈鄶?shù)據(jù)要讀取。將較大的匯編件映射到存儲(chǔ)器中要求更多的虛擬地址空間,這為其他目的留出較少的可用地址空間。較大的匯編件也會(huì)負(fù)面影響其他性能特征,諸如工作集和引用的位置。此外,操作系統(tǒng)必須篩選和執(zhí)行在文字上不相關(guān)的全部信息以找到和執(zhí)行相關(guān)的信息。因此,盡管將和匯編件執(zhí)行不相關(guān)的信息添加至該匯編件會(huì)向開(kāi)發(fā)者提供好處 (例如,軟件開(kāi)發(fā)期間的較好性能、較好的代碼分析、較容易的調(diào)試、更有意義的性能統(tǒng)計(jì)量等等),但是這樣做可能降低運(yùn)行時(shí)性能。此外,已知系統(tǒng)的效應(yīng)有幾個(gè)限制。例如,目前僅有匯編件作者才能擴(kuò)展元數(shù)據(jù)元數(shù)據(jù)只能在修改相關(guān)源代碼和/或構(gòu)造機(jī)制后在編譯上下文中被擴(kuò)展。匯編件身份被限制為二進(jìn)制碼的特定構(gòu)造,并且進(jìn)一步受到與其相關(guān)聯(lián)的任何版本信息所限制。最后,并非所有期望描述的事物都能由運(yùn)行時(shí)屬性來(lái)表示。為了解決這些限制及其他限制,引入了一實(shí)體,在此稱(chēng)為匯編件聚集。匯編件聚集可以指描述一組類(lèi)型的元數(shù)據(jù)和代碼(可能為字節(jié)碼和本機(jī)碼)的組合。該聚集的一些可能組成部分包括但不限于一個(gè)或多個(gè)托管匯編件、諸如htellisense文件這樣的XML文件、JavaDoc文件和程序數(shù)據(jù)庫(kù)(PDB)文件。如目前所定義的,運(yùn)行時(shí)匯編件是可以為了創(chuàng)建其類(lèi)型之一的實(shí)例并且/或者為了在一類(lèi)型的成員的一個(gè)或多個(gè)中執(zhí)行代碼(或者執(zhí)行存在于匯編件全局范圍的代碼)而被加載的模塊。一些元數(shù)據(jù)(諸如關(guān)于串行化的信息、安全性許可、可見(jiàn)性等)駐留在該匯編件中,使得可以執(zhí)行全部可用的代碼。此外,運(yùn)行時(shí)匯編件可能包含或可能不包含在字面上執(zhí)行匯編件代碼不相關(guān)的附加元數(shù)據(jù)(諸如自定義屬性定義)。這類(lèi)元數(shù)據(jù)在下文中稱(chēng)為“冷元數(shù)據(jù)”。相反,匯編件聚集在邏輯上是運(yùn)行時(shí)匯編件中包含的信息的一個(gè)適當(dāng)超集。按照本文公開(kāi)的主題的各方面的運(yùn)行時(shí)匯編被定義為運(yùn)行時(shí)環(huán)境所使用的匯編件聚集上的視圖或投影。運(yùn)行時(shí)匯編件視圖可以針對(duì)視圖請(qǐng)求者的需求。運(yùn)行時(shí)匯編件視圖可以?xún)H包括來(lái)自產(chǎn)生當(dāng)前運(yùn)行時(shí)匯編件所需的聚集的信息。聚集匯編件的其他視圖可由不同工具使用。例如,當(dāng)在鏈接時(shí)間解析引用時(shí),編譯器可能需要匯編件聚集的視圖,所述視圖包含與公共類(lèi)型和方法以及它們的自定義屬性有關(guān)的信息、但不需要檢查所引用的代碼中的方法主體。因此,被提供給編譯器的聚集匯編件的視圖可包括與公共類(lèi)型和方法以及它們的自定義屬性有關(guān)的信息、但不包括所引用的代碼中的方法主體。可以通過(guò)組合多個(gè)現(xiàn)有的元數(shù)據(jù)和代碼儲(chǔ)存庫(kù)(二進(jìn)制運(yùn)行時(shí)匯編件文件、諸如 XML htelliSense文件這樣的文本文件、二進(jìn)制PDB數(shù)據(jù)文件等)來(lái)創(chuàng)建匯編件聚集。按照本文所公開(kāi)的主題的這一方面,對(duì)匯編件聚集的底層組件的改變可能改變聚集匯編件。 儲(chǔ)存庫(kù)可以被定義,儲(chǔ)存庫(kù)包括該匯編件聚集并且可以用指定的元數(shù)據(jù)和代碼來(lái)加載。要求和元數(shù)據(jù)或代碼有關(guān)的信息的應(yīng)用程序可以向匯編件聚集器或匯編件聚集視圖提供器請(qǐng)求關(guān)于該元數(shù)據(jù)和代碼的視圖,并且響應(yīng)于此,可從匯編件聚集視圖提供器接收針對(duì)請(qǐng)求者的視圖??梢詣?chuàng)建匯編件聚集來(lái)根據(jù)需要提供傳統(tǒng)組件。例如,托管代碼運(yùn)行時(shí)環(huán)境可以請(qǐng)求匯編件聚集器/匯編件聚集視圖提供器產(chǎn)生指定的運(yùn)行時(shí)匯編件的特定版本。于是, 匯編件聚集器/匯編件聚集視圖提供器可以創(chuàng)建所請(qǐng)求的運(yùn)行時(shí)匯編件。響應(yīng)于對(duì)匯編件聚集的特定設(shè)計(jì)時(shí)視圖的請(qǐng)求,可以返回自定義的設(shè)計(jì)時(shí)托管匯編件。類(lèi)似地,對(duì)來(lái)自匯編件聚集的運(yùn)行時(shí)匯編件的本機(jī)碼圖像的請(qǐng)求可能導(dǎo)致產(chǎn)生經(jīng)NGEN的圖像。微軟通用語(yǔ)言運(yùn)行時(shí)的本機(jī)圖像生成器(NGEN)為特定的環(huán)境產(chǎn)生本機(jī)二進(jìn)制圖像。字節(jié)碼在運(yùn)行時(shí)之前被完全轉(zhuǎn)換成本機(jī)CPU指令,消除了 JIT編譯進(jìn)程開(kāi)銷(xiāo)。當(dāng)針對(duì)匯編件運(yùn)行NGEN時(shí),所產(chǎn)生的本機(jī)圖像可以被置入本機(jī)圖像高速緩存中,供其他托管匯編件使用。按照本文所公開(kāi)的主題的其他方面,可以要求匯編件聚集器/匯編件聚集視圖提供器來(lái)生成聚集匯編件。二進(jìn)制重寫(xiě)器可以既產(chǎn)生運(yùn)行時(shí)匯編件,又產(chǎn)生冷元數(shù)據(jù)的單獨(dú)存儲(chǔ)機(jī)制??梢源鎯?chǔ)匯編件的并行源形式,并行源形式描述了匯編件與之相關(guān)的API的特性并且包括附加元數(shù)據(jù)、但不包括實(shí)現(xiàn)細(xì)節(jié)。源形式可以被編譯成二進(jìn)制形式以便于和工具集成,或者可以以源形式公開(kāi)地分發(fā)以提供人類(lèi)可讀評(píng)論。該第二存儲(chǔ)格式可以提供運(yùn)行時(shí)匯編件所提供的契約的公開(kāi)的、持久的表示??梢岳斫?,匯編件聚集可擔(dān)當(dāng)對(duì)系統(tǒng)其余部分不透明的代碼和元數(shù)據(jù)的儲(chǔ)存庫(kù), 并且可以以任何期望的格式被存儲(chǔ)。當(dāng)今所知的托管匯編件中的壓縮元數(shù)據(jù)二進(jìn)制碼可以被分成多段,并且存儲(chǔ)在穩(wěn)態(tài)存儲(chǔ)上的一個(gè)或多個(gè)文件中。類(lèi)似地,與托管匯編件相關(guān)聯(lián)的字節(jié)碼可以被分到一個(gè)或多個(gè)物理匯編件中。所有其他托管元數(shù)據(jù),包括安全性許可、成員簽名、資源、編組細(xì)節(jié)、范圍統(tǒng)計(jì)量及其他實(shí)體,也可以跨多個(gè)文件被分發(fā)。根據(jù)元數(shù)據(jù)的目的,該信息可能被復(fù)制,或者可能跨多個(gè)文件而不同。盡管在大多數(shù)情況下,可能存在意圖被運(yùn)行時(shí)編譯和執(zhí)行的至少一個(gè)基礎(chǔ)或標(biāo)準(zhǔn)的托管匯編件,但是匯編件聚集可包括多于一個(gè)的運(yùn)行時(shí)匯編件二進(jìn)制碼。因此,匯編件聚集包括用于以靈活的方式組織托管信息的虛擬方案。例如,單個(gè)匯編件聚集可以組織已分發(fā)的類(lèi)型的每一個(gè)版本的信息。匯編件聚集可以組織針對(duì)類(lèi)型的同一版本的實(shí)際的物理類(lèi)型信息,因?yàn)樗言诙鄠€(gè)實(shí)現(xiàn)中傳送??梢詣?chuàng)建保持邏輯組(諸如例如,包括“微軟CLR vl. 1可重分配的所有標(biāo)準(zhǔn)”的組)中每一實(shí)體的元數(shù)據(jù)的單個(gè)匯編件聚集,等等。因此可使用匯編件聚集來(lái)提供靈活的粒度。與一特定的工具或執(zhí)行上下文密切相關(guān)的代碼和元數(shù)據(jù)可以被打包在不連續(xù)的模塊中,使得和在目前已知的被聚集在單個(gè)運(yùn)行時(shí)匯編件中相比,該數(shù)據(jù)的部署和訪問(wèn)更為有效、安全、性能佳。類(lèi)似地,與工具或運(yùn)行時(shí)情況非密切相關(guān)的字節(jié)碼和元數(shù)據(jù)可以在物理上被分到一個(gè)單獨(dú)存儲(chǔ)??梢允褂脜R編件來(lái)提供可虛擬化的視圖。匯編件聚集可以作為單個(gè)邏輯實(shí)體被訪問(wèn),或者可以將任何組份匯編件(或匯編件的組合)分組到一起以提供匯編件的字節(jié)碼和元數(shù)據(jù)的視圖。可以使用匯編件來(lái)提供靈活的身份。匯編件聚集的身份可以是靈活的,因?yàn)樗赡懿⒉蛔裱蒀LI或 JAVA運(yùn)行時(shí)定義的、并且在目前一般理解和使用的匯編件身份的標(biāo)準(zhǔn)概念。例如,匯編件聚集可以呈現(xiàn)已被分發(fā)給消費(fèi)者的類(lèi)型的每一個(gè)版本的單個(gè)視圖??墒褂脜R編件聚集來(lái)提供靈活的內(nèi)容。對(duì)匯編件聚集內(nèi)容的查看可以是靈活的, 因?yàn)榭梢酝ㄟ^(guò)對(duì)一個(gè)或多個(gè)組份擴(kuò)展所提供的數(shù)據(jù)進(jìn)行聚集、組合、轉(zhuǎn)換等操作來(lái)導(dǎo)出相關(guān)的字節(jié)碼和元數(shù)據(jù)。這一視圖可以呈現(xiàn)最終被編譯和執(zhí)行的運(yùn)行時(shí)匯編件??墒褂脜R編件聚集來(lái)提供靈活的訪問(wèn)。對(duì)匯編件聚集執(zhí)行的部署、發(fā)現(xiàn)、訪問(wèn)和其他操作可以不受當(dāng)前存在的要求所限制??墒褂脜R編件聚集來(lái)提供靈活的創(chuàng)作。匯編件聚集可以由任意作者、 在任意時(shí)刻、通過(guò)工具化、以及由支持運(yùn)行時(shí)匯編件的確定源的編譯以外的進(jìn)程來(lái)擴(kuò)展。到中間碼的邏輯擴(kuò)展圖1示出向中間碼提供邏輯擴(kuò)展的系統(tǒng)100的示例。系統(tǒng)100可以包括以下的一個(gè)或多個(gè)編譯器102、匯編件聚集器/匯編件聚集視圖提供器104、一個(gè)或多個(gè)物理匯編件 106、以及一個(gè)或多個(gè)信息源108、110等。系統(tǒng)100的全部或部分可以駐留在諸如以下參照?qǐng)D3所述的計(jì)算機(jī)這樣的一個(gè)或多個(gè)計(jì)算機(jī)上。系統(tǒng)100或其部分可以包括如下參照?qǐng)D4 所描述和示出的集成設(shè)計(jì)環(huán)境600 (IDE)的一部分,所述集成設(shè)計(jì)環(huán)境600駐留在諸如以下參照?qǐng)D3所述的計(jì)算機(jī)這樣的一個(gè)或多個(gè)計(jì)算機(jī)上。或者,系統(tǒng)100或其部分可被提供作為獨(dú)立系統(tǒng)或作為插件。編譯器102可以包括將以.NET語(yǔ)言編寫(xiě)的源代碼編譯成中間字節(jié)碼的.NET編譯器?!?NET 語(yǔ)言包括但不限于 C#、C++、F#、J#、JScript. NET、Managed(托管)Jscript、 IronPython、IronRuby> VBx> VB. NET、Windows PowerShel 1> A#、Boo、Cobra、Chrome (針對(duì).NET 而非 Google 瀏覽器的對(duì)象 Pascal 語(yǔ)言)、Component (組件)Pascal、IKVM. NET、 IronLisp、L#、Lexico、Mondrian> Nemerle> P#、Phalanger、Phrogram、PowerBuilder、 #Smalltalk、AVR. NET、Active Oberon、APLNext> Common Larceny> Delphi. NET、Delta Forth. NET、DotLisp、EiffelEnvision、Fortran. NET、Gardens Point Modula-2/CLR、針對(duì)· NET 的 Haskell.Haskel 1. net、針對(duì)· NET 的 Hugs、IronScheme、L0LCode. NET、· NET 上的 Mercury> Net Express、NetCOBOL、OxygenScheme> S#、sml. net、Wildcat Cobol> X# 或任何其他.NET語(yǔ)言。編譯器102可以包括將以JAVA編寫(xiě)的源代碼編譯成字節(jié)碼的JAVA編譯器。編譯器102可以將源代碼114編譯到一個(gè)或多個(gè)物理托管匯編件106等中。物理托管匯編件可以包括定義類(lèi)型和執(zhí)行碼所必需的字節(jié)碼和原始元數(shù)據(jù)。匯編件聚集器/ 匯編件聚集視圖提供器104的聚集器部分可以將一個(gè)或多個(gè)物理匯編件106等和來(lái)自其他信息源108、110等的擴(kuò)展元數(shù)據(jù)聚集到一個(gè)匯編件聚集112中??梢酝ㄟ^(guò)組合多個(gè)現(xiàn)有的元數(shù)據(jù)和代碼儲(chǔ)存庫(kù)(二進(jìn)制運(yùn)行時(shí)匯編件文件、諸如XML htelliSense文件這樣的文本文件、二進(jìn)制程序數(shù)據(jù)庫(kù)(PDB)數(shù)據(jù)文件、故障修復(fù)文件、電子郵件文件、規(guī)則文件和/或其他信息源)來(lái)創(chuàng)建匯編件聚集112。想要和該元數(shù)據(jù)或代碼有關(guān)的信息的應(yīng)用程序(未示出)可以請(qǐng)求一特定匯編件聚集,該特定匯編件聚集包括來(lái)自匯編件聚集器或匯編件聚集器視圖提供器104的元數(shù)據(jù)和代碼的邏輯視圖。作為響應(yīng),匯編件聚集器或匯編件聚集器視圖提供器104可以返回預(yù)先計(jì)算的匯編件聚集112,或者可以創(chuàng)建所請(qǐng)求的邏輯視圖并且返回所創(chuàng)建的匯編件聚集112。可以提供規(guī)則,以確定可以被過(guò)濾出匯編件聚集的視圖的信息。提供匯編件聚集的視圖可以將一個(gè)匯編件映射到多個(gè)物理匯編件,以及/或者可以將許多匯編件映射到一個(gè)視圖。通過(guò)使用現(xiàn)有的元數(shù)據(jù)文件格式,現(xiàn)有的編譯器和工具可以讀取匯編件聚集的視圖,并因此無(wú)需被修改而與視圖協(xié)同工作。匯編件聚集112可以包括構(gòu)建時(shí)參考匯編件,該構(gòu)建時(shí)參考匯編件包括匯編件聚集元數(shù)據(jù)的經(jīng)過(guò)濾的視圖。例如,來(lái)自規(guī)則文件或在單獨(dú)工具中被編碼的規(guī)則可以指定“所有具有特定定制屬性的方法要被過(guò)濾出”。參考匯編件可以定義表面積(意指編譯器、IDE 和靜態(tài)分析工具的匯編件聚集的類(lèi)型和成員的一個(gè)子集),并且為在編譯時(shí)間或靜態(tài)分析時(shí)間有用的附加注釋提供機(jī)會(huì)。由構(gòu)建時(shí)參考匯編件所提供的元數(shù)據(jù)的邏輯視圖可以被限制為對(duì)取決于元數(shù)據(jù)的代碼進(jìn)行編譯所需的元數(shù)據(jù)的子集。構(gòu)建時(shí)參考匯編件是匯編件聚集如何提供靈活的粒度和訪問(wèn)的示例。例如,構(gòu)建時(shí)參考匯編件可以包括針對(duì)公共可見(jiàn)的項(xiàng)但排除專(zhuān)用項(xiàng)的元數(shù)據(jù)。構(gòu)建時(shí)參考匯編件的方法主體可以為空,因?yàn)橹虚g語(yǔ)言方法主體不與構(gòu)建操作相關(guān)。構(gòu)建時(shí)參考匯編件因此可以是輕量實(shí)體,它不展示特定工具驅(qū)動(dòng)的上下文所需的代碼和元數(shù)據(jù)以外的中間碼和元數(shù)據(jù)。構(gòu)建時(shí)參考匯編件可以被置于任何 (任意)一個(gè)或多個(gè)位置中,所述位置包括訪問(wèn)時(shí)不需要管理特權(quán)的目錄。構(gòu)建時(shí)參考匯編件聚集可以用聚集匯編件作為輸入被生成為一個(gè)后構(gòu)建步驟,或者可以從以源語(yǔ)言編寫(xiě)的獨(dú)立人為產(chǎn)物而生成。匯編件聚集可以在規(guī)范構(gòu)建環(huán)境內(nèi)部或外部在任一時(shí)刻被擴(kuò)展,并且可以由包括軟件提供者和軟件使用者(例如軟件提供者的消費(fèi)者)在內(nèi)的不確定集合的作者來(lái)擴(kuò)展。 對(duì)匯編件聚集的改變可以反映在根據(jù)下一請(qǐng)求從聚集產(chǎn)生的構(gòu)建時(shí)參考匯編件中。按照本文揭示的主體的一些方面,跨版本或跨平臺(tái)的參考匯編件可以對(duì)在邏輯上等價(jià)但是根據(jù)所發(fā)布的版本或根據(jù)目標(biāo)平臺(tái)的不同而不同的構(gòu)造進(jìn)行聚集。可以從匯編件聚集檢索定制的視圖。在標(biāo)準(zhǔn)的運(yùn)行時(shí)匯編件中,不可能描述同一類(lèi)型的兩個(gè)不同版本。另一方面,匯編件聚集可以對(duì)構(gòu)成類(lèi)型定義的中間碼和元數(shù)據(jù)的全部或一個(gè)子集進(jìn)行組合。 從該匯編件聚集中,工具可以檢索用于各種目的的各種視圖,例如用于標(biāo)識(shí)跨版本的斷開(kāi)改變。按照本文揭示的主題的一些方面,為了改進(jìn)運(yùn)行時(shí)JIT編譯進(jìn)程開(kāi)銷(xiāo)或運(yùn)行中編譯開(kāi)銷(xiāo)以及降低工作集(由此改進(jìn)性能),并且為了不影響執(zhí)行而允許豐富的工具情況,可以分離出執(zhí)行所不需要的數(shù)據(jù)。示例包括設(shè)計(jì)時(shí)、編譯時(shí)和分析時(shí)的特定屬性。在調(diào)試操作和代碼分析中,包括分離的中間語(yǔ)言在內(nèi)的參考匯編件視圖可以與確定的中間語(yǔ)言聚集在一起,以便擴(kuò)充靜態(tài)的和/或運(yùn)行時(shí)分析和運(yùn)行時(shí)執(zhí)行。確認(rèn)方法(以及對(duì)象不變量)的預(yù)先條件和后續(xù)條件的跟蹤語(yǔ)句或中間語(yǔ)言可以被存儲(chǔ)在分離的匯編件中作為字節(jié)碼。匯編件聚集可以提供該數(shù)據(jù)的經(jīng)聚集的視圖,適用于由工具或者由JIT 或運(yùn)行中編譯器本身進(jìn)行消費(fèi)。由于參考匯編件允許運(yùn)行時(shí)匯編件和可用類(lèi)型的編譯時(shí)視圖之間的分離,因此可以使用參考匯編件在編譯時(shí)檢查某些運(yùn)行時(shí)策略決策??紤]一安全模型(諸如CLR和 Silverlight的透明度模型),其中諸方法被分成“安全”、“關(guān)鍵”和“安全一關(guān)鍵”桶,且不可信的應(yīng)用程序僅能調(diào)用“安全”或“安全一關(guān)鍵”方法。在該視圖中,運(yùn)行時(shí)實(shí)施需要確保應(yīng)用程序不調(diào)用任何“關(guān)鍵”的方法??梢酝ㄟ^(guò)向用戶給予聚集的參考匯編件視圖來(lái)提高開(kāi)發(fā)體驗(yàn),該參考匯編件視圖僅包含“安全”和“安全一關(guān)鍵”方法。對(duì)訪問(wèn)“關(guān)鍵”方法的任何嘗試會(huì)導(dǎo)致編譯時(shí)差錯(cuò)而非運(yùn)行時(shí)差錯(cuò)(由于失敗的安全檢查)。盡管這并未減輕運(yùn)行時(shí)繼續(xù)實(shí)施其安全模型,它通過(guò)確保不需要包括高度代碼覆蓋來(lái)確保遵循安全模型,從而顯著地幫助了開(kāi)發(fā)者。同一類(lèi)型的過(guò)濾可以應(yīng)用于諸如代碼訪問(wèn)安全等其他安全模型, 以便為完全可信的和部分可信的消費(fèi)者產(chǎn)生參考匯編件。參考匯編件視圖可允許以更受訓(xùn)的方式來(lái)實(shí)現(xiàn)朋友匯編件。朋友關(guān)系首先在C++ 中的類(lèi)層上引入,并且已在CLI中擴(kuò)展以便把方法包括在標(biāo)記為“內(nèi)部”的匯編件中。目前,朋友匯編件的實(shí)現(xiàn)一般允許第一匯編件中的全部?jī)?nèi)部方法對(duì)于第二匯編件中的所有類(lèi)型可見(jiàn)。朋友匯編件間的表面積未受緊密控制。由于對(duì)內(nèi)部成員的方法幾乎沒(méi)有限制,因此開(kāi)發(fā)者較不可能對(duì)內(nèi)部方法的契約進(jìn)行嚴(yán)格關(guān)注,或甚至有可能決定移除內(nèi)部方法。如果顯式地獲悉特定方法曾被一朋友匯編件使用,則會(huì)獲悉該方法和典型的內(nèi)部方法相比, 具有額外的版本和兼容性要求。這樣做的一種方式是用“FriendAccessAllowed(朋友訪問(wèn)被允許)”屬性來(lái)擴(kuò)展運(yùn)行時(shí)的朋友匯編件的概念,并且僅把用該屬性標(biāo)記的內(nèi)部方法包括在參考匯編件中(而不使所有內(nèi)部方法都被包括在匯編件中的已知實(shí)現(xiàn))。相反,按照本文揭示的主題的各方面,參考匯編件中展示的較小的內(nèi)部表面積可防止對(duì)內(nèi)部方法的訪問(wèn), 除非顯式地標(biāo)記了內(nèi)部方法??梢允褂枚鄠€(gè)參考匯編件來(lái)展示庫(kù)的子集,用于朋友匯編件的安全的補(bǔ)充編譯時(shí)實(shí)施。多個(gè)參考匯編件也可用于編程模型限制。圖2示出根據(jù)本發(fā)明主題的各方面用于提供中間碼的方法的示例。在202,源代碼可由諸如參照?qǐng)D1所述的編譯器進(jìn)行編譯。編譯器的輸出是以中間碼編寫(xiě)的物理匯編件。 元數(shù)據(jù)可以與所產(chǎn)生的字節(jié)碼相關(guān)聯(lián)。在204,諸如參照?qǐng)D1描述的匯編件聚集器/匯編件聚集視圖提供器可以將(如上所述來(lái)自一個(gè)或多個(gè)源的)一個(gè)或多個(gè)物理匯編件和元數(shù)據(jù)聚集到一個(gè)匯編件聚集中。在206,匯編件聚集器/匯編件聚集器視圖提供器可以從應(yīng)用程序或其他實(shí)體接收對(duì)特定視圖的請(qǐng)求。在208,匯編件聚集器/匯編件聚集器視圖提供器可以確定所請(qǐng)求的視圖是否已被預(yù)先計(jì)算。在210,如果匯編件聚集器/匯編件聚集器視圖提供器確定所請(qǐng)求的視圖已被預(yù)先計(jì)算和存儲(chǔ),則匯編件聚集器/匯編件聚集器視圖提供器可以將所請(qǐng)求的視圖返回至請(qǐng)求者。在208,如果匯編件聚集器/匯編件聚集器視圖提供器確定所請(qǐng)求的視圖不可用,則在212,匯編件聚集器/匯編件聚集器視圖提供器可以計(jì)算該視圖并將所請(qǐng)求的視圖返回至請(qǐng)求者。在214,匯編件聚集的組份組件可以改變,從而改變匯編件聚集216。對(duì)已改變的匯編件聚集的視圖的后續(xù)請(qǐng)求可返回更新的視圖。可以理解,對(duì)匯編件聚集的一個(gè)或多個(gè)組份組件的改變可以在任何時(shí)刻發(fā)生,如上更完全描述的,視圖可以被預(yù)先計(jì)算和存儲(chǔ)。例如,可以在接收到對(duì)邏輯視圖的請(qǐng)求之前把附加元數(shù)據(jù)添加至匯編件聚集。還可以理解,對(duì)物理匯編件的改變會(huì)改變匯編件聚集。對(duì)底層數(shù)據(jù)源的改變可以被自動(dòng)地傳播。例如,匯編件聚集可以被實(shí)現(xiàn)為指針的表,其中每個(gè)指針指向一個(gè)數(shù)據(jù)源,每個(gè)數(shù)據(jù)源包括一個(gè)或多個(gè)托管物理匯編件或者元數(shù)據(jù)的一個(gè)或多個(gè)源。
合適計(jì)算環(huán)境的示例為了提供有關(guān)本文所公開(kāi)的主題的各個(gè)方面的上下文,圖3以及以下討論旨在提供其中可以實(shí)現(xiàn)各實(shí)施例的合適計(jì)算環(huán)境510的簡(jiǎn)要概括描述。盡管本文所公開(kāi)的主題是在諸如程序模塊等由一個(gè)或多個(gè)計(jì)算機(jī)或其它計(jì)算設(shè)備執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的通用上下文中描述的,但本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到,本文所公開(kāi)的主題的各部分還能夠結(jié)合其它程序模塊和/或硬件和軟件的組合來(lái)實(shí)現(xiàn)。通常,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定數(shù)據(jù)類(lèi)型的例程、程序、對(duì)象、物理人為產(chǎn)物、數(shù)據(jù)結(jié)構(gòu)等。通常,程序模塊的功能可以在各個(gè)實(shí)施例中按需進(jìn)行組合或分布。計(jì)算環(huán)境510只是合適的操作環(huán)境的一個(gè)示例,并且不旨在對(duì)此處所公開(kāi)的主題的使用范圍或功能提出任何限制。參考圖3,描述了計(jì)算機(jī)512形式的通用計(jì)算設(shè)備。計(jì)算機(jī)512可包括處理單元 514、系統(tǒng)存儲(chǔ)器516和系統(tǒng)總線518。處理單元514可以是各種可用處理器中的任一種。還可以使用雙微處理器及其他多處理器體系結(jié)構(gòu)作為處理單元514。系統(tǒng)存儲(chǔ)器516可包括易失性存儲(chǔ)器520和非易失性存儲(chǔ)器522。非易失性存儲(chǔ)器522可包括只讀存儲(chǔ)器(ROM)、 可編程ROM (PROM)、電可編程ROM (EPROM)或閃存。易失性存儲(chǔ)器520可包括可充當(dāng)外部高速緩沖存儲(chǔ)器的隨機(jī)存取存儲(chǔ)器(RAM)。系統(tǒng)總線518將包括系統(tǒng)存儲(chǔ)器516的系統(tǒng)物理人為產(chǎn)物耦合到處理單元514。系統(tǒng)總線518可以是幾種類(lèi)型的總線結(jié)構(gòu)中的任何一種,包括存儲(chǔ)器總線、存儲(chǔ)控制器、外圍總線、外部總線或局部總線,并且可以使用各種可用總線體系結(jié)構(gòu)中的任一種。計(jì)算機(jī)512通常包括各種計(jì)算機(jī)可讀介質(zhì),諸如易失性和非易失性介質(zhì)、可移動(dòng)和不可移動(dòng)介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)可以通過(guò)用于存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)來(lái)實(shí)現(xiàn)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,RAM、 ROM、EEPR0M、閃存或其它存儲(chǔ)器技術(shù)、CDR0M、數(shù)字多功能盤(pán)(DVD)或其它光盤(pán)存儲(chǔ)、磁盒、 磁帶、磁盤(pán)存儲(chǔ)或其它磁存儲(chǔ)設(shè)備、或可以用來(lái)儲(chǔ)存所期望的信息并可由計(jì)算機(jī)512訪問(wèn)的任一其它介質(zhì)。將理解,圖3描述了可充當(dāng)用戶與計(jì)算機(jī)資源之間的媒介的軟件。該軟件可以包括可存儲(chǔ)在盤(pán)存儲(chǔ)5M上的操作系統(tǒng)528,該操作系統(tǒng)可控制并分配計(jì)算機(jī)系統(tǒng)512的資源。盤(pán)存儲(chǔ)5M可以是通過(guò)諸如接口 5 的不可移動(dòng)存儲(chǔ)器接口連接到系統(tǒng)總線518的硬盤(pán)驅(qū)動(dòng)器。系統(tǒng)應(yīng)用程序530利用由操作系統(tǒng)5 通過(guò)存儲(chǔ)在系統(tǒng)存儲(chǔ)器516或者存儲(chǔ)在盤(pán)存儲(chǔ)5M上的程序模塊532和程序數(shù)據(jù)534對(duì)資源的管理。應(yīng)該明白,計(jì)算機(jī)可用各種操作系統(tǒng)或操作系統(tǒng)的組合來(lái)實(shí)現(xiàn)。用戶可通過(guò)輸入設(shè)備536向計(jì)算機(jī)512輸入命令或信息。輸入設(shè)備536包括但不限于定點(diǎn)設(shè)備,諸如鼠標(biāo)、跟蹤球、指示筆、觸摸墊、鍵盤(pán)、話筒等。這些及其他輸入設(shè)備通過(guò)系統(tǒng)總線518經(jīng)由接口端口 538連接到處理單元514。接口端口 538可表示串行端口、并行端口、通用串行總線(USB)等。輸出設(shè)備540可與輸入設(shè)備使用相同類(lèi)型的端口。提供輸出適配器M2以舉例說(shuō)明存在像監(jiān)視器、揚(yáng)聲器、以及打印機(jī)的需要特定適配器的一些輸出裝置M0。輸出適配器542包括但不限于,在輸出設(shè)備540和系統(tǒng)總線518之間提供連接的視頻卡和聲卡。其他設(shè)備和/或設(shè)備系統(tǒng),諸如遠(yuǎn)程計(jì)算機(jī)M4,可提供輸入和輸出兩種能力。計(jì)算機(jī)512可以使用到諸如遠(yuǎn)程計(jì)算機(jī)544之類(lèi)的一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)的邏輯
11連接來(lái)在聯(lián)網(wǎng)環(huán)境中操作。遠(yuǎn)程計(jì)算機(jī)544可以是個(gè)人計(jì)算機(jī)、服務(wù)器、路由器、網(wǎng)絡(luò)PC、對(duì)等設(shè)備或其它常見(jiàn)的網(wǎng)絡(luò)節(jié)點(diǎn),并且通常包括許多或所有以上相對(duì)于計(jì)算機(jī)512所描述的元件,盡管在圖3中僅示出了存儲(chǔ)器存儲(chǔ)設(shè)備M6。遠(yuǎn)程計(jì)算機(jī)544可經(jīng)由通信連接550邏輯地連接。網(wǎng)絡(luò)接口 548涵蓋諸如局域網(wǎng)(LAN)和廣域網(wǎng)(WAN)這樣的通信網(wǎng)絡(luò),但也可包括其他網(wǎng)絡(luò)。通信連接550是指用來(lái)將網(wǎng)絡(luò)接口 548連接到總線518的硬件/軟件。連接550可以在計(jì)算機(jī)512內(nèi)部或外部并且包括諸如調(diào)制解調(diào)器(電話、電纜、DSL和無(wú)線) 和ISDN適配器、以太網(wǎng)卡等內(nèi)部和外部技術(shù)。應(yīng)該理解,所示網(wǎng)絡(luò)連接僅是示例,并且可以使用在計(jì)算機(jī)之間建立通信鏈路的其它手段。本領(lǐng)域的普通技術(shù)人員可以理解,計(jì)算機(jī)512或其它客戶機(jī)設(shè)備可作為計(jì)算機(jī)網(wǎng)絡(luò)的一部分來(lái)部署。在這一點(diǎn)上,本文所公開(kāi)的主題涉及具有任意數(shù)量的存儲(chǔ)器或存儲(chǔ)單元以及在任意數(shù)量的存儲(chǔ)單元或卷上發(fā)生的任意數(shù)量的應(yīng)用程序和進(jìn)程的任何計(jì)算機(jī)系統(tǒng)。本文所公開(kāi)的主題的各方面可應(yīng)用于具有部署在網(wǎng)絡(luò)環(huán)境中的具有遠(yuǎn)程或本地存儲(chǔ)的服務(wù)器計(jì)算機(jī)和客戶計(jì)算機(jī)的環(huán)境。本文所公開(kāi)的主題的各方面也可應(yīng)用于具有編程語(yǔ)言功能、解釋和執(zhí)行能力的獨(dú)立計(jì)算設(shè)備。圖4示出集成開(kāi)發(fā)環(huán)境(IDE)600和通用語(yǔ)言運(yùn)行時(shí)環(huán)境602。IDE 600可允許用戶(例如,開(kāi)發(fā)者、程序員、設(shè)計(jì)者、編碼者等)在計(jì)算機(jī)系統(tǒng)中設(shè)計(jì)、編碼、編譯、測(cè)試、 運(yùn)行、編輯、調(diào)試或構(gòu)建程序、程序集、網(wǎng)站、web應(yīng)用程序和web服務(wù)。軟件程序可包括以一種或多種源代碼語(yǔ)言(例如,Visual Basic、Visual J#、C++、C#、J#、Java Script、APL、 COBOL、Pascal、Eiffel、Haskell、ML、Oberon、Perl、Python、Scheme^ Smalltalk 等)創(chuàng)建的源代碼(組件610)。IDE 600可提供本機(jī)碼開(kāi)發(fā)環(huán)境,或者可提供在虛擬機(jī)上運(yùn)行的托管代碼開(kāi)發(fā),或者可提供其組合。IDE 600可提供使用.NET框架的托管代碼開(kāi)發(fā)環(huán)境??墒褂谜Z(yǔ)言專(zhuān)用源編譯器620從源代碼組件610和本機(jī)碼組件611創(chuàng)建中間語(yǔ)言組件650,并且在執(zhí)行應(yīng)用時(shí)使用中間語(yǔ)言編譯器660(例如,即時(shí)(JIT)編譯器,或在較簡(jiǎn)單的實(shí)施例中的解釋器)從中間語(yǔ)言組件650創(chuàng)建本機(jī)碼組件611(例如,機(jī)器可執(zhí)行指令)。S卩,當(dāng)IL 應(yīng)用被執(zhí)行時(shí),其在被執(zhí)行的同時(shí)被編譯成適合正在其上執(zhí)行它的平臺(tái)的合適機(jī)器語(yǔ)言, 藉此使代碼能跨若干平臺(tái)便攜?;蛘撸谄渌麑?shí)施例中,程序可被編譯成適合其目標(biāo)平臺(tái)的本機(jī)碼機(jī)器語(yǔ)言(未示出)。用戶可根據(jù)已知軟件編程技術(shù)以及與特定源語(yǔ)言相關(guān)聯(lián)的特定邏輯和句法規(guī)則經(jīng)由IDE 600中的用戶接口 640和源代碼編輯器651來(lái)創(chuàng)建和/或編輯源代碼組件。此后, 源代碼組件610可經(jīng)由源編譯器620被編譯,藉此可創(chuàng)建該程序的中間語(yǔ)言表示,諸如匯編 630。匯編630可包括中間語(yǔ)言組件650和元數(shù)據(jù)642。應(yīng)用程序設(shè)計(jì)可以能夠在部署前被驗(yàn)證。此處所述的各種技術(shù)可結(jié)合硬件或軟件,或在適當(dāng)時(shí)以其組合來(lái)實(shí)現(xiàn)。由此,本文所公開(kāi)的方法和裝置或其特定方面或部分可采取包含在諸如軟盤(pán)、CD-ROM、硬盤(pán)驅(qū)動(dòng)器或任何其它機(jī)器可讀存儲(chǔ)介質(zhì)等有形介質(zhì)中的程序代碼(即,指令)的形式,其中當(dāng)程序代碼被加載到諸如計(jì)算機(jī)等機(jī)器內(nèi)并由其執(zhí)行時(shí),該機(jī)器成為用于實(shí)現(xiàn)本文所公開(kāi)的主題的各方面的裝置。在程序代碼在可編程計(jì)算機(jī)上執(zhí)行的情況下,計(jì)算設(shè)備通常將包括處理器、該處理器可讀的存儲(chǔ)介質(zhì)(包括易失性和非易失性的存儲(chǔ)器和/或存儲(chǔ)元件)、至少一個(gè)輸入設(shè)備、以及至少一個(gè)輸出設(shè)備??衫缤ㄟ^(guò)使用數(shù)據(jù)處理API等來(lái)利用域?qū)S镁幊棠P透鞣矫娴膭?chuàng)建和/或?qū)崿F(xiàn)的一個(gè)或多個(gè)程序可用高級(jí)過(guò)程編程語(yǔ)言或面向?qū)ο蟮木幊陶Z(yǔ)言來(lái)實(shí)現(xiàn)以與計(jì)算機(jī)系統(tǒng)通信。然而,如果需要,該程序可以用匯編語(yǔ)言或機(jī)器語(yǔ)言來(lái)實(shí)現(xiàn)。 在任何情形中,語(yǔ)言可以是編譯語(yǔ)言或解釋語(yǔ)言,且與硬件實(shí)現(xiàn)相結(jié)合。
雖然已結(jié)合附圖描述了本文所公開(kāi)的主題,但是應(yīng)理解,可作出修改以按不同方式執(zhí)行相同功能。
權(quán)利要求
1.一種向中間碼提供邏輯擴(kuò)展的系統(tǒng)(100),包括匯編件聚集器(104),用于聚集多個(gè)物理匯編件的至少一個(gè)物理匯編件(106),所述至少一個(gè)物理匯編件(106) 包括由編譯器(10 與所述至少一個(gè)物理匯編件相關(guān)聯(lián)的原始元數(shù)據(jù),用來(lái)自多個(gè)數(shù)據(jù)源 (110)的至少一個(gè)數(shù)據(jù)源(108)的擴(kuò)展元數(shù)據(jù)來(lái)創(chuàng)建匯編件聚集(112),所述匯編件聚集 (112)包括所述至少一個(gè)物理匯編件(106)和來(lái)自所述至少一個(gè)數(shù)據(jù)源(108)的擴(kuò)展元數(shù)據(jù)的邏輯視圖;以及從請(qǐng)求者接收對(duì)所述匯編件聚集的特定視圖的請(qǐng)求,并且返回被定向至所述請(qǐng)求者的所述特定視圖。
2.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述匯編件聚集器預(yù)先計(jì)算定向至所述請(qǐng)求者的特定視圖并將其存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中。
3.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述匯編件聚集器響應(yīng)于所述請(qǐng)求計(jì)算所述匯編件聚集的特定視圖并將所計(jì)算的視圖返回至所述請(qǐng)求者。
4.如權(quán)利要求1所述的系統(tǒng),其特征在于,響應(yīng)于對(duì)所述匯編件聚集的組件的改變,所述匯編件聚集被改變。
5.如權(quán)利要求1所述的系統(tǒng),其特征在于,所述匯編件聚集的特定視圖包括傳統(tǒng)組件、 特定環(huán)境的本機(jī)二進(jìn)制圖像、NGEN的圖像、包括被限制為將源代碼編譯成中間字節(jié)碼所需的元數(shù)據(jù)的元數(shù)據(jù)子集在內(nèi)的構(gòu)建時(shí)參考匯編件、或者包括被限制為執(zhí)行參考匯編件所需的元數(shù)據(jù)的元數(shù)據(jù)子集在內(nèi)的運(yùn)行時(shí)參考匯編件。
6.一種擴(kuò)展中間碼的方法,包括生成多個(gè)物理匯編件的至少一個(gè)物理匯編件O02),所述至少一個(gè)物理匯編件包括由編譯器生成的原始元數(shù)據(jù);將所述至少一個(gè)物理匯編件和來(lái)自多個(gè)數(shù)據(jù)源中至少一個(gè)數(shù)據(jù)源的擴(kuò)展元數(shù)據(jù)聚集到一匯編件聚集中O04),所述匯編件聚集包括所述至少一個(gè)匯編件和來(lái)自所述至少一個(gè)數(shù)據(jù)源的所述擴(kuò)展元數(shù)據(jù)的邏輯集合;以及將所述匯編件聚集存儲(chǔ)在數(shù)據(jù)存儲(chǔ)中012)。
7.如權(quán)利要求6所述的方法,其特征在于,還包括從請(qǐng)求者接收對(duì)所述匯編件聚集的特定邏輯視圖的請(qǐng)求。
8.如權(quán)利要求6所述的方法,其特征在于,還包括預(yù)先計(jì)算所述匯編件聚集的特定邏輯視圖并存儲(chǔ)預(yù)先計(jì)算的特定邏輯視圖。
9.如權(quán)利要求7所述的方法,其特征在于,還包括將所述匯編件聚集的所請(qǐng)求的特定邏輯視圖返回至所述請(qǐng)求者。
10.一種包括計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),所述指令在被執(zhí)行時(shí)使計(jì)算環(huán)境生成多個(gè)物理匯編件的至少一個(gè)物理匯編件的邏輯視圖012),所述至少一個(gè)物理匯編件包括由編譯器生成的原始元數(shù)據(jù),還包括來(lái)自多個(gè)數(shù)據(jù)源中至少一個(gè)數(shù)據(jù)源的擴(kuò)展元數(shù)據(jù),將所述至少一個(gè)物理匯編件和所述擴(kuò)展元數(shù)據(jù)聚集到一匯編件聚集中,所述匯編件聚集包括所述至少一個(gè)匯編件和來(lái)自所述至少一個(gè)數(shù)據(jù)源的所述擴(kuò)展元數(shù)據(jù)的邏輯集合; 以及向請(qǐng)求者提供所述匯編件聚集的邏輯視圖,所述邏輯視圖被提供給被定向至所述請(qǐng)求者的請(qǐng)求者012)。
11.如權(quán)利要求10所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使所述計(jì)算環(huán)境執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令從所述請(qǐng)求者接收對(duì)所述匯編件聚集的特定視圖的請(qǐng)求。
12.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使所述計(jì)算環(huán)境執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令將所述匯編件聚集的所述特定視圖返回至所述請(qǐng)求者。
13.如權(quán)利要求11所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使所述計(jì)算環(huán)境執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令預(yù)先計(jì)算和存儲(chǔ)所述特定視圖,所述特定視圖被定向至所述請(qǐng)求者并且將所保存的視圖返回至所述請(qǐng)求者。
14.如權(quán)利要求10所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使所述計(jì)算環(huán)境執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令擴(kuò)展、編輯或創(chuàng)作對(duì)所述匯編件聚集的組件的改變,而無(wú)須使所產(chǎn)生的匯編件無(wú)效,所述組件包括所述至少一個(gè)數(shù)據(jù)源或者編譯后的所述多個(gè)物理匯編件中的物理匯編件。
15.如權(quán)利要求12所述的計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其特征在于,還包括在被執(zhí)行時(shí)使所述計(jì)算環(huán)境執(zhí)行以下動(dòng)作的計(jì)算機(jī)可執(zhí)行指令提供統(tǒng)組件、特定環(huán)境的本機(jī)二進(jìn)制圖像、NGEN的圖像、包括被限制為將源代碼編譯成中間碼所需的元數(shù)據(jù)的元數(shù)據(jù)子集在內(nèi)的構(gòu)建時(shí)參考匯編件、或者包括被限制為執(zhí)行參考匯編件所需的元數(shù)據(jù)的元數(shù)據(jù)子集在內(nèi)的運(yùn)行時(shí)參考匯編件。
全文摘要
可以對(duì)匯編件聚集進(jìn)行創(chuàng)作、代理、訪問(wèn)、修改和分布等,所述匯編件聚集包括中間碼和元數(shù)據(jù)的任意定義的集合的虛擬的邏輯視圖??梢跃奂瘏R編件信息的多個(gè)物理容器以創(chuàng)建稱(chēng)為匯編件聚集的單個(gè)邏輯匯編件。匯編件可以被重新定義為針對(duì)(或投影至)匯編件聚集的邏輯視圖。這一匯編件可以被定向至請(qǐng)求者也就是,匯編件可以根據(jù)工具和/或執(zhí)行上下文而不是遵循運(yùn)行時(shí)所實(shí)施的顯式或隱式要求而被重新定義。
文檔編號(hào)G06F9/45GK102177502SQ200980140371
公開(kāi)日2011年9月7日 申請(qǐng)日期2009年9月30日 優(yōu)先權(quán)日2008年10月8日
發(fā)明者B·E·瑞克托, B·H·文特爾, B·M·格林克邁爾, K·J·克瓦利納, M·C·范寧 申請(qǐng)人:微軟公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1