CLR是什麼呢?上次講到運行在.NET Framework中的代碼叫作managed code,反之叫作unmanaged code。相比unmanaged code,managed code 有不少好處,好比能夠用多種編程語言編寫、提升安全性、易於版本控制和程序發佈等等。編程
這些都是由CLR提供的。但也有一些不利點,最容易想到的就是代碼運行速度問題了。windows
要爲managed code提供以上功能,CLR是什麼呢?必須知道代碼中的數據類型、類和與她有關連的assembly的定義。這些信息叫作metadata,而metadata就包含在代碼中的某個部分(編譯後)。CLR利用這個metadata加載代碼段、管理內存、執行方法調用等操做。安全
.NET出來之前,在不一樣編程語言之間共享原代碼,簡直是不可能的事情。由於每一個編程語言定義的數據類型不一樣,並且語法也不一樣。微軟大師們想到了把數據類型統一的好辦法。這個技術叫CTS(common type system)。如今作項目開發就比較簡單了(用不一樣語言),好比一個項目組裏有會用VB的,會用C++的。編程語言
可能之前的方法是把兩我的之間互相調用的功能寫成DLL或COM。但如今不用這麼麻煩了,你直接就能夠使用其餘語言編寫的代碼了。具體一點,用VB.NET能夠繼承C++.NET寫的類,反過來也是能夠的。ide
咱們安裝軟件的時候常碰到這樣的提示 - 系統中的組件比要安裝的組件的新,你要替換仍是保留?是否是很討厭?!如今開始你就用.NET吧,她不會由於這個「小」問題而打擾你了。工具
由於每一個代碼都包含與她相關的metadata,CLR會根據這個信息來管理代碼的不一樣版本。並且由於不用把代碼的信息註冊到註冊表,因此能夠用X-COPY的方式安裝代碼(就是簡單的拷貝粘貼了)。開發工具
是用VB作好呢?仍是用C++作好呢?這些問題是咱們作項目的時候常要考慮的問題。但在.NET用什麼編程語言已經變得不重要了(但仍是有必定的差異,在特定項目中),由於CLR提供CTS(還有base class library),並且都運行在CLR上面。ui
在.NET中VB,C++等語言都有了至關多的提升,並且有了新的語言C#。C#已經申請了標準並且經過,可想而知她的POWE了。你們知道borland也發佈了相關的開發工具C# builder。操作系統
關於CLR是什麼作個小結版本控制
一、.NET代碼都包含與本身相關的信息叫作metadata。
二、 CLR提供CTS(CLS也有功勞),因此能夠在不一樣編程語言之間共享原代碼。
三、 用metadata管理代碼信息(不是利用註冊表),因此代碼易於安裝。
四、 使用統一的數據類型和類庫,因此編程語言的選擇變得不重要了,並且易於團隊開發。
代碼在CLR中的運行過程
一、選擇編譯器
首先CLR選擇編譯器,由於CLR中能夠運行不一樣語言開發出來的代碼。
二、把代碼編譯成MSIL
CLR利用選擇的編譯器生成MSIL(Microsoft intermediate language)和metadata把她們加載到PE(portable executable file)。
MSIL:解釋語言,包含代碼信息,讓JIT易於編譯成機器語言。與操做系統和編程語言無關。
PE:可執行文件格式,windows就是DLL或EXE了。
三、用JIT編譯器把MSIL編譯成機器語言
有兩種方式一種是隻編譯當前執行的代碼段,另外一種是把整個代碼一次性編譯。JIT會檢測代碼的安全性。
四、 執行代碼
代碼首次調用就會編譯成機器代碼,再次調用的時候就再也不從新編譯了。
相關工具
-MSIL生成器 - MSIL Assembler(ilasm.exe)
-MSIL反編譯器 - MSIL Assembler(ildasm.exe)