本篇文章更新時間:2026/04/06
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
內容目錄
Lisette:Rust 心智模型 + Go 執行時的混血語言
用 Rust 的嚴謹語法,駕馭 Go 的生態系
編輯前言:如果你曾被 Rust 的語法設計迷住,卻又離不開 Go 的部署便利性與生態系,那 Lisette 會是一個讓人眼睛一亮的語言。它企圖保留 Rust 的語法哲學,同時直接編譯成 Go,讓你寫得優雅、執行得踏實。
原文來源:Lisette — Rust syntax, Go runtime
核心觀點 (Key Takeaways)
- Lisette 是一個「類 Rust 語法」的小語言,能編譯成 Go 程式碼。
- 內建 Rust 式的 ADT(代數資料型別)、模式匹配、不可為 nil 的語意、Hindley-Milner 型系統。
- 與 Go 完整互通:可以 import Go package、使用 goroutine、channel、select 等特性。
深入解析
Lisette 的定位很明確:它不是要取代 Go,而是彌補 Go 在語法表達上的限制,讓開發者能用更抽象、更靈活的語言思維來寫本質上仍是 Go 的程式。對我來說,它像是「給 Go 裝上一個更聰明的大腦」。
強型別與模式匹配:Rust 的精華直接帶過來
原文示例中最吸引我的是 enums 與 pattern matching:
enum Message { Ready, Write(string), Move { x: int, y: int } }
這代表你能用 Go 完全沒有的表達方式,去把資料結構清楚區分開來,並用 match 去全面檢查案例。
Lisette 還會檢查是否漏掉 pattern,這點我在 Go 總是很想要但沒有。
真正的 Option / Result,而不是 nil 地獄
Lisette 杜絕 nil,用 Option 與 Result 來明確處理錯誤與缺值,並針對錯誤用 ? 運算子做 early-return。
這讓錯誤控制邏輯幾乎與 Rust 一樣乾淨,但最終編譯成 Go 時仍維持語言語意:
Result 在 Go 中被編譯成有標籤的 struct,邏輯完全顯性化。
取得 Go 的 runtime 與 ecosystem 是最大的賣點
Lisette 不是學術玩具語言,它直接呼叫 Go:
- import "go:fmt" 可以直接用 fmt.Println
- task {…} 就是 goroutine
- select {…} 與 channel 原生支援
換句話說,你用 Rust 的語法寫 Go 的競態模型,而且不會為了語言切換付出 runtime 優化的成本。
語法糖多,但都以「提升可讀性」為核心
例如:
- pipeline operator
|> - try block
- chaining + lambda
- if let / let else
- deferral(Go 的 defer 精神延伸)
- serialization attribute(完全對應 Go struct tags)
這些語法讓我感覺 Lisette 不是在炫技,而是試圖補上 Go 在語法表達上的「不足但必要」。
筆者心得與啟發
閱讀完 Lisette 的介紹,我最大的感想是:這是一門「知道 Go 的痛點,也知道 Rust 的優點」的語言。它的野心不在於推翻既有生態,而是在於讓我們用更貼近現代語言設計的方式去寫 Go。尤其以下幾點讓我印象深刻:
- 用 pattern matching 寫業務邏輯真的乾淨太多
- 透過編譯器預先阻止 nil、漏 case、忽略 Result 等常見錯誤
- 即使語法看起來像 Rust,編譯後仍是可預測的 Go 行為
如果你是 Rust 的愛好者,但工作需要寫 Go,那 Lisette 很可能讓你重新愛上寫 Go 的感覺。對我來說,它更像是「Go 的語法升級包」,補齊了型別表達力、錯誤處理、語法簡潔度等方面的缺口。
未來我最期待的是:這樣的語言能否真正進到生產使用?要回答這個問題,還得看編譯器成熟度與工具鏈完整性。但以目前介紹的功能來看,Lisette 已經展示了非常完整的語言願景與務實的落地方式。
