.NET 7 Preview 1 已正式釋出

snakesss發表於2022-02-27

​近日,.NET 7 第一個預覽版 .NET 7 Preview 1 正式釋出。

.NET 7 建立在 .NET 6 建立的基礎之上,包括一套統一的基礎庫、執行時和 SDK,簡化了開發體驗,提高了開發人員的工作效率。.NET 7 的主要關注領域包括改進對雲原生方案的支援、更容易升級舊專案的工具,以及通過更輕鬆地使用容器來簡化開發人員體驗。

.NET 7 Preview1包括對 API 的可空註釋、持續的JIT 編譯器優化、新的 API 以及對更多熱過載方案的支援。

.NET 7 Preview 1 主要更新內容

Microsoft.Extensions 的可空註解

.NET  在註釋 Microsoft.Extensions.* 庫,以實現可空性(nullability)方面取得了進展。在 .NET 7 Preview 1 中,以下庫已針對可空性進行了註釋:

  • Microsoft.Extensions.DependencyInjection.Abstractions
  • Microsoft.Extensions.Logging.Abstractions
  • Microsoft.Extensions.Primitives
  • Microsoft.Extensions.FileSystemGlobbing
  • Microsoft.Extensions.DependencyModel
  • Microsoft.Extensions.Configuration.Abstractions
  • Microsoft.Extensions.FileProviders.Abstractions
  • Microsoft.Extensions.FileProviders.Physical
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Binder
  • Microsoft.Extensions.Configuration.CommandLine
  • Microsoft.Extensions.Configuration.EnvironmentVariables
  • Microsoft.Extensions.Configuration.FileExtensions
  • Microsoft.Extensions.Configuration.Ini
  • Microsoft.Extensions.Configuration.Json

我們計劃在 .NET 7 正式釋出時為所有 Microsoft.Extensions.* 庫新增可空性註釋。

可觀察性

繼續改進跟蹤 API:

  • 新增ActivityContext.TryParse過載以允許解析和建立ActivityContext物件,包括是否從遠端父級傳播活動上下文(相關問題)。
  • 新增Activity.IsStopped指示Activity物件是否停止的方法(相關問題)。

程式碼生成

根據社群意見對程式碼生成進行了改進

  • 將一些舊式內部函式轉換為 NamedIntrinsic 。  #62271
  • 將額外的二進位制操作新增到 RangeCheck 分析中。#61662
  • [JIT] [61620] 針對 *x = dblCns 優化 ARM64;#61847
  • CoreRT 支援 ARM64&Unix 。#41023
  • 基於覆蓋的 FMA codegen 優化 #58196

動態 PGO

  • 對 Arm64 的 OSR 支援
  • JIT:支援同步方法的 OSR
  • JIT:處理 OSR、PGO 和尾呼叫的互動
  • 新增 2009 Jit 架構計劃(節選)
  • JIT:一些 relops 的有限版本的前向替換
  • JIT:為後期去虛擬化儲存泛型上下文

Arm64

Arm64:記憶體屏障改進

迴圈優化

  • 泛化迴圈前標頭建立和迴圈提升
  • 迴圈重構和註釋改進

互操作:p/Invoke 程式碼生成

我們將在 .NET 6 中原型化的 p/invoke 源生成器(Source Generator) 整合到 dotnet/runtime 中,並且一直在轉換執行時庫以使用它。這意味著轉換後的 p/invokes 與 AOT 相容,不再需要在執行時生成 IL Stub。

System.Text.Json 中的新 API

System.Text.Json 附帶了一些小的生命週期增強功能:

  • 開發人員現在可以訪問 System.Text.Json 內部使用的預設單例JsonSerializerOptions(相關問題)。
  • 新增一個JsonWriterOptions.MaxDepth屬性並確保此值來自序列化的JsonSerializerOptions.MaxDepth等效屬性(相關問題)。
  • 將Patch方法新增到System.Net.Http.Json

熱過載改進

下列更改適用於  Blazor WebAssembly 和 .NET 的 C# 熱過載

  • 向現有方法新增靜態 lambda
  • 將捕獲這個的 lambda 新增到已經有至少一個捕獲這個的 lambda 的現有方法中
  • 向現有類新增新的靜態或非虛擬例項方法
  • 向現有類新增新的靜態欄位
  • 新增新類

相關文章