国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

關(guān)于CLR、CIL、CTS、CLS、CLI、BCL和FCL

2019-11-11 04:36:43
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

相關(guān)名詞解釋?zhuān)?/p>

如果要想深入學(xué)習(xí).NET平臺(tái),那么標(biāo)題中的這些關(guān)鍵字對(duì)你來(lái)說(shuō)并不陌生,這些名詞構(gòu)成了.NET龐大的生態(tài)系統(tǒng),為了宏觀認(rèn)識(shí).NET平臺(tái),學(xué)些.NET架構(gòu)體系,針對(duì)一些常用常用名詞的理解是很有必要的,未必強(qiáng)行記憶,但至少要知道它們的含義。

CLR,公共語(yǔ)言運(yùn)行時(shí)(Common Language Runtime)

無(wú)論通過(guò)任何語(yǔ)言構(gòu)建產(chǎn)品,都必須寄宿到一個(gè)平臺(tái)中運(yùn)行,這正如我們的軟件運(yùn)行在操作系統(tǒng)環(huán)境一樣,操作系統(tǒng)為CLR提供了運(yùn)行環(huán)境,使用.NET構(gòu)建的程序又運(yùn)行在CLR之上,CRL為.NET程序的運(yùn)行提供了溫床,CLR提供基本的類(lèi)庫(kù)和運(yùn)行引擎,基本類(lèi)庫(kù)封裝操作系統(tǒng)函數(shù)供開(kāi)發(fā)者方便調(diào)用,運(yùn)行引擎用于編譯并運(yùn)行我們開(kāi)發(fā)的程序。CLR包含.NET運(yùn)行引擎和符合CLI的類(lèi)庫(kù)。通過(guò).NET平臺(tái)構(gòu)建的程序都基于CLR基礎(chǔ)類(lèi)庫(kù)來(lái)實(shí)現(xiàn),并且運(yùn)行在CLR提供的運(yùn)行引擎之上。

編譯為托管代碼時(shí),編譯器將源代碼翻譯為 Microsoft 中間語(yǔ)言 (MSIL),這是一組可以有效地轉(zhuǎn)換為本機(jī)代碼且獨(dú)立于 CPU 的指令。MSIL 包括用于加載、存儲(chǔ)和初始化對(duì)象以及對(duì)對(duì)象調(diào)用方法的指令,還包括用于算術(shù)和邏輯運(yùn)算、控制流、直接內(nèi)存訪問(wèn)、異常處理和其他操作的指令。要使代碼可運(yùn)行,必須先將 MSIL 轉(zhuǎn)換為特定于 CPU 的代碼,這通常是通過(guò)實(shí)時(shí) (JIT) 編譯器來(lái)完成的。由于公共語(yǔ)言運(yùn)行庫(kù)為它支持的每種計(jì)算機(jī)結(jié)構(gòu)都提供了一種或多種 JIT 編譯器,因此同一組 MSIL 可以在所支持的任何結(jié)構(gòu)上 JIT 編譯和運(yùn)行。

CIL,公共中間語(yǔ)言(Common Intermediate Language)

