---
title: "Rust 1.100 正式推出 十年爭議後 Never 型別終於穩定"
url: https://sammy.hk/rust-1-100-never-type/
author: Ethan
published: 2026-11-13T09:41:00+08:00
modified: 2026-11-13T09:41:00+08:00
description: "Rust 團隊於 2026 年 11 月 12 日發布 Rust 1.100.0，版本號首次進入三位數。這次更新最受注目的是 Never 型別（程式碼中的 !）在經歷十年討論與五次失敗的穩定化嘗試後正式落地，標準庫的 Allocator API 與 core::mem::DropGuard 亦同步穩定[1]。已安裝 r…"
categories: ["開放源碼"]
tags: [Cargo, "Never 型別", Rust, "程式語言", "開源"]
source: https://sammy.hk
---
Rust 團隊於 2026 年 11 月 12 日發布 Rust 1.100.0，版本號首次進入三位數。這次更新最受注目的是 Never 型別（程式碼中的 `!`）在經歷十年討論與五次失敗的穩定化嘗試後正式落地，標準庫的 `Allocator` API 與 `core::mem::DropGuard` 亦同步穩定\[1\]。已安裝 rustup 的用戶可直接以 `rustup update stable` 升級。

## Never 型別與其相容性代價

Never 型別代表永遠不會產生值的計算類型，`return`、`break`、`std::process::exit` 等表達式本身就屬於 `!`\[2\]。過去 `!` 只能在函式回傳型別等少數位置書寫，1.100 起可以在任何位置命名，例如 `Result`；`!` 可強制轉換為任何型別的規則亦保留，令 `match` 分支可以直接 `return` 而不需補上值。

穩定化的關鍵一步是把 `Infallible` 改為 Never 型別的別名，使舊有 API 與 `!` 互通。代價是一項 breaking change：2015、2018、2021 三個 edition 的 never type fallback 由 `()` 改為 `!`，與 2024 edition 保持一致\[1\]。官方稱大多數程式碼不受影響，但少數情況下（例如忽略一個回傳泛型參數的函式結果）行為會改變，編譯器亦可能判定更多程式碼為不可達。團隊已提前發出相容性警告，並修正多個受影響的公開 crate。

## 配置器與作用域退出工具

`Allocator` API 的核心部分穩定，`Vec` 與 `Box` 可以使用自訂配置器，相關方法包括 `Vec::new_in`、`Box::new_in` 等。官方定位這是 Allocators 1.0 專案目標的基礎，未來會擴展至更多集合與指標型別。

`core::mem::DropGuard` 針對「函式離開時一定要執行某些程式碼」的場景：它包住一個變數與一個閉包，被 drop 時執行閉包並消耗變數，另提供 `dismiss` 方法取回變數而不執行解構，方便實作全有或全無的交易式 API。至於 `std::mem::conjure_zst`，則是首個專門用於安全地憑空造出零大小型別值的函式；由於部分 API 依賴這類型別不可被建構來維持安全（例如 PyO3 的 GIL 標記），此函式標記為 unsafe\[1\]。

## Cargo 的供應鏈與建置改動

Cargo 新增未使用依賴警告，透過 `[lints.cargo]` 控制，預設為 warn；限制是必須建置所有可能用到該依賴的 target 才會顯示。建置目錄改用按建置步驟分層的佈局，並把 build configuration hash 移到父目錄，減少快取碰撞與不必要的重編，但官方提醒這項內部改動可能影響倚賴舊佈局的建置流程與測試。

另一項與安全相關的是 `min-publish-age`，亦即依賴冷卻期\[1\]。開發者可在 `.cargo/config.toml` 設定 `global-min-publish-age = "3 days"`，Cargo 解析版本時會跳過發布未滿三日的版本，並列出被暫緩的版本。需要即時採用新版本時，可用 `CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow` 單次覆寫。要注意 `cargo install` 不受此限制，官方亦強調冷卻期只降低部分供應鏈攻擊風險，不能取代依賴審查。

## 升級注意

升級只需執行 `rustup update stable`。企業與 CI 環境應優先檢查兩點：其一，舊 edition 專案有否依賴 never type fallback 的舊行為；其二，建置腳本或測試有否針對舊 Cargo 建置目錄佈局寫死路徑。官方建議先在 beta 或 nightly 通道測試，並回報任何問題。

## 參考資料

\[1\] [Announcing Rust 1.100.0（2026-11-12）](https://blog.rust-lang.org/2026/11/12/Rust-1.100.0/)

\[2\] [Rust 標準庫文件：primitive never](https://doc.rust-lang.org/stable/std/primitive.never.html)

### 相關文章：

1. [GitHub 用 AI 代理把 Copilot 執行時重寫為 Rust：832,378 行與 96% 提示快取命中](https://sammy.hk/github-%e7%94%a8-ai-%e4%bb%a3%e7%90%86%e6%8a%8a-copilot-%e5%9f%b7%e8%a1%8c%e6%99%82%e9%87%8d%e5%af%ab%e7%82%ba-rust%ef%bc%9a832378-%e8%a1%8c%e8%88%87-96-%e6%8f%90%e7%a4%ba%e5%bf%ab%e5%8f%96%e5%91%bd/ "GitHub 用 AI 代理把 Copilot 執行時重寫為 Rust：832,378 行與 96% 提示快取命中")
2. [Gzip 1.15 修好一批自問世以來就存在的 bug](https://sammy.hk/gzip-1-15-%e4%bf%ae%e5%a5%bd%e4%b8%80%e6%89%b9%e8%87%aa%e5%95%8f%e4%b8%96%e4%bb%a5%e4%be%86%e5%b0%b1%e5%ad%98%e5%9c%a8%e7%9a%84-bug/ "Gzip 1.15 修好一批自問世以來就存在的 bug")
3. [Rust 官方警告：針對知名開發者的目標攻擊正在進行](https://sammy.hk/rust-%e5%ae%98%e6%96%b9%e8%ad%a6%e5%91%8a%ef%bc%9a%e9%87%9d%e5%b0%8d%e7%9f%a5%e5%90%8d%e9%96%8b%e7%99%bc%e8%80%85%e7%9a%84%e7%9b%ae%e6%a8%99%e6%94%bb%e6%93%8a%e6%ad%a3%e5%9c%a8%e9%80%b2%e8%a1%8c/ "Rust 官方警告：針對知名開發者的目標攻擊正在進行")
4. [GNOME 51 發佈：圖形效能、系統設定與離線地圖齊齊更新](https://sammy.hk/gnome-51-%e7%99%bc%e4%bd%88%ef%bc%9a%e5%9c%96%e5%bd%a2%e6%95%88%e8%83%bd%e3%80%81%e7%b3%bb%e7%b5%b1%e8%a8%ad%e5%ae%9a%e8%88%87%e9%9b%a2%e7%b7%9a%e5%9c%b0%e5%9c%96%e9%bd%8a%e9%bd%8a%e6%9b%b4%e6%96%b0/ "GNOME 51 發佈：圖形效能、系統設定與離線地圖齊齊更新")
