[C#] CLI、CLR、CTS 和 CLS

MilenaChen
4 min readJun 28, 2023

--

.NET 的第一課,寫一篇來幫自己複習這些 C 開頭的小東西,還有他們彼此之間糾纏的關係。

CLI (Common Language Infrastructure) — 公共語言基礎結構

# Wiki 的說法:

一個開放的技術規範,定義了構成 .NET Framework 基礎結構的可執行碼以及代碼的執行時環境的規範,一個語言無關的跨體系結構的執行環境,使得開發者可以用規範內定義的各種高階語言來開發軟體,並且無需修正即可將軟體執行在不同的電腦架構上。

# 書上的說法:

CLI 是微軟提出的一份語言和資料格式規格,CLR 是目前唯一一個 CLI 的實現版本。

# 不負責任翻譯:

  • 微軟提出的一種規格,開放,與語言無關。
  • 開發者可以用定義內的各種語言來開發並執行軟體。
  • 會把程式先第一次編譯成 CIL(公共中間語言),執行時再第二次被編譯成機器碼。

CLR (Common Language Runtime) — 公共語言執行庫

# Wiki 的說法:

是微軟為他們的 .NET 的虛擬機器所選用的名稱。它是微軟對通用語言架構(CLI)的實作版本,它定義了一個程式碼執行的環境。CLR 執行一種稱為通用中間語言的位元組碼,這個是微軟的通用中間語言實作版本。

# 書上的說法:

CLR 是一個包含 .NET 程式的引擎,以及一堆符合 CLI 的類別庫集合。CLR 是一份規範的實現,幾乎所有我們開發的 .NET 程式,都基於 CLR 的類別庫來實現。並且在 CLR 提供的執行引擎上執行。所謂 .NET Framework,指的就是 CLR。

# 不負責任翻譯:

  • 微軟實現 CLI 的一種方式。
  • 包含了可以運行 .NET 程式的引擎,還有 .NET 程式用到的類別庫。
  • aka .NET Framework。(有好懂一些嗎?)

CTS (Common Type System) — 公共類型系統

# Wiki 的說法:

定義了執行期引擎如何使用程式中的資料型別,以及如何組態資料在記憶體中的一種標準,依照此種標準所撰寫的程式語言,都可以在同一個執行期引擎中使用,因此它是跨語言支援的重要部份,亦即符合 CTS 規範的程式語言所撰寫出的程式,都可以在 CLR 中使用。

CTS 與 CLI 規格都是由微軟所發展,目前已標準化為 ECMA 335 標準:「Common Language Infrastructure (CLI) Partitions I to VI.」,並且由 Microsoft 在 .NET Framework 中完全的實作。

# 書上的說法:

CTS 包含在 CLI 規範中,定義了一個可以在 CLR 上執行的類型規範。

# 不負責任翻譯:

  • 包含在 CLI 中。
  • .NET 語言(C#、VB.NET)符合 CTS 規範。
  • 不完全符合 CTS 規範的語言(例如 C++)也可以在 CLR 上執行,編譯時,不符合 CTS 規範的程式會被直接編譯成機器碼。

CLS (Common Language Specification) — 公共語言規範

# Wiki 的說法:

是一個開放的技術規範。它是由微軟聯合惠普以及英特爾於 2000 年向 ECMA 倡議的。通用語言基礎架構定義了構成 .NET Framework 基礎結構的可執行碼以及代碼的執行時環境的規範,它定義了一個語言無關的跨體系結構的執行環境,這使得開發者可以用規範內定義的各種高階語言來開發軟體,並且無需修正即可將軟體執行在不同的電腦架構上。國際標準 CLI 定義在 ISO/IEC 23271,最新版本在 2012 年修定。

# 書上的說法:

CLS 是 CTS 的一個子集合,定義了所有 .NET 程式需要符合的最小規範集合。

# 不負責任翻譯:

  • CLS 是 CTS 的一個子集合。
  • 在 CLR 上執行的程式需符合的最小規範集合。
  • C#、VB.NET、C++ 都可以在 CLR 上執行,但 C++ 也需符合 CLS。

--

--

MilenaChen

抓周抓到筆的工程師。小時候的夢想是成為太空人,長大後的夢想是成為一名不器的君子。