CLI,簡(jiǎn)稱(chēng)微軟中間語(yǔ)言(MSIL)或者中間語(yǔ)言(IL)。CIL是編譯器將.NET代碼編譯成公共語(yǔ)言運(yùn)行時(shí)(CLR)能夠識(shí)別的中間代碼。它是一種介于高級(jí)語(yǔ)言(例如C#)和CPU指令之間的一種語(yǔ)言。當(dāng)用戶編譯一個(gè).NET程序時(shí),編譯器(例如VisualStudio)將C#源代碼編譯轉(zhuǎn)換成中間語(yǔ)言 (MSIL),它是一種能夠被CLR轉(zhuǎn)換成CPU指令的中間語(yǔ)言,當(dāng)執(zhí)行這些中間語(yǔ)言時(shí),CLR提供的實(shí)時(shí)(JIT)編譯器將它們轉(zhuǎn)化為CPU特定的代碼。由于公共語(yǔ)言運(yùn)行庫(kù)支持多種實(shí)時(shí)編譯器,因此同一段中間語(yǔ)言代碼可以被不同的編譯器實(shí)時(shí)編譯并運(yùn)行在不同的CPU結(jié)構(gòu)上。從理論上來(lái)說(shuō),MSIL將消除多年以來(lái)業(yè)界中不同語(yǔ)言之間的紛爭(zhēng)。在.NET的世界中可能出現(xiàn)下面的情況一部分代碼可以用C++實(shí)現(xiàn),另一部分代碼使用C#或VB.NET完成的,但是最后這些代碼都將被轉(zhuǎn)換為中間語(yǔ)言。這給程序員提供了極大的靈活性,程序員可以選擇自己熟悉的語(yǔ)言,并且再也不用為學(xué)習(xí)不斷推出的新語(yǔ)言而煩惱了。

CTS,通用類(lèi)型系統(tǒng)(Common Type System)

CTS是一種類(lèi)型系統(tǒng)和語(yǔ)言規(guī)范,它能夠確保CLR能夠識(shí)別和處理的類(lèi)型,所有.NET開(kāi)發(fā)語(yǔ)言中的類(lèi)型,無(wú)論時(shí)VS.Net類(lèi)型還是C#.NET類(lèi)型最終都會(huì)被編譯成CLR能夠識(shí)別的CTS類(lèi)型,因此CTS是.NET平臺(tái)類(lèi)型的抽象。例如VB.NET中的integer類(lèi)型和C#中的int類(lèi)型都編譯成CTS的System.Int32類(lèi)型。如果某種語(yǔ)言編寫(xiě)的程序能夠在CLR上運(yùn)行,并不能說(shuō)明這種語(yǔ)言完全符合CTS的規(guī)范。例如使用C++編寫(xiě)的代碼,部分代碼并不符合CTS規(guī)范,在編譯時(shí)把這部分不符合CTS的代碼會(huì)被編譯成原始代碼本地CPU指令而非中間代碼。

CLS,公共語(yǔ)言規(guī)范(Common Language Specification)

CLS是CTS的一個(gè)子集,所有.NET語(yǔ)言都應(yīng)該遵循此規(guī)則才能創(chuàng)建與其他語(yǔ)言可互操作的應(yīng)用程序,但要注意的是為了使各語(yǔ)言可以互操作,只能使用CLS所列出的功能對(duì)象,這些功能統(tǒng)稱(chēng)為與CLS兼容的功能,它是在.NET平臺(tái)上運(yùn)行語(yǔ)言的最小規(guī)范,正因?yàn)?NET上不同語(yǔ)言能夠輕松交互一樣,例如C#編寫(xiě)程序時(shí)可以直接引用并使用VB.NET編寫(xiě)的類(lèi)庫(kù)。為了達(dá)到這樣的交互,才制定出CLS規(guī)范,在.NET框架本身提供的所有類(lèi)庫(kù)(并非所有)都是與CLS兼容的,在查看MSDN文檔時(shí),不兼容的類(lèi)和方法都被特別標(biāo)記為不兼容,例如C#中的System.UInt32就標(biāo)記為”此API不兼容CLS。兼容 CLS的替代API為 Int64。“,這說(shuō)明并不是所有的語(yǔ)言(例如VB.NET或J#)都支持無(wú)符號(hào)的數(shù)據(jù)類(lèi)型,但這種數(shù)據(jù)類(lèi)型與CLS不兼容的。

CLI,公共語(yǔ)言基礎(chǔ)架構(gòu)(Common Language Infrastructure)

