搞懂 C++/CLI CLR 等相關名詞定義
在公司需要用 C++ 來做 UI 介面,其中遇到一些關鍵字,想說順便了解一下好了,原本這是要寫在上一篇的內容,只是我手殘沒存到,只好重新寫一篇記下 CLI CLR 等不專業名詞定義XD,由於是寫給自己看,如有錯誤請不吝指導。
C++/CLI
這只是披著 C++ 的皮來連接 .NET Framework API,其實用這個開發程式資源少的可憐,尤其是要開發 UI 更是少之又少,下方參考第一個連結,是我覺得為數不多用 C++/CLI 開發 UI 的教學好網站,因為官方自己也都說直接去用 C# 來開發…
圖內容取自微軟官方文檔。
回到正題XD,簡單講 C++/CLI 就是用來規範出連接 .NET Framework 的標準,以使用相關 .NET 類別 (class) 及資料 類型 (type)。
CLI、CLR、CIL
通用語言基礎架構 (Common Language Infrastructure,CLI)
制定一系列程式執行規範、標準。其詳細規範涵蓋以下內容
- 通用型別系統(Common Type System, CTS)
- 元資料系統(Metadata)
- 通用語言規範(Common Language Specification, CLS)
- 虛擬執行系統(Virtual Execution System, VES)
- 通用中間語言(Common Intermediate Language, CIL)
- 框架(Framework)
通用中間語言 (Common Intermediate Language,CIL)
將 C#、VB 等 .NET 框架程式語言編譯成 CLR 要執行的低階語言。
通用語言運行庫 (Common Language Runtime,CLR)
用來實現 CLI 架構,我自己理解將不同平台程式處理成機器碼。主要功能如下:
- 基礎類別庫支援 Base Class Library Support
- 記憶體管理 Memory Management
- 執行緒管理 Thread Management
- 垃圾回收 Garbage Collection
- 安全性 Security
- 類型檢查 Type Checker
- 異常管理 Exception Manager
- 除錯管理 Debug Engine
- 中間碼(MSIL)到機器碼(Native)編譯
- 類別裝載 Class Loader
CLI 執行機制
.NET 框架架構
除了藍色區塊,其他都是基於 CLI 制定。
圖取自[Adapted] How to understand .NET Framework (CLI, CLS, CTS, CLR, FCL, BCL) – Programmer Sought
框架類別函式庫 (Frameworl Class Library,FCL)
用於 .NET 的類別函式庫,主要可區分為兩部分,一部分是基礎類別,另一部分稱為其他類別。
基礎類別 (Base Class Library,BCL),顧名思義,就是並易一些基本功能,如:IO、String、Net …等。
其他類別,基本上是基於 BCL 進行功能擴展。如:ADO.NET、ASP.NET、Windows Forms …等,而這些類別讓我們更家容易編寫自己的程式。
Common Language Specification (CLS)、Common Type System (CTS)
通用語言規範 (Common Language Specification,CLS) 與通用類型系統 (Common Type System,CTS),是屬於 CLI 部分的內容,主要目的是確保不同平台的程式語言可以相容於 .NET 框架。例如:C# int 及 VB integer 映射到System.Int32。
結語
關於 .NET 還是有許多東西不明白,本來是因為工作遇到 C++/CLI 的應用程式介面開發,才開始去查 .NET 的相關知識,沒想到迸出一堆新名詞,雖說我其實也不太需要用 C# 寫程式,所以不懂 .NET 應該也沒差XD,而且目前工作上還是以 C 語言及 Python 為主,但 .NET 框架算是最常被使用的技術,許多公司也是以 C# 來開發應用程式,所以了解一下應該不吃虧吧!!