TC39 五月例會:Math.clamp、SeededPRNG 晉升 Stage 2,Immutable ArrayBuffers 進入 Stage 2.7
TC39 Proposals · 2026-05-09
TC39 委員會於 2026 年五月例會審議多項提案,數個長期討論中的語言特性獲得正式階段晉升:Math.clamp、SeededPRNG 升至 Stage 2,Immutable ArrayBuffers 進入新設的 Stage 2.7,而 Explicit Resource Management(using 宣告)仍在 Stage 3 持續討論後續標準化細節。
核心改動
Math.clamp(value, min, max) 是社群呼聲最高的數學工具函式之一,Stage 2 確立了其語意:回傳落在 [min, max] 區間的 value,若 min > max 則拋出 RangeError。這消除了 Math.min(Math.max(v, min), max) 的慣用雙層呼叫,也讓 JIT 編譯器有機會生成單一邊界檢查指令。
SeededPRNG 提供確定性隨機數產生器,以 seed 初始化後每次呼叫回傳同一序列,適用於遊戲重播、可重現測試與程序生成內容。提案目前傾向 xoshiro128++ 演算法,介面設計為 new SeededPRNG(seed: bigint),提供 .random(): number 與 .randomInt(min, max): number 兩個方法。它不影響現有 Math.random() 的不確定語意。
Immutable ArrayBuffers — Stage 2.7
Immutable ArrayBuffers 由 Mark Miller、Peter Hoddie、Richard Gibson 與 Jack Works 提倡,允許將現有 ArrayBuffer 凍結為不可變形態:呼叫 buf.transferToImmutable() 後,原 buffer 被轉移並返回一個不可寫入的版本,任何後續修改嘗試皆拋出 TypeError。這為 SharedArrayBuffer 的安全跨 Worker 共享提供新路徑,無需複製資料即可傳遞唯讀記憶體區塊,對 WebAssembly 場景尤其有利。
Stage 2.7 是 TC39 近年新設的中間站,代表規格文本已趨完整、正在等待測試與邊界情境確認,距 Stage 3 僅一步之遙。Engine 廠商通常在此階段開始試驗實作,但 API 仍可能微調。
影響範圍
Math.clamp無破壞性,可完整 polyfillSeededPRNG不影響Math.random()現行語意,二者平行存在- Immutable ArrayBuffers 的
transferToImmutable()需 engine 層原生支援,無法以 polyfill 完整模擬不可變語意 - Explicit Resource Management 的
using目前在 V8--harmony-explicit-resource-management可用,TypeScript 5.2 已穩定支援
Vue 3.5.34 修補反應式作用域孤立 Effect 與 v-if Transition DOM 洩漏
Vue.js Releases · 2026-05-06
Vue v3.5.34 於 2026 年 5 月 6 日發布,本版本為純 bug fix 更新,聚焦三個影響範圍明確的回歸問題:反應式作用域(effect scope)的孤立 effect 洩漏、props 驗證中的 Symbol 強制轉型警告,以及 v-if fragment 搭配 out-in transition 時的 DOM 節點洩漏。
原本的問題
孤立 effect 洩漏發生於 effect 在已停止的 scope 內被建立時——正常情況下 scope 應收集其下所有 effect,並在 scope.stop() 時一併清除。但在特定巢狀條件下,後建立的 effect 會逃逸到 scope 外繼續存活,導致訂閱關係無法釋放,最終形成記憶體洩漏。
v-if fragment 與 out-in transition 的 DOM 洩漏是另一個值得注意的修補。當 v-if 切換觸發 out-in transition 動畫時,舊 fragment 的 DOM 節點在動畫完成後未被正確移除,在高頻率條件切換的場景(如 tab 面板、步驟式表單)下,會持續累積殭屍節點。
採用的方法
針對孤立 effect,修補在 effectScope 停止後明確拒絕收集任何新建的 effect,使其立即成為獨立的短命 effect 而非洩漏的訂閱者。props 驗證的 Symbol 修補則防止 Vue 在驗證時隱式呼叫 Symbol.prototype.toString(),避免產生誤導性的主控台警告。
影響範圍
- 使用
effectScope()API 的底層函式庫(如 VueUse、Pinia)建議優先測試 - 一般 Vue 3 應用程式可直接升級,無需修改程式碼
- Vue 3.6.0-beta.11 同日發布,為 minor 分支預覽版,包含較大幅度的新特性,仍在測試階段