不知不覺中微軟已經計劃推出了下一代的ASP了,我們先來看一下新的ASP有包含什麼
What's new in .NET 5?
.NET 5將會引入新的APIs,執行時功能和新的語言特色。
- 在執行時體驗中將有更多的選擇性。
- 所有平臺將提供Java 互操作性。
- 將會在多個作業系統提供支援 Objective-C 和 Swift 互操作性。
- CoreFX 將擴充套件為支援 .NET 的靜態編譯(ahead-of-time – AOT),更小的空間佔用和對更多作業系統的支援。
.NET 5 = .NET Core vNext
首先需要明確的是,.NET 5是下一代的Core,即使它不再使用Core命名,接著我們已經熟悉的Core裡面的內容是保留的,因為.NET 5是Core的延續,按照微軟的計劃,.NET 5是在2020年的10月份才有release版本出來,所以接下來我們看到的版本還是ASP.NET Core 3.x 系列
為啥不繼續用Core命名呢?從發展軌跡來看,Core的出現是因為微軟希望從本質上區分Framework, 這也確實從底層到使用都進行了非常大的更改,這次微軟希望清楚地傳達, .NET 5 是 .NET 平臺的未來,將其稱為 .NET 5 是要讓它成為微軟釋出過的最高版本。
Improving
每一次的更新換代,肯定是基於易用性和效能上的提升,我們來看一下微軟官方的一個基於.NET 5的改進:
- 改進體驗,在任何地方都可以使用 .NET 執行時和框架,並具有統一的執行時行為
- 充分利用 .NET Core、.NET Framework、Xamarin 和 Mono 來擴充套件 .NET 的功能。
執行時體驗
Mono 是 .NET 跨平臺實現的基石,它最初是以開源為目的來替代 .NET Framework 的,Mono 是用作 Xamarin 一部分的執行時。
CoreCLR 是作為 .NET Core 一部分的執行時。它主要用於支援雲應用程式,包括 Microsoft 的最大服務,現在也用於 Windows 桌面,物聯網和機器學習應用程式。
總而言之,.NET Core 和 Mono 執行時有許多相似之處(畢竟它們都是 .NET 執行時),但也有寶貴的獨特功能。讓選擇所需的執行時體驗成為可能是非常有意義的。我們正在使 CoreCLR 和 Mono 可以互相替換。我們將使它像構建開關一樣簡單,以便在不同的執行時選項之間進行選擇。
高吞吐量和高生產率
最開始.NET 就依賴於JIT(即時編譯器)將IL(中間語言)程式碼轉換為機器程式碼,從那時微軟就構建了業界領先的基於 JIT 的託管執行時。該執行時具有非常高的吞吐量,並且提升了開發體驗,使程式設計變得快速而簡單,這也是為什麼這麼多人口中微軟的低門檻:)
大多數 .NET 5 的預設體驗將使用基於 JIT 的 CoreCLR 執行時。兩個值得注意的例外是 iOS 和客戶端 Blazor(web assembly),因為它們都需要 ahead-of-time (AOT) 原生編譯。
更快的啟動,更低的記憶體佔用率
Mono 專案的集中了大部分精力在移動和遊戲機上。該專案的一個關鍵功能是基於業界領先的 LLVM 編譯器專案的 .NET AOT 編譯器。AOT 編譯的應用可以在較小的位置高效執行, 並在需要時交換吞吐量以進行啟動。
Blazor 專案已經在使用 Mono AOT,這將是最早過渡到 .NET 5 的專案之一。
有兩種型別的 AOT 解決方案:
- 需要 100% AOT 編譯的解決方案。
- 大多數程式碼是 AOT 編譯的解決方案, 但 JIT 或直譯器可用於與 AOT 不友好的程式碼模式。
.NET Native 是微軟用於 Windows UWP 應用程式的 AOT 編譯器, 也就是上面的第一種 AOT 型別。隨著第一種方案的實現, 微軟限制了 .NET API 和可以使用的功能,從這一經驗中瞭解到, AOT 解決方案需要覆蓋 .NET API 和模式的所有方面。
原則和交叉體驗
基於startup,吞吐量,記憶體佔用, 可靠性和診斷性作為平臺的整體風格是非常重要的,這也是微軟專注的努力方向。在專注於吞吐和可靠性的同時,也更專注於startup 和 Mono AOT編譯器的大小控制,這是很好的匹對,例如吞吐和可靠性,startup 和 大小控制。
微軟將會持續在各種場景對.NET 5進行優化,特別是在具有多種交叉場景的情況下進行重點優化。
所有的 .NET 5應用將會使用CoreFX框架,微軟將會確保在如今不經常使用的地方保證.NET 5的正常工作,這主要集中在Xamarin 和 客戶端 Blazor的工作場景。還有.NET 5的應用在.NET CLI都是可構建的,只需確保在專案中有基於命令列的基礎編譯工具即可。
C#語言將會保持跟.NET 5的同步,開發者在後續開發.NET 5應用是將可使用最新版本的C#以及對應的特性。
Birth of the project
微軟於 2018 年 12 月在波士頓碰頭後組建了技術團隊並開始了這個專案。來自 .NET 團隊(Mono/Xamarin和.NET Core)以及 Unity 的設計領導者介紹了各種技術和架構方向。
.NET 5這個專案目前是作為單個團隊推進,並以提供一套可交付成果為導向。自 12 月以來,在以下一些專案上取得了較多的進展:
- 定義一個極小的分層用來定義執行時 <-> 託管程式碼層,目標是實現 >99% 的 CoreFX 公共程式碼。
- MonoVM 可以使用 CoreFX 及其類庫。
- 在 MonoVM 上使用CoreFX的實現執行所有 CoreFX 測試。
- 在 MonoVM 上執行 ASP.NET Core 3.0 應用程式。
- 在 CoreCLR 上執行 MonoDevelop,然後執行 Visual Studio for Mac。
遷移到單個.NET的實現會引發一些問題: 目標框架將是什麼? NuGet包相容性規則是否相同? .NET 5 SDK 應該支援哪些工作負載?特定框架的編碼將如何工作?我們還需要 .NET Standard嗎?
好吧,讓巨人先走,我們慢慢爬上去吧:)
Ending
.NET 5 是令人興奮的新方向。微軟這次的.NET更新換代,旨在讓所有的人看到, .NET 將變得更簡單,且具有更廣泛功能和實用性。所有新的開發和功能都將成為 .NET 5 的一部分,包括新的 C# 版本,在使用相同的 .NET API 和語言來針對各種應用程式型別、作業系統和晶片架構將會使微軟的發展有著更光明的未來,它可以使我們在 Visual Studio ,Visual Studio for Mac,Visual Studio Code,Azure DevOps 或命令列中輕鬆更改構建配置用於構建不同的應用程式。