前端前線 2026 年 5 月 9 日

2026-05-09 — TC39 五月例會 Math.clamp/SeededPRNG Stage 2、Vue 3.5.34 修補 Effect 洩漏

primary=https://github.com/tc39/proposals primary=https://github.com/vuejs/core/releases/tag/v3.5.34

TC39 五月例會:Math.clamp、SeededPRNG 晉升 Stage 2,Immutable ArrayBuffers 進入 Stage 2.7

TC39 Proposals · 2026-05-09

TC39 委員會於 2026 年五月例會審議多項提案,數個長期討論中的語言特性獲得正式階段晉升Math.clampSeededPRNG 升至 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 無破壞性,可完整 polyfill
  • SeededPRNG 不影響 Math.random() 現行語意,二者平行存在
  • Immutable ArrayBuffers 的 transferToImmutable() 需 engine 層原生支援,無法以 polyfill 完整模擬不可變語意
  • Explicit Resource Management 的 using 目前在 V8 --harmony-explicit-resource-management 可用,TypeScript 5.2 已穩定支援

原始來源:TC39 Proposals Repository


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 分支預覽版,包含較大幅度的新特性,仍在測試階段

原始來源:Vue core v3.5.34 release notesCHANGELOG.md


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