.NET 中的通用語言運行時


.NET 應用程序如何編譯和運行?

為了確切地了解DotNet應用程序的編譯和運行,請查看下圖。

首先,開發人員必須使用任何支持DotNet的編程語言(如 C#、VB、J#等)編寫代碼。然后,相應的語言編譯器將程序編譯為稱為中間語言 (IL) 代碼。
例如,如果編程語言是 C#,則編譯器為 csc,如果編程語言是 VB,則編譯器將是 vbc。此中間語言 (IL) 代碼是半編譯的代碼,即部分編譯的代碼,不能由操作系統直接執行。
因此,當您想要在計算機上執行此 IL 代碼時,DotNet框架提供一些稱為CLR或公共語言運行時的東西,它負責執行IL代碼。

CLR采用IL(中級語言)代碼,並賦予名為JIT編譯器。JIT 編譯器采用IL代碼並讀取IL代碼的每一行,並將其轉換為計算機特定的指令(即二進制格式),這些指令可由基礎操作系統執行。

中級語言(IL)代碼

IL 代碼是半編譯或部分編譯或獨立於 CPU 的部分編譯代碼。

為什么部分編譯代碼或為什么不完全編譯代碼?

作為開發人員,您可能會思考為什么部分編譯的代碼,或者為什么沒有完全編譯的代碼。原因很簡單。我們不知道在什么樣的環境中運行 .NET 代碼將運行 (例如, Windows XP, Windows 7, Windows 10, Windows 服務器等)。
換句話說,我們不知道什么操作系統將運行我們的應用程序;我們亦不知道CPU配置、機器配置、安全配置等。因此,IL 代碼是部分編譯的,在運行時,此 IL 代碼會編譯為使用環境屬性(如操作系統、CPU、計算機配置等)的特定於計算機的說明。

通用語言運行時

CLR 是 .NET Framework 的核心,它包含以下組件。

1.安全管理器
2.JIT 編譯器
3.內存管理器
4.垃圾收集器
5.異常管理器
6.通用語言規范 (CLS)Common Language System
7.通用類型系統 (CTS)Common Type System

接下來詳細討論每個組件的哪些功能。

安全管理器

基本上有兩個組件來管理安全性。它們如下所示:
1.CAS(代碼訪問安全性)
2.CV(代碼驗證)
這兩個組件基本上用於檢查當前用戶的權限,即允許用戶訪問程序集。CLR 還了解此代碼具有哪些權利或權限,以及操作系統是否安全。因此,基本上這些類型的檢查由安全管理器維護。

JIT 編譯器

JIT 編譯器負責將 MSIL 代碼轉換為由計算機執行的本機代碼。本機代碼是系統硬件直接可以理解的。JIT 在執行前編譯代碼,然后將此轉換保存在內存中。

內存管理器

內存管理器組件為應用程序要使用的變量和對象分配必要的內存。

垃圾收集器

當DotNet應用程序運行時,將創建大量對象。在給定的時間點,我們可能不需要這些對象。因此,垃圾回收器只不過是一個小例程,或者你可以說它是一個后台進程線程,它運行並嘗試識別應用程序當前未使用的對象,並取消分配這些對象的內存。

異常管理器

每當在運行時發生異常時,此組件都會重定向處理器以執行 catch 或最終阻止。

通用類型系統(CTS)

.NET 框架支持許多編程語言,如 C#、VB.NET、J# 等。每個編程語言都有自己的數據類型。一種編程語言無法理解其他編程語言數據類型。但是,在某些情況下,您希望用一種語言編寫代碼,以其他語言調用。為了確保這些語言之間的順暢通信,最重要的是它們應該有一個通用類型系統 (CTS),以確保用兩種不同語言定義的類型編譯為公共數據類型。
CLR 將執行所有編程語言的數據類型;這是可能的,因為CLR將包含它自己的數據類型,這是所有編程語言通用的。
在編譯時,所有特定於語言的數據類型都轉換為 CLR 的數據類型。此數據類型 CLR 是 .NET 的所有編程語言通用的,稱為通用類型系統 (CTS)。

CLS(通用語言規范)

CLS 是 CLR 的一部分。.NET 支持許多編程語言,並且每個編程語言都有自己的語法規則來編寫代碼,稱為語言規范,即每個編程語言都有自己的語言規范。

一種編程語言無法理解其他編程語言語法規則(語言規范)。但 CLR 將執行所有編程語言代碼。這是可能的,因為CLR無法理解任何編程語言規范,而CLR有其MSIL自己的語言規范(語法規則)。

每個語言編譯器在編譯時都應遵循 CLR 的此語言規范,並生成 MSIL;CLR 的 JIT 編譯器將從 MSIL 生成本機代碼。此 CLR 的語言規范對於 .NET 的所有編程語言代碼執行都很常見,稱為 CLS。


免責聲明!

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



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