什么是公共語言運行時(CLR)


  編譯:編好程序選擇生成時,從 源碼編譯到中間語言(IL),這個中間語言是.NET自已的一種語言格式,雖然它也是 EXE,但它並非直接可以執行的二進制代碼,而是一種比源碼更為緊湊的程序代碼。
      解釋:軟件執行的時候,系統會自動加載 .NET Framework 對中間語言形式的 EXE 進行解釋運行。

      它的過程分兩步,首先是源代碼到中間代碼的“編譯”,這一步嚴格說不是編譯,只是將源代碼翻譯成了中間代碼,但是形式上像是傳統的編譯-生成了可執行文 件。但是這個可執行文件並不是真正的可執行文件,需要.NET框架在你運行它的時候再及時翻譯為CPU機指令,它的改進在於這個及時編譯比傳統的解釋方式性能更好,因為程序中的指令不是每次運行都解釋,而是在 程序首次運行時一次性編譯(解釋),只要程序沒有退出,解釋的過程就不再發生。

當然,上面這些都是比較傳統的程序代碼執行方式,從Java語言開始,一種新的程序語言執行方式產生了,這就是“中間碼+虛擬機”執行機制。這種執 行方式,程序語言源代碼需要被編譯成一種特殊的中間碼,這種中間碼是不能直接執行的,它需要一個叫“虛擬機”的裝置來管理和執行,可以是解釋執行也可以是 編譯執行。因為“虛擬機”可以參與和管理程序代碼的執行,因此解決了很多傳統編譯語言一些致命的缺點,如垃圾內存回收、安全性檢查等。也是因為如 此,.NET框架也采用了此種語言執行方式,這里管理和執行中間碼“虛擬機”在.NET框架中就是公共語言運行時(CLR),它負責管理和執行由.NET 編譯器編譯產生的中間語言代碼。

公共語言運行時的另外一個作用是可以輕松地實現跨平台。當然,條件是要在操作系統 上安裝.NET Framework,這個跨語言的原理是和Java一樣的,安裝了語言運行時的操作系統就可以識別和運行中間語言代碼。值得一提的是,雖然微軟自己並不提 倡跨平台(跨平台會影響Windows操作系統的市場壟斷),但現在已經出現了在Linux操作系統中運行和編輯.NET程序的平台,就是Mono平台。 該平台包括有C#編譯器、公共語言運行時以及相關的一套.NET類庫。Mono平台可使開發者開發的.NET應用程序不僅能在Windows上運行,也能 在任何支持Mono的操作系統上運行,包括現有的Linux和UNIX操作系統。

關於公共語言運行時還要注意,. NET里面的CLR和Java里面的虛擬機JVM是不同的,我們說Java的虛擬機一般是解釋執行的,而CLR是編譯執行,是在應用程序第一次被調用時一 次性編譯成機器碼再執行,這樣做的好處一個是盡可能的避免了解釋執行所帶來的效率降低的問題;另外可以做到充分利用本機資源,CLR可以針對本地的資源進 行優化編譯,這個特性人們考慮可能在將來會使.NET代碼的執行效率甚至超過C++,因為C++編譯器是通用的,並沒有照顧到不同計算機本地資源的不同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM