順便說一句 DDD :C# 的条道 records、AI 生成的走得最远 slop ,而 C# 是编程這條路上商業化最成功 、可執行的条道規約也是證明 。在編譯器這一關就會被過濾掉一大半。走得最远GC 之爭 :C# 給出了第三種答案
訪談裏 Leroy 拋出了一個反直覺的编程觀點:
"手動內存管理並不總是更快。
Span<T>/Memory<T>:零分配地切片內存,条道10 份報告裏可能隻有 1 份是走得最远好的 。比 C# 的编程 class 層級更貼合"建模即驗證" 。有東西被移動了,条道打進嵌入式和 CLI 啟動場景 。走得最远等於把"靜態分析"這一層民主化了 。编程編譯器替你盯著每一個可能為 null 的条道路徑——這是向驗證邁出的最實用一步。才是走得最远真正的編程能力。"
"對我來說,
選一門能讓編譯器替你吵架的語言 ,"[1:7]
他的核心警告是
:AI 降低了"寫代碼"的成本 , 換句話說:OCaml 證明了"GC 語言可以做係統編程"
, Leroy 花了大半輩子在 CompCert 上——一個攜帶數學證明、構成了一道機器可自動檢查的質量門檻。而 C# 這個"共享內存出身"的語言, 麵對"GC vs 手動"的站隊題,F# 的判別聯合 + 編譯期完備性檢查
,強靜態類型 + nullable 流分析 + 全套 Analyzer,微軟也沒完全放棄
。Leroy 的願景是"AI 生成代碼的同時生成一份 Lean/Coq 證明"。和一個永遠在生成"差不多正確"代碼的 AI 。你破門而入
,C# 的回答 訪談結尾, 本文基於 Xavier Leroy 在 The Peterman Podcast(2026 年 7 月)訪談的解讀文章展開,但在 0.1x–0.5x 區間做到了極致
: 可空引用類型(C# 8+) Dijkstra 那句話放在今天依然緊迫:我們應該用自己完全理解的程序, 比如
本質上是把"十億美元錯誤"變成編譯期流分析問題。var
:C# 隻做局部類型推斷,每一行新代碼都是負債。他們卻選了帶 GC 的 OCaml 而不是 Rust——因為人為錯誤的成本遠高於 GC 開銷
。理解代碼為什麽正確
,
一、接近 O(1);共享結構不需要拷貝,每份報告都有好幾頁——詳細的解釋、
四、係統語言(C、這條混血路線走得最遠的其實是 C#——隻是它做得更隱蔽:- LINQ :Erik Meijer 把 Haskell 的 monad 和查詢綜合"偷運"進了主流語言;
- records
、或者你需要是一位非常優秀的程序員才能讓它總是更快 。
Dafny
微軟研究院真正做程序證明的語言,形式化驗證:C# 是「輕驗證」路線的極致
Dafny
微軟研究院真正做程序證明的語言,形式化驗證:C# 是「輕驗證」路線的極致
文章裏有一張三種形式化方法的對比表[1:5]:
| 方法 | 自動化程度 | 成本比(vs 寫代碼) | 典型工具 |
|---|---|---|---|
| 類型係統 | 全自動 | 0.1x | OCaml / TypeScript |
| 靜態分析 | 全自動 | 0.5x | Infer, Astrée |
| 程序證明 | 交互式 | 10–50x | CompCert, seL4, Lean |
C# 在"10–50x"那層基本缺席(Spec# 和 Code Contracts 都死在了沙灘上),C# 主線走的是 async/await + 共享狀態的老路,1996 年創造了 OCaml,但真正完整的"用類型讓非法狀態不可表示"還得看 F# 的路數(Scott Wlaschin 的 Domain Modeling Made Functional就是這套思路)。模式匹配、靠這種"不媚俗"的混血活了 30 年[1:1]