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

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

CLR這些年有啥變化嗎?

2019-11-14 15:55:05
字體:
供稿:網(wǎng)友

引言

  首先想給初學(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)定性。

 CLR是什么

通用語言運(yùn)行時(shí)(CommonLanguageRuntiome,CLR)最早被稱為下一代Windows服務(wù)運(yùn)行時(shí)(NGWS Runtime).它是直接建立在操作系統(tǒng)上的一個(gè)虛擬環(huán)境,主要的任務(wù)是管理代碼的運(yùn)行。

 CLR在.NetFramework中的位置

framework_diagram

.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、phpPRolog、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內(nèi)部結(jié)構(gòu)

CLR

  從上圖可以看到CLR提供的功能,如類型安全(Type Checker)、垃圾回收(Garbage Collector)、異常處理(Exception Manager)、向下兼容(COM Marshaler)等,具體的說,.NET上的CLR為開發(fā)者提供如下的服務(wù):

  • 平臺(tái)無關(guān):CLR實(shí)際上是提供了一項(xiàng)使用了虛擬機(jī)技術(shù)的產(chǎn)品,他在操作系統(tǒng)之上,并不要求程序的運(yùn)行平臺(tái)是 Windows系統(tǒng),只要是能夠支持它的運(yùn)行庫(kù)的系統(tǒng),都可以在上面運(yùn)行.NET應(yīng)用。所以,一個(gè)完全由托管代碼組成的應(yīng)用程序,只要編譯一次,就可以在任何支持.NET的平臺(tái)上運(yùn)行.(從Mono的出現(xiàn)變得更加真實(shí)啦,不用再羨慕JAVA啦)
  • 跨語言集成:CLR語序開發(fā)這以任何語言進(jìn)行開發(fā),用這些語言開發(fā)的代碼,可以在CLR環(huán)境下緊密無縫的進(jìn)行交叉調(diào)用,例如,可以用VB聲明一個(gè)基類對(duì)象,然后在C#代碼中直接創(chuàng)建次基類的派生類。
  • 自動(dòng)內(nèi)存管理:CLR提供了拉架收集機(jī)制,可以自動(dòng)管理內(nèi)存。當(dāng)對(duì)象或變量的生命周期結(jié)速后,CLR會(huì)自動(dòng)釋放他們所占用的內(nèi)存.
  • 跨語言異常處理
  • 版本控制(避免了DLL災(zāi)難)
  • .NET安全
  • 簡(jiǎn)單的組件互操作性。
  • 自描述組件:自描述組件是指將所有數(shù)據(jù)和代碼都放在一個(gè)文件中的執(zhí)行文件。自描述組件可以大大簡(jiǎn)化系統(tǒng)的開發(fā)和配置,并且改進(jìn)系統(tǒng)的可靠性。

 CLR 執(zhí)行示意圖

Slide24

  CLR 在整個(gè).Net Framework 程序執(zhí)行過程的模型,C#、VB.Net,C++.Net 代碼通過編譯器生成了MSIL(托管代碼),然后CLR用JIT翻譯成native code ,最后就可以直接執(zhí)行啦。

 CLR 版本發(fā)展史

DotNeRevisionHistory

  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 Framework 4.5 是.NetFramework 4.0的代替者
  • .NET Framework 4.5.1 4.5.2, and 4.6 RC 是.NetFramework 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

  這段話的意思是

  • .NET Framework versions 2.0, 3.0, and 3.5 每個(gè)版本都是在前一個(gè)版本基礎(chǔ)上增量開發(fā)的
  • .NET Framework versions 2.0, 3.0, and 3.5 不同版本的程序不能在同一機(jī)器上同時(shí)運(yùn)行在不同CLR上。(在安裝 3.5 版后,你將無需安裝 2.0 和 3.0 版本,2.0、3.0 和 3.5 生成的應(yīng)用程序均可在 3.5 版上運(yùn)行)
  • 從 .NET Framework 4 開始,在單個(gè)進(jìn)程中可使用進(jìn)程內(nèi)并行運(yùn)行在多個(gè)版本的CLR 。(即4.0的dll引用了2.0的dll是,4.0的代碼在CLR4.0上運(yùn)行而2.0的代碼運(yùn)行在CLR2.0上)
  • 此外,如果你的應(yīng)用程序使用的是 2.0、3.0 或 3.5 版,你的用戶可能需要先在(Windows7) Windows 8 或 Windows 8.1計(jì)算機(jī)上啟用 .NET Framework 3.5,然后才能運(yùn)行應(yīng)用程序。

  順便看下 各個(gè).Net Framework 新功能:

900px-DotNet.svg

 CLR最新發(fā)展

6114.image_thumb_24EA6864

  未來.NEtFrameWork 會(huì)有新的兄弟進(jìn)來一起構(gòu)建.Net 跨平臺(tái)和云架構(gòu)的夢(mèng)想。

7380.image_thumb_05C4214D

  上圖中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)行。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 高雄市| 正宁县| 邓州市| 新兴县| 惠安县| 安宁市| 镇巴县| 固阳县| 奉节县| 安平县| 如皋市| 新兴县| 平舆县| 板桥市| 高陵县| 托克逊县| 临安市| 泰安市| 汉源县| 台江县| 新干县| 吉林市| 双柏县| 宁津县| 永定县| 砚山县| 余姚市| 兰西县| 武冈市| 丹寨县| 突泉县| 南通市| 和顺县| 维西| 琼结县| 九龙县| 霸州市| 舞钢市| 彭山县| 成安县| 深泽县|