公共語言運行庫

公共語言運行庫

公共語言運行庫 (common language runtime,CLR) 是託管代碼執行核心中的引擎。運行庫為託管代碼提供各種服務,如跨語言集成、代碼訪問安全性、對象生存期管理、調試和分析支持。它是整個.NET框架的核心,它為.NET應用程式提供了一個託管的代碼執行環境。它實際上是駐留在記憶體里的一段代理代碼,負責應用程式在整個執行期間的代碼管理工作。

基本介紹

  • 中文名:公共語言運行庫
  • 外文名:common language runtime,CLR
  • 地位:它是整個.NET框架的核心
  • 工作方式:通過編譯器和工具公開
  • 優勢:使不同語言編寫的對象可互相通信
  • 本質:駐留在記憶體里的一段代理代碼
定義,組成元素及其功能,工作方式,功能,執行模型,優點,

定義

公共語言運行庫(Common Language Runtime,CLR)是整個.NET框架的核心,它為.NET應用程式提供了一個託管的代碼執行環境。它實際上是駐留在記憶體里的一段代理代碼,負責應用程式在整個執行期間的代碼管理工作,比較典型的有:記憶體管理、執行緒管理、安全管理、遠程管理、即使編譯、代碼強制安全類檢查等,這些都可以成為.NET框架的生命線。

組成元素及其功能

(1)類載入器:管理元數據,載入和在記憶體中布局類;
(2)Micorsoft 中間語言(MSIL)到本地代碼編譯器:通過即時編譯把Micorsoft 中間語言轉換為本地代碼;
(3)代碼管理器:管理和執行代碼;
(4)垃圾回收器:為NET.Framework下的所有對象提供自動生命期管理,支持多處理器,可擴展;
(5)安全引擎:提供基於證據的安全,基於用戶身份和代碼來源;
(6)調試器:使開發者能夠調試應用程式和根據代碼執行;
(7)類型檢查器:不允許不安全的類型轉換和未初始化變數MSIL可被校驗以保證類型安全。
(8)異常管理器:提供和Windows結構化異常處理集成的異常處理機制;
(9)執行緒支持:提供多執行緒編程支持;
(10)COM封送拆收器:提供和COM組件之間的封送轉換;
(11).NET Framwork類庫支持:通過和運行時集成代碼來支持.NET Framwork類庫。
實際上,CLR代理了一部分傳統作業系統的管理功能,通常將在CLR的控制下運行的代碼稱為託管代碼,否則稱為非託管代碼。

工作方式

公共語言運行庫的功能通過編譯器和工具公開,可以編寫利用此託管執行環境的代碼。使用基於公共語言運行庫的語言編譯器開發的代碼稱為託管代碼;託管代碼具有許多優點,例如:跨語言集成、跨語言異常處理、增強的安全性、版本控制和部署支持、簡化的組件互動模型、調試和分析服務等。
若要使公共語言運行庫能夠向託管代碼提供服務,語言編譯器必須生成一些元數據來描述代碼中的類型、成員和引用。元數據與代碼一起存儲;每個可載入的公共語言運行庫可移植執行 (PE) 檔案都包含元數據。公共語言運行庫使用元數據來完成以下任務:查找和載入類,在記憶體中安排實例,解析方法調用,生成本機代碼,強制安全性,以及設定運行時上下文邊界。
公共語言運行庫自動處理對象布局並管理對象引用,當不再使用對象時釋放它們。按這種方式實現生存期管理的對象稱為託管數據。垃圾回收消除了記憶體泄漏以及其他一些常見的編程錯誤。如果您編寫的代碼是託管代碼,則可以在 .NET Framework 應用程式中使用託管數據、非託管數據或者同時使用這兩種數據。由於語言編譯器會提供自己的類型(如基元類型),因此您可能並不總是知道(或需要知道)這些數據是否是託管的。
有了公共語言運行庫,就可以很容易地設計出對象能夠跨語言互動的組件和應用程式。也就是說,用不同語言編寫的對象可以互相通信,並且它們的行為可以緊密集成。例如,可以定義一個類,然後使用不同的語言從原始類派生出另一個類或調用原始類的方法。還可以將一個類的實例傳遞到用不同的語言編寫的另一個類的方法。這種跨語言集成之所以成為可能,是因為基於公共語言運行庫的語言編譯器和工具使用由公共語言運行庫定義的通用類型系統,而且它們遵循公共語言運行庫關於定義新類型以及創建、使用、保持和綁定到類型的規則。
所有託管組件都帶有生成它們所基於的組件和資源的信息,這些信息構成了元數據的一部分。公共語言運行庫使用這些信息確保組件或應用程式具有它需要的所有內容的指定版本,這樣就使代碼不太可能由於某些未滿足的依賴項而發生中斷。註冊信息和狀態數據不再保存在註冊表中(因為在註冊表中建立和維護這些信息很困難)。取而代之的是,有關您定義的類型(及其依賴項)的信息作為元數據與代碼存儲在一起,這樣大大降低了組件複製和移除任務的複雜性。
語言編譯器和工具公開公共語言運行庫的功能的方式對於開發人員來說不僅很有用,而且很直觀。這意味著,公共語言運行庫的某些功能可能在一個環境中比在另一個環境中更突出。您對公共語言運行庫的體驗取決於所使用的語言編譯器或工具。例如,如果您是一位 Visual Basic 開發人員,您可能會注意到:有了公共語言運行庫,Visual Basic 語言的面向對象的功能比以前多了。

功能

跨語言集成,特別是跨語言繼承。
垃圾回收,它管理對象生存期,使引用計數變得不再必要。
自我描述的對象,它使得使用接口定義語言 (IDL) 不再是必要的。
編譯一次即可在任何支持公共語言運行庫的 CPU 和作業系統上運行的能力。
還可以使用 C# 語言編寫託管代碼。C# 語言提供了下列優點:
完全面向對象的設計。
非常強的類型安全
很好地融合了 Visual Basic 的簡明性和 C++ 的強大功能。
垃圾回收。
類似於 C 和 C++ 的語法和關鍵字。
使用委託取代函式指針,從而增強了類型安全和安全性。函式指針通過 unsafe C# 關鍵字和 C#編譯器(Csc.exe) 的 /unsafe 選項可用於非託管代碼和數據。

執行模型

1、將原始碼(vb、cs)編譯成託管代模組。託管代碼塊由中間語言元數據組成。
2、將託管代碼合併成程式集
3、載入公共語言運行庫。
4、執行程式集的代碼。
5、生成本地代碼

優點

(1)性能得到了改進;
(2)能夠輕鬆使用用其他語言開發的組件;
(3)類庫提供的可擴展類型。
(4)新的語言功能,如面向對象的編程的繼承、接口和重載;允許創建多執行緒的可縮放應用程式的顯式自由執行緒處理支持;結構化異常處理自定義屬性支持。
如果使用 Microsoft® Visual C++® .NET,則可以使用 C++ 託管擴展來編寫託管代碼。C++ 託管擴展提供了託管執行環境以及對您所熟悉的強大功能和富於表現力的數據類型的訪問等優點。

相關詞條

熱門詞條

聯絡我們