.NET Core之為什么能跨平台?


.NET Core之為什么能跨平台?

    .NET Framework的幾個層次結構
        一、CLR公共語言運行時
        二、FCL框架類庫
        三、另一種方式
    非Windows下的.NET
        什么是CLI?
        CLI總結
    .NET Core 跨平台
        全新的CLR之CoreCLR
        全新的CLR之CoreFX
        總結

.NET Framework的幾個層次結構

.NET Framework基本上可以分為兩大層次:

    提供運行環境的CLR(Common Language Runtime)公共語言運行時。
    為開發人員提供給的API FCL(Framework Class Library)框架類庫。

如下圖所示:
在這里插入圖片描述
一、CLR公共語言運行時

CLR的作用是為程序的執行提供了一個托管的執行環境,他是.NET Framework的執行引擎,為托管程序的執行提供了內存分配、垃圾回收、安全控制、異常處理和多線程管理方面的服務。
CLR是.NET Framework的一個子集,但是兩者缺對立了不同的版本。微軟截至目前發布了4個版本的CLR:1.0、1.1、2.0、4.0;.NET Framework的1.0和1.1采用的是CLR的1.0和1.1,.NET Framework的2.0和3.x使用的CLR 2.0,.NET Framework 4.x均使用的CLR 4.0。
二、FCL框架類庫

FCL是一個為開發人員提供API的類庫,它提供的API類庫可以分為兩個層次:

    面向具體應用類型的API,主要有以下三種類型應用:
    ① 面向應用(比如ASP.NET、WPF和Windows Forms等)
    ② 面向服務(比如WCF、WF和Data Services等)
    ③ 面向數據(比如ADO.NET、Entity Framework和LinQ to SQL等)
    處於最底層的BCL(Basic Class Library)基礎類型類庫。
    BCL主要用於描述了一些基本的數據類型和數據結構(比如字符串、數字、日期/時間和集合等等)、提供些基礎的操作(比如IO、診斷、反射、文本編輯、安全控制、多線程管理等等)。

三、另一種方式

我們可以將FCL的面向應用或者服務類型(比如Windows Forms、WPF、ASP.NET和WCF等)的部分分成AppModel,那么.NET Framework的整體架構可以如下圖所示:
在這里插入圖片描述
非Windows下的.NET

.NET是通過Mono和Xamarin將其伸展到其他的平台(Linux、Mac、Andriod等)
什么是CLI?

.NET 跨平台其實建立在一個開放的標准或者規范當中,而這個規范就叫做CLI(Common Language Infrastucture)。CLI其實解決的就是:由不同的編程語言開發的.NET應用能夠無需任何更改就能運行在不同的系統環境之中。解決這個問題就涉及到了【編程語言的差異】和【運行時環境差異】,編程語言能夠相互兼容,運行時環境能夠得到統一,跨平台就能得到實現。

CLI(Common Language Infrastucture)分為【Common Language】和 【Infrastucture】
Common Language其實是一種通用語言,為的就是解決編程語言的兼容性問題。
Infrastucture其實是動態執行應用的引擎。
所以CLI就為可執行代碼和引擎提供了一個標准。

編程語言有解釋型和編譯型之分。編譯型則需要編譯器生成可執行代碼,Common Language其實是編譯型語言。想要真正實現跨平台,最終目的就是解決可執行代碼在不同平台的兼容性與可移植性,但是應用的兼容性和可移植性是編譯后結果決定的。如果能將不同的編程語言通過編譯器編譯成符合標准代碼,那么就能解決編程語言之間的差異。

按照CLI標准的規定,可執行代碼稱為CIL(Common Intermediate Language)的語言,是一種介於編程語言和機器語言之間的中間語言,也是一門OOP語言。

不同編程語言可以通過編譯器得到統一,而運行環境則可以通過虛擬機技術解決。虛擬機是CIL的運行容器,它能夠在CIL執行的時候動態的將他翻譯成與當前環境完全匹配的機器指令。而CIL就是一種虛擬機語言。
CLI總結

由此可見 .NET建立在CLI這一標准之上,所以天生就具備了“跨平台”的基因。
.NET Core 跨平台

要真正實現.NET 的跨平台,主要需要解決兩個問題:

    一是針對不同的平台設計相應的CLR運行時為中間語言CIL提供一個一致性的執行環境
    二是提供統一的BCL以徹底解決代碼復用的難題

對於真正跨平台的.NET Core來說,微軟不僅為它設計了針對不同平台被成為CoreCLR的運行時,同時還重新設計了一套被稱為CoreFX的BCL

NET Core目前支持的AppModel支持有兩種,一是.NET Core用於開發服務器Web應用和服務;二是UWP(Universal Windows Platform)用於開發能夠在各種客戶端設備上自適應的Windows 10應用。
全新的CLR之CoreCLR

這些模塊對應這一個單一的程序集,並最終由對應的NuGet包來分發。至於底層的虛擬機,微軟則為主流的操作系統和處理架構設計了針對性的運行時就是 CoreCLR
全新的CLR之CoreFX

CoreFX是經過完全重寫的BCL,除了自身就具有跨平台執行的能力之外,其提供的API也不再是統一定義在少數幾個單一的程序集中,而是經過有效分組之后被定義在各自獨立的模塊中
總結

作為運行時的CoreCLR和提供BCL的CoreFX是.NET Core兩根重要的基石。.NET 能夠成長為跨平台的.NET Core 他們是主力軍,CoreCLR運行時為.NET Core應用提供了不同平台不同的執行環境;CoreFX為.NET Core提供了徹底解決代碼復用的難題。
————————————————
版權聲明:本文為CSDN博主「以燃」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_33812534/article/details/109811115


免責聲明!

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



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