什麼是.Net, IL, CLI, BCL, FCL, CTS, CLS, CLR, JIT

 

什麼是.NET?html

 

起源:比爾蓋茨在2000年的Professional Developers Conference介紹了一個嶄新的平臺叫做Next Generation Windows Service,也就是後來的.NET。編程


軟件層:.NET能夠被看做是介於操做系統和編程語言之間的軟件層,它能夠支持多種編程語言,包括C#,VB.NET,C++,F#,等等。安全


用來產生託管代碼的框架、平臺:傳統的編譯方式是"源代碼→編譯→可執行文件",在.NET中編譯方式是"源代碼→編譯→程序集→可執行文件"。編譯後的程序集包含IL代碼和元數據,在運行時再轉換成機器代碼。框架


按開發到執行階段來講:開發階段.NET提供了龐大的類庫,在程序執行階段,.NET提供了一個CLR運行時環境幫助咱們實時編譯程序、進行安全檢查、執行垃圾回收,管理內存等。
編程語言

 

規範:.NET包含了衆多的規範,好比CIL,BCL, FCL, CTS, CLS,等等。spa


什麼是IL?操作系統

 

IL,Intermediage Language,中間語言,並非CPU能夠直接執行的本地機器語言,在轉換成計算機能夠識別的指令以前,還要進行一個被稱爲"Just in time"的二次編譯過程。在.NET框架下,任何語言,好比C++,VB.NET,C#,等等,在通過各自的編譯器編譯以後,都會被轉換成中間語言。IL還有另外的2種叫法:CIL,Common Intermediate Language;MSIL, Microsoft Intermediate Language。htm

 

查看IL代碼,參考這裏:http://www.cnblogs.com/darrenji/p/3967669.htmlblog

 

什麼是CLI?繼承

 

CLI,Common Language Infrastructure, 公用語言基礎, .NET的各類規範都遵循了這個標準。

 

什麼是BCL?

 

BCL, Basic Class Library, .NE爲咱們提供的基類庫。

 

建立一個控制檯項目。

 

把鼠標停留在Console上,並按F12。

 

發現Console是System的成員,點擊System。

 

發現System是mscorlib的成員,點擊mscorlib。

 

發現mscorlib是一個程序集,位於C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll

 

也就是mscorlib包含了.NET的基類庫。

 

string類型是否屬於基類庫呢?

 

把鼠標停留在string關鍵字上,並按F12。

 

發現string其實是System.String類型,原來.NET爲咱們把關鍵字string和CLI標準System.String做了映射。

 

依此類推, btye映射了System.Byte, short映射了System.Int16, 等等。

 

像string, byte, short,等等,這些都是基元類型。因此,凡是把語言本省的關鍵字與CLI的類型映射起來的,都叫基元類型。

 

什麼是FCL?

 

FCL, Framework Class Library, 框架類庫,提供的類庫更多,BCL是FCL的子集。好比,在ASP.NET MVC下提供了System.Web.MVC。

 

什麼是CTS?

 

CTS, Common Type System, 公共類型系統。CTS規定了在編程語言中能夠定義的方面,包括:類、結構、委託,類中的方法、字段、屬性、事件等,還定義了一些約束,好比全部類型都隱式繼承自System.Object類型。

 

什麼是CLS?

 

CLS, Common Language Specification, 公共語言規範,必須徹底符合CTS的標準,是CTS的子集。好比C#編譯生成的程序集有不少類,VB編譯生成的程序集也有不少類,如今VB編譯須要引用C#程序集的某個類,怎麼辦呢?

 

咱們須要讓C#程序集中,須要被引用的這個類符合CLS規範,.NET爲咱們準備了CLSCompliant特性。

 

[assembly:CLSCompliant(true)]
public class SomeClass
{    
}

 

什麼是CLR?

 

CLR, Common Language Runtime, 公用語言運行時。IL代碼須要經過CLR進行即時編譯才能轉換成機器代碼。大體過程是:

 

編程語言代碼編譯生成程序集。程序集中的PE/COFF頭包含了供Windows操做系統查看和使用的信息;CLR頭告訴操做系統這是一個.NET程序集;程序集清單描述了程序集自己的信息,好比程序集標識、程序集包含的資源、組成程序集的文件,等等;元數據描述了程序集包含的內容,好比包含的模塊、類型、類型成員、類型成員的可見性,等等。

 

CLR開始工做:管理應用程序域,加載和運行程序集, 安全檢查, 將IL代碼JIT編譯成機器代碼,異常處理, 垃圾回收,等等。

 

相關文章:


CLR如何加載程序集以及程序集版本策略   http://www.cnblogs.com/darrenji/p/4179916.html
查看是否安裝.NET Framework、.NET Framework的版本號、CLR版本號   http://www.cnblogs.com/darrenji/p/3977406.html 
CLR是如何被加載並工做的   http://www.cnblogs.com/darrenji/p/4159259.html

 

什麼是JIT?

 

JIT, just in time, 即時編譯。在CLR中,把IL轉換成機器代碼的工做交給了JIT編譯器。即時編譯只在方法第一次被調用時發生。

相關文章
相關標籤/搜索