首先想給初學(xué)者推薦下《CLR via C#》這本好書,做.Net開發(fā)的開發(fā)者應(yīng)該都讀一下。為避免廣告之嫌,所以這里只提供豆瓣書評(píng)的鏈接。
CLR 作為.Net 程序跨平臺(tái)運(yùn)行的載體,和java的JVM有著類似的功能(JAVA為跨平臺(tái)而生,實(shí)現(xiàn)這一目標(biāo)離不開JVM)。
隨著.NET Framework的日益發(fā)展CLR也有日新月異的變化。這些變化為開發(fā)帶來更多有用的特性,在提高開發(fā)效率的同時(shí)也提高了程序的性能和穩(wěn)定性。
通用語言運(yùn)行時(shí)(CommonLanguageRuntiome,CLR)最早被稱為下一代Windows服務(wù)運(yùn)行時(shí)(NGWS Runtime).它是直接建立在操作系統(tǒng)上的一個(gè)虛擬環(huán)境,主要的任務(wù)是管理代碼的運(yùn)行。
.NET平臺(tái)結(jié)構(gòu)圖
CLR現(xiàn)在支持幾十種現(xiàn)代的編程語言為它編寫代碼,然后以一種中間語言(Intermediate Langeoage,IL)代碼的形成被執(zhí)行。并且,CLR還提供了許多功能以簡(jiǎn)化代碼的開發(fā)和應(yīng)用配置,同時(shí)也改善了應(yīng)用程序的可靠性。如你所知,如果某種語言的編譯器是以運(yùn)行時(shí)為目標(biāo)的,那么利用該語言開發(fā)生成的代碼在.NET中被稱為托管代碼(MSIL),因?yàn)檫@樣的代碼是直接運(yùn)行在CLR上的,所以具有與平臺(tái)無關(guān)的特點(diǎn)。
目前有哪些語言支持CLR
微軟已經(jīng)為多種語言開發(fā)了基于CLR的編譯器,這些語言包括:C++/CLI、C#、Visual Basic、F#、Iron Python、 Iron Ruby和IL。
除此之外,其他的一些公司和大學(xué)等機(jī)構(gòu)也位一些語言開發(fā)了基于CLR的編譯器,例如Ada、APL、Caml、COBOL、Eiffel、Forth、Fortran、Haskell、Lexicon、LISP、LOGO、Lua、Mercury、ML、Mondrian、Oberon、Pascal、Perl、php、PRolog、RPG、Scheme、Smaltak、Tcl/Tk。
在.NET平臺(tái)結(jié)構(gòu)圖中,CLR的上面是.NET的基類庫(kù),這組基類庫(kù)包括從基本輸入輸出到數(shù)據(jù)訪問等各方面,提供了一個(gè)統(tǒng)一的面向?qū)ο蟮模瑢哟位模蓴U(kuò)展的編程接口。從.NET平臺(tái)結(jié)構(gòu)圖中也可以看到,基類庫(kù)可以被各種語言調(diào)用和擴(kuò)展,也就是說不管是 C#,VB.NET還是F#,VC++.NET,都可以自由的調(diào)用.NET的類庫(kù)。
從上圖可以看到CLR提供的功能,如類型安全(Type Checker)、垃圾回收(Garbage Collector)、異常處理(Exception Manager)、向下兼容(COM Marshaler)等,具體的說,.NET上的CLR為開發(fā)者提供如下的服務(wù):
CLR 在整個(gè).Net Framework 程序執(zhí)行過程的模型,C#、VB.Net,C++.Net 代碼通過編譯器生成了MSIL(托管代碼),然后CLR用JIT翻譯成native code ,最后就可以直接執(zhí)行啦。
C#版本 和.Net Framework 版本以及CLR依賴關(guān)系 和新特性添加列表,
The .NET Framework 4.5 is an in-place update that replaces the .NET Framework 4 on your computer, and similiarly, the .NET Framework 4.5.1 4.5.2, and 4.6 RC are in-place updates to the .NET Framework 4.5, which means that they use the same runtime version, but the assembly versions are updated and include new types and members. After you install one of these updates, your .NET Framework 4 or .NET Framework 4.5 apps should continue to run without requiring recompilation. However, the reverse is not true. We do not recommend running apps that target a later version of the .NET Framework on the .NET Framework 4.5.
上面的總體意思就是:
從.net 4 開始,如果您想把.NetFramework 4.0+ 到更新的更新版本的.NetFramework,只需重新指定目標(biāo).Net Framwork然后重新編譯代碼即可,反之不可行。
之所以可以這樣做是因?yàn)檫@幾個(gè).NetFramework版本的CLR都是4.0版本的。
The .NET Framework versions 2.0, 3.0, and 3.5 are built with the same version of the CLR (CLR 2.0). These versions represent successive layers of a single installation. Each version is built incrementally on top of the earlier versions. It is not possible to run versions 2.0, 3.0, and 3.5 side by side on a computer. When you install version 3.5, you get the 2.0 and 3.0 layers automatically, and apps that were built for versions 2.0, 3.0, and 3.5 can all run on version 3.5. However, the .NET Framework 4 ends this layering approach. Starting with the .NET Framework 4, you can use in-process side-by-side hosting to run multiple versions of the CLR in a single process. For more information, see Assemblies and Side-by-Side Execution.
In addition, if your app targets version 2.0, 3.0, or 3.5, your users may be required to enable the .NET Framework 3.5 on a Windows 8 or Windows 8.1 computer before they can run your app. For more information, see Installing the .NET Framework 3.5 on Windows 8 or 8.1
這段話的意思是
順便看下 各個(gè).Net Framework 新功能:
未來.NEtFrameWork 會(huì)有新的兄弟進(jìn)來一起構(gòu)建.Net 跨平臺(tái)和云架構(gòu)的夢(mèng)想。
上圖中Core CLR是asp .Net vNext很重要的核心之一,雖然官方?jīng)]說,但基本上就是一個(gè)精簡(jiǎn)版的CLR,拿掉了繪圖等功能,讓Server和Cloud程序更高效
至于MonoCLR,大家看名字就知道是為了更好的支持Mono這個(gè)開源的新秀的。
Update1:摘自MSDN的《使用 CoreCLR 編寫 Silverlight》
自 2005 年 10 月發(fā)行 CLR 的 2.0 版本后就開始了 CoreCLR 的設(shè)計(jì)。它的兩個(gè)主要設(shè)計(jì)目標(biāo)是大小和兼容性:從編程人員的角度來看,針對(duì) CLR 的編碼應(yīng)該始終相同,而從用戶的角度來看,下載必須非常小。由于 Silverlight 旨在提供一組不同于桌面 CLR 的方案,因此,我們可以進(jìn)行一些更改,以簡(jiǎn)化 CoreCLR 并允許我們縮減 Silverlight 的安裝大小。但是,堆棧底部的一致性至關(guān)重要。行為差異(即使這些行為差異都正確)表明堆棧上部有錯(cuò)誤。
為了確保兼容性,我們?cè)诙褩5撞康母鱾€(gè)組件中使用相同的代碼。執(zhí)行引擎和虛擬機(jī)都是相同的。其中包括類型系統(tǒng)和元數(shù)據(jù)、垃圾回收器 (GC)、JIT 編譯器、線程池以及運(yùn)行時(shí)引擎的其他核心部件。
但是,為了適應(yīng) Web 應(yīng)用程序方案,進(jìn)行了一些更改。例如,富 Internet 應(yīng)用程序通常簡(jiǎn)單且運(yùn)行時(shí)間短,JIT 編譯器主要側(cè)重于減少啟動(dòng)時(shí)間,而非執(zhí)行更復(fù)雜的優(yōu)化操作。同樣,服務(wù)器垃圾回收模式可以對(duì)使用相似分配模式的多個(gè)工作線程進(jìn)行優(yōu)化,而對(duì) Web 托管應(yīng)用程序則行不通。因此,Silverlight 只包含針對(duì)交互式應(yīng)用程序進(jìn)行優(yōu)化的標(biāo)準(zhǔn)工作站 GC。但是,在 Silverlight 應(yīng)用程序中使用 Microsoft 中間語言 (MSIL) 和元數(shù)據(jù)的方式與在針對(duì)桌面的托管應(yīng)用程序中的使用方式完全相同,而且應(yīng)用程序的行為在用戶的桌面上和在瀏覽器上一致。
事實(shí)上,Silverlight 并不打算取代桌面 CLR,這就引發(fā)了核心引擎中最大的變化:CoreCLR 將與桌面 CLR 進(jìn)程并行運(yùn)行。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注