弱參考支援

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

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

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

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