---
title: "Mojo 1.2 加入模式匹配，數學函數首次統一跑上 GPU"
url: https://sammy.hk/mojo-1-2-pattern-matching/
author: Ethan
published: 2026-11-08T13:34:00+08:00
modified: 2026-11-08T09:53:36+08:00
description: "Modular 於 2026 年 10 月 22 日發布 Mojo 1.2.0，套件版本為 mojo==1.2.0，與 MAX 26.7 同步推出[1]。這次更新以模式匹配（pattern matching）為旗艦功能，同時把二十多個標準數學函數改為 CPU 與 GPU 共用的實作，並大幅加快大型套件的編譯速度。官方版…"
categories: ["開放源碼"]
tags: [GPU, Modular, Mojo, "程式語言"]
source: https://sammy.hk
---
![](https://sammy.hk/wp-content/uploads/2026/11/og-mojo-1-2-pattern-matching.jpg)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日）](https://mojolang.org/releases/v1.2.0/)

### 相關文章：

1. [Mojo 1.2 發布：加入 pattern matching、二十多個數學函數上 GPU](https://sammy.hk/mojo-1-2-pattern-matching-gpu/ "Mojo 1.2 發布：加入 pattern matching、二十多個數學函數上 GPU")
2. [NVIDIA 推出 CUDA Rust：兩條路線用 Rust 寫 GPU 核心](https://sammy.hk/nvidia-%e6%8e%a8%e5%87%ba-cuda-rust%ef%bc%9a%e5%85%a9%e6%a2%9d%e8%b7%af%e7%b7%9a%e7%94%a8-rust-%e5%af%ab-gpu-%e6%a0%b8%e5%bf%83/ "NVIDIA 推出 CUDA Rust：兩條路線用 Rust 寫 GPU 核心")
3. [Zig 0.17 發布：建置系統重新設計，增量編譯預期全面可用](https://sammy.hk/zig-0-17-%e7%99%bc%e5%b8%83%ef%bc%9a%e5%bb%ba%e7%bd%ae%e7%b3%bb%e7%b5%b1%e9%87%8d%e6%96%b0%e8%a8%ad%e8%a8%88%ef%bc%8c%e5%a2%9e%e9%87%8f%e7%b7%a8%e8%ad%af%e9%a0%90%e6%9c%9f%e5%85%a8%e9%9d%a2%e5%8f%af/ "Zig 0.17 發布：建置系統重新設計，增量編譯預期全面可用")
4. [Python 3.15.0 正式版發布：實驗性 JIT 明顯加速、UTF-8 成預設編碼](https://sammy.hk/python-3-15-0-%e6%ad%a3%e5%bc%8f%e7%89%88%e7%99%bc%e5%b8%83%ef%bc%9a%e5%af%a6%e9%a9%97%e6%80%a7-jit-%e6%98%8e%e9%a1%af%e5%8a%a0%e9%80%9f%e3%80%81utf-8-%e6%88%90%e9%a0%90%e8%a8%ad%e7%b7%a8%e7%a2%bc/ "Python 3.15.0 正式版發布：實驗性 JIT 明顯加速、UTF-8 成預設編碼")
