微軟調整 C# unsafe 語意,強化記憶體安全責任揭露
微軟 .NET 團隊計畫在 C# 16(.NET 11 預覽)引入新的 unsafe 語意模型,讓記憶體安全責任由編譯器協助驗證並明確傳遞給呼叫端,而非僅作為語法開關。
核心概念
- 舊模型:
unsafe僅開啟指標語法的使用範圍 - 新模型:
unsafe明確標示「編譯器無法自行驗證記憶體安全條件」的邊界,並強制要求呼叫端承擔責任
關鍵規則
- 每個不安全操作必須明確放在
unsafe區塊內 - 可以「自我封裝」安全性的方法對外仍可普通呼叫
- 無法封裝安全性的方法須將責任傳遞給呼叫端(呼叫端也需加
unsafe)
技術特性
| 項目 | 說明 |
|---|---|
| 時間點 | 編譯期 |
| 效能影響 | 無 |
| 違規後果 | 編譯錯誤(非警告) |
| 預覽版本 | .NET 11 / C# 16(選擇性啟用) |
| 正式推出 | .NET 12 |
安全說明機制
- 不安全成員需附
<safety>文件,明寫呼叫端條件 - Roslyn 分析器可偵測缺漏說明
產業背景
此變更呼應業界(包含 NSA、CISA 等)對記憶體安全程式語言的關注,試圖在不放棄 C# 高效能能力的前提下,提升記憶體安全的可審計性。
來源文章
相關頁面
- microsoft — .NET 開發者(微軟)