Generated by Answer me with HTML 0.5.2 · 2026-10-25 14:00 · ★ Star on GitHub
Goose 語言懶人包
無 heap、比 C++ 快?一次看懂設計與 HN 爭點
Lead: Goose 拿掉 heap,用編譯器管理的 data stack 配連續資料,在自報數據跑贏 C++ 與 Rust。HN 肯定設計,質疑文件與數據。
Goose 是什麼
新系統語言,語法近 C 與 Rust,主張如下:
- 沒有 heap allocator、GC、reference counting、destructor
- 動態值住在編譯器管理的 data stack,scope 結束即釋放
- 推導 reference 壽命,不寫 lifetime、不寫 unsafe
- 編出單一 C 檔,內附 TinyCC,可即時執行
- 作者
- Wouter van Oortmerssen(Lobster、Amiga E)
- 實作
- 約三萬行 C++,近全文 AI 協作完成
- 授權
- Apache 2.0
- 狀態
- 新語言,CI 跑 Windows、macOS、Linux
記憶體模型
自報效能
16 項 benchmark 幾何平均,數字來自專案方,未經第三方驗證。
| 對手 | 速度 | 峰值記憶體 |
|---|---|---|
| 習慣寫法 C++ | 快 3.5 倍 | 少 1.9 倍 |
| 手工優化 C++ | 快 1.2 倍 | 少 1.3 倍 |
| 最佳 safe Rust | 快 1.1 倍 | 少 1.2 倍 |
速度來源
- 免 heap 配置與逐物析構
- 資料連續,貼合快取
- 連結窄,enum 依 variant 定尺寸
- 增長不搬移,reference 長期有效
- 值在目的地直接建成,免暫存拷貝
代價
| 限制 | 說明 |
|---|---|
| 想清資料住處 | 擁有者與壽命不對齊就沒效 |
| 遞迴受限 | 跨遞迴呼叫保留可增長資料 |
| 變長陣列 | 可走訪,不可索引 |
| 閉包與分派 | 無逃逸閉包,只靠 ADT tag 分派 |
| 整體編譯 | 只做 whole-program 編譯 |
| 共用記憶體 | 執行緒不共用可變記憶體 |
HN 爭點
| 爭點 | 風向 |
|---|---|
| 設計有趣,連結與 inline 實用 | 叫好 |
| 文件像 AI 寫,只講做法不講動機 | 最大罵點 |
| Rust 對照組未用 with capacity | 數據存疑 |
| Carmack 是否背書 | 各說各話 |
| 缺點只放教學 §18 | 觀感不佳 |
作者回應
作者 AMA 重點
執行緒學 Dart Isolate,各自獨立,以 memcpy 傳 flat 值。AoS 轉 SoA 目前不做。Lobster 繼續走好用路線,Goose 走極速路線。