支援弱參考

預設情況下,如果偵測到支援,wasm-bindgen 會使用 TC39 弱參考提案。在撰寫本文時,所有主要瀏覽器都支援它。

沒有弱參考,您的 JS 整合可能會在 Rust 中容易出現記憶體洩漏,例如

  • 您可能會忘記在 JS 物件上呼叫 .free(),導致 Rust 記憶體被分配。
  • 轉換為 JS 值的 Rust 閉包 (Closure 類型) 可能不會被執行和清除。
  • Rust 閉包具有 Closure::{into_js_value,forget} 方法,這些方法明確地不釋放底層記憶體。

這些問題都可以透過 JS 中的弱參考提案解決。FinalizationRegistry 將確保所有記憶體都被清除,無論它是否被明確釋放。請注意,明確釋放始終是一種可能性並且受到支援,但是如果沒有呼叫它,那麼如果偵測到 FinalizationRegistry 支援,記憶體仍將自動釋放。