後端工坊 2026 年 8 月 11 日

2026-08-11 — Rust 開放 RFC 3323 限定語法測試,Django 確定廢除 LTS 改採年度發布週期

primary=https://blog.rust-lang.org/inside-rust/2026/08/10/call-for-testing-impl-and-mut-restrictions/ primary=https://rust-lang.github.io/rfcs/3323-restrictions.html primary=https://github.com/rust-lang/rust/issues/160614 primary=https://www.djangoproject.com/weblog/2026/aug/10/annual-release-cycle/ primary=https://github.com/django/deps/blob/main/accepted/0020-annual-release-cycle.rst primary=https://github.com/django/deps/blob/main/final/0004-release-schedule.rst

Rust RFC 3323 開放測試:以 impl/mut 限定語法取代 sealed trait 樣板碼

Rust Blog(Inside Rust)· 2026-08-10

Rust 專案於 nightly 工具鏈中開放 RFC 3323「Restrictions」的兩項新語法特性進行社群測試,官方部落格 Inside Rust 已於 2026-08-10 發出正式的 Call for Testing 公告。這兩項特性分別是限制 trait 實作範圍的 impl_restriction,以及限制欄位可變範圍的 mut_restriction,開發者可透過追蹤議題 rust-lang/rust#160614 回報實際使用中的問題。

背景

在此提案之前,函式庫作者若要避免下游 crate 自行實作某個 trait(即所謂 sealed trait 模式),得依賴一個技巧:把 trait 定義放進私有模組,再從外部重新匯出。這種寫法在 Rust API 準則文件中已有明確記載,但需要額外的模組結構與樣板碼,也無法直接套用到「欄位唯讀」這類需求——想讓欄位在模組外唯讀,通常得改寫成 getter 方法搭配私有欄位,犧牲了直接欄位存取的簡潔性。RFC 3323 的目標是把這兩種常見需求上升為語言層級的可見性限定詞,交由編譯器直接強制執行。

核心改動 / 規格細節

新語法把限定範圍寫在 implmut 之後、以括號指定作用域,語意上與既有的 pub(crate) 系列可見性修飾詞一致。以下為 RFC 文件中的範例:

pub impl(crate) trait Foo {
    fn bar();
}

pub struct Time {
    pub mut(crate) hour: u8,
    pub mut(crate) minute: u8,
}

支援的作用域寫法包含:

  • impl(crate)mut(crate):限定在目前 crate 內
  • impl(super)mut(super):限定在父模組
  • impl(self)mut(self):限定在目前模組
  • impl(in path::to::module)mut(in path::to::module):限定在指定路徑的模組

語意細節上,可變性的判定發生在建立可變參照的當下,而非實際寫入資料的那一刻;透過 Cell 等型別達成的內部可變性不算在限制範圍內。此外,一旦結構體含有被 mut 限定的欄位,在限定範圍以外就不能再使用結構體字面量語法建構該型別實例,避免繞過限制直接建構出不合法狀態。

影響範圍

對函式庫維護者而言,這兩項特性的用意是取代現有的 sealed trait 樣板碼與大量 getter 方法,讓不變條件(invariant)保護直接寫進型別定義。目前這兩個 feature gate 僅存在於 nightly 版本,尚未進入穩定版發布排程;官方特別強調這次測試的重點是蒐集「實際程式碼中的可用性」回饋,而非單純語法審查,因此已邀請函式庫作者嘗試把既有的 sealed trait 或 getter 包裝改寫成新語法,並回報遇到的邊界情況。

原始來源:RFC 3323 全文rust-lang/rust#160614 追蹤議題


Django 廢除 LTS 制度,改採統一三年支援的年度發布週期

Django Weblog · 2026-08-10

Django 專案指導委員會(Steering Council)已正式接受 DEP 20 提案,將原本「短週期功能版+不定期 LTS 版」的混合發布模式,改為統一的年度發布週期。新制將從 Django 2028(預計 2028 年 1 月發布)開始生效,官方部落格於 2026-08-10 發布完整說明。

背景

目前 Django 採每 8 個月一次的功能版發布,並每隔數個版本挑一個標記為 LTS、提供更長支援期。但 Python 官方自身是每年 10 月固定發布新版本,兩者週期不對齊,導致 LTS 版本在生命週期末段經常得同時支援已過上游終止支援(EOL)日期的舊版 Python,形成版本矩陣上的困擾,也讓第三方套件難以規劃相容性測試矩陣。

核心改動 / 規格細節

DEP 20 取消了「LTS」這個特殊分類,往後每一個年度功能版都享有相同的三年支援期:第一年提供一般性 bug 修正,其後兩年僅提供安全性與資料遺失相關修補。版本命名也將改用發布年份,例如 Django 2028Django 2029,取代目前的語意化版號。新制上路後,任何時間點都會有三個年度版本同時處於支援狀態,為第三方套件維護者提供穩定的相容性目標。每個年度版在發布時支援最新的三個 Python 版本,並在生命週期第一年內逐步納入新發布的 Python 版本,使支援窗口盡量貼齊 Python 上游的 EOL 時程。

影響範圍

過渡期間現有版本的支援承諾不受影響:Django 6.1(2026 年 8 月發布)將於 2027 年 12 月終止支援,Django 6.2 LTS(預計 2027 年 4 月發布)則支援至 2030 年 4 月,是最後一個掛名 LTS 的版本。新制第一版 Django 2028 排定 2028 年 1 月發布、支援至 2030 年 12 月,其後 Django 2029 支援至 2031 年 12 月,自此每年疊代一次。官方表示此舉是為了消除「必須搶在下一個大版本前升級」的壓力——使用者只要在自己版本的支援窗口內,每年升級一次即可維持在受支援範圍內。

原始來源:DEP 20:Annual Release CycleDEP 4:舊版發布排程


End of article
0
Would love your thoughts, please comment.x
()
x