CLI是一個(gè)開(kāi)放的技術(shù)規(guī)范。它是由微軟聯(lián)合惠普以及英特爾于2000年向ECMA倡議的。通用語(yǔ)言基礎(chǔ)架構(gòu)定義了構(gòu)成.NET Framework基礎(chǔ)結(jié)構(gòu)的可執(zhí)行碼以及代碼的運(yùn)行時(shí)環(huán)境的規(guī)范,它定義了一個(gè)語(yǔ)言無(wú)關(guān)的跨體系結(jié)構(gòu)的運(yùn)行環(huán)境,這使得開(kāi)發(fā)者可以用規(guī)范內(nèi)定義的各種高級(jí)語(yǔ)言來(lái)開(kāi)發(fā)軟件,并且無(wú)需修正即可將軟件運(yùn)行在不同的計(jì)算機(jī)體系結(jié)構(gòu)上。CLI有時(shí)候會(huì)和CLR混用。但嚴(yán)格意義上說(shuō),這是錯(cuò)誤的。因?yàn)镃LI是一種規(guī)范,而CLR則是對(duì)這種規(guī)范的一個(gè)實(shí)現(xiàn)。

歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA)已經(jīng)于2001年10月13日批準(zhǔn)C#語(yǔ)言規(guī)范(ECMA-334)成為一種新誕生的計(jì)算機(jī)產(chǎn)業(yè)標(biāo)準(zhǔn)。同時(shí)國(guó)際標(biāo)準(zhǔn)組織ISO也同意該標(biāo)準(zhǔn)進(jìn)入該組織的審批階段。并且,作為.NET與CLR的核心部分,CLI與C#也同時(shí)獲得了ECMA的批準(zhǔn)(ECMA-335)。擁有了C#與CLI這兩項(xiàng)標(biāo)準(zhǔn),你可以自己寫(xiě)出能夠運(yùn)行于任何操作系統(tǒng)上的.NET平臺(tái)(只要你愿意)。如前所述,著名的MONO項(xiàng)目就是這么干的,MONO項(xiàng)目包括三個(gè)核心的部分:一個(gè)C#語(yǔ)言的編譯器,一個(gè)CLI和一個(gè)類(lèi)庫(kù)。

BCL,基礎(chǔ)類(lèi)庫(kù)(Base Class Library)

BCL是一個(gè)公共編程框架,稱(chēng)為基類(lèi)庫(kù),所有語(yǔ)言的開(kāi)發(fā)者都能利用它。是CLI(Common Language Infrastructure,公共語(yǔ)言基礎(chǔ)結(jié)構(gòu))的規(guī)范之一,主要包括:執(zhí)行網(wǎng)絡(luò)操作,執(zhí)行I/O操作,安全管理,文本操作,數(shù)據(jù)庫(kù)操作,xml操作,與事件日志交互,跟蹤和一些診斷操作,使用非托管代碼,創(chuàng)建與調(diào)用動(dòng)態(tài)代碼等,粒度相對(duì)較小,為所有框架提供基礎(chǔ)支持。

FCL,框架類(lèi)庫(kù)(Framework Class Library)

FCL提供了大粒度的編程框架,它是針對(duì)不同應(yīng)用設(shè)計(jì)的框架 ,F(xiàn)CL大部分實(shí)現(xiàn)都引用了BCL,例如我們常說(shuō)的開(kāi)發(fā)框架:asp.net、MVC、WCF和WPF等等,提供了針對(duì)不同層面的編程框架 。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 洛隆县| 长沙市| 清河县| 昆山市| 来安县| 色达县| 铁岭市| 贡觉县| 元氏县| 马公市| 会东县| 瑞安市| 青田县| 白银市| 公安县| 古田县| 原阳县| 化州市| 临邑县| 马公市| 方城县| 靖边县| 田阳县| 台州市| 东海县| 霍邱县| 沧州市| 连云港市| 两当县| 海晏县| 大宁县| 宣武区| 离岛区| 石屏县| 大竹县| 麻城市| 塔河县| 特克斯县| 惠来县| 清徐县| 长沙市|