Mojo 1.2 加入模式匹配,數學函數首次統一跑上 GPU

Modular 於 2026 年 10 月 22 日發布 Mojo 1.2.0,套件版本為 mojo==1.2.0,與 MAX 26.7 同步推出[1]。這次更新以模式匹配(pattern matching)為旗艦功能,同時把二十多個標準數學函數改為 CPU 與 GPU 共用的實作,並大幅加快大型套件的編譯速度。官方版本說明列出多項破壞性變更,升級前必須檢視現有程式碼。

模式匹配進入語言核心

Mojo 1.2 加入 match 與 case,可以比對字面值、或模式(or-pattern)、元組、結構體及守衛條件(guard),並在比對成功時綁定名稱[1]。同一套模式亦可用於 if case、while case 與解構賦值,例如 var [first, *middle, last] = values;動態比對支援 var 與 ref 綁定。編譯期另有 comptime match,可按參數值在編譯階段選擇不同實作路徑,甚至當作型別切換使用,好處是分支在編譯時已確定,不會帶來執行期開銷[1]。官方文件同步補充控制流程、複合語句及詞法結構等章節,並改寫給 Python 開發者的入門指引,集中解釋兩者在括號字面值、值語意與可變性上的差異。

GPU 數學運算與編譯速度

過去 std.math 的函數會呼叫系統 libm,實際上只能在 CPU 執行。1.2 把 atan()、cbrt()、erfc()、lgamma()、log10()、hypot() 及 Bessel 函數等二十多個函數改為單一 Mojo 實作,CPU 與 GPU 共用,首次可以在加速器上執行,每個函數亦註明精度與非正規數(subnormal)行為[1]。編譯方面,nn 套件的編譯時間由約 98 秒降至約 61 秒;Linux 上的編譯器改用 jemalloc 作為記憶體配置器,大型 GPU kernel 檔案的編譯時間再快約一成至一成三[1]。對每日重複建置的大型專案而言,這些改動直接減少等待時間。

升級注意的破壞性變更

StringSpan 改為只提供不可變的位元組存取,官方移除 MutStringSpan、MutStringSlice 以及 StringSpan 的 mut 參數,以往透過 span 修改字串內容的程式碼必須改寫[1]。async 與 await 關鍵字改名為 __async 與 __await,以標示非同步支援仍未穩定,舊寫法仍可編譯但會發出警告。空元組 () 此後一律代表值而非型別,型別須寫成 Tuple[]。偵測 GPU 的 has_nvidia_gpu_accelerator() 等函數亦已從 std.sys 移除,改以新的 CompilationTarget 判定方法取代。官方建議先閱讀完整 changelog 再升級,特別是依賴字串可變性的程式庫,宜先在分支上完整跑一次測試。

參考資料

[1] Mojo v1.2.0(2026年10月22日)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*