[C#] CLI、CLR、CTS 和 CLS
.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。