Bronze垃圾收集器是否使 Rust 更易於使用?

banq發表於2021-12-10

Rust 是一種型別和記憶體安全的通用程式語言。Rust 不使用垃圾收集器,而是透過複雜但複雜的型別系統來實現這些屬性。這樣做使 Rust 非常高效,但使 Rust 相對難以學習和使用。
我們為 Rust 設計了 ​​Bronze,這是一個可選的、基於庫的垃圾收集器。
為了瞭解 Bronze 是否能讓 Rust 更有用,我們對來自 633 人班級的志願者進行了一項隨機對照試驗,總共收集了 428 名學生的資料。我們發現,對於需要管理複雜別名的任務,Bronze使用者更有可能在可用時間內完成任務,而完成任務的使用者只需要大約三分之一的時間(4 小時與 12 小時)。
論文點選標題。
 

網友討論
一個常見的謬誤是,Rust借用檢查器只是 GC 的替代品,其實這是謬誤,它不僅限於此:它可以為您提供 Java 或 Go 等無法提供的安全保證(沒有可變別名和資料競爭)。
 至少對我來說,這些額外的保證並沒有防止很多錯誤。特別是,我的程式碼很少受到資料競爭的影響:通常任何共享狀態都是一個檔案或網路資源,可以被多個主機上的多個程式訪問,而 Rust 的借用檢查器在這些方面沒有幫助,但我仍然需要付出成本(我知道生產力會隨著經驗而提高,但回報會迅速減少,而且明顯的共識似乎是 GC 和 BC 之間仍然存在很大的生產力差距)。
 
Rust如何在允許多個可變引用的同時獲得安全性?是透過強制執行單執行緒程式碼嗎?
是的,他們不試圖保證執行緒安全:
Rust 一次只允許一個對一個值的可變引用。為了獲得更大的靈活性,(標準)Rust 透過對物件的不可變引用來支援物件的內部變異 。程式設計師可以借用一個允許變異的值的特殊引用,並且執行時確保一次只能存在一個這樣的引用,從而可以安全地放鬆編譯時檢查。使用 Bronze,可以透過對每個垃圾收集物件的所有引用進行更改,無需額外工作。一個關鍵的權衡是 Bronze 不保證執行緒安全;與其他垃圾收集語言一樣,確保安全是程式設計師的責任。
 
聽起來這篇論文更多地是關於 Rust 中當前內部可變性 API 的可用性,而不是關於 GC。我可以證明,在 Rust 中獲取和使用內部可變性 API 非常困難。我很想看到更多關於如何更改這些 API 以提高其可用性的工作。

相關文章