HVM:Rust編寫的比Haskell GHC更好的執行時

banq發表於2022-03-21

Haskell程式設計師可能會發現 HVM 專案非常有趣:高階虛擬機器 (HVM)是一個純函式式編譯目標,它是惰性的、非垃圾收集的和大規模並行的。
它也是 beta 最優的,這意味著在某些情況下,它可以比大多數函式執行時(包括 Haskell 的 GHC)快得多。
這得益於一種新的計算模型,即互動網路,它結合了圖靈機和 Lambda 演算。該模型的先前實現在實踐中效率低下,但是最近的一項突破大大提高了其效率,從而催生了 HVM。儘管是一個原型,但它在許多情況下已經擊敗了成熟的編譯器,並且將朝著未知的效能水平擴充套件。
與 GHC 相比,HVM 有兩個主要優勢:自動並行性和 beta 最優性。
類似於 LLVM,但適用於函式式語言,隨著 AMD 釋出 128 核 CPU,這種方法似乎很可能會在未來長期有效。
突破點:
  1. 一種緊湊的記憶體格式,避免了儲存一堆指標,本質上是將佔用空間減半。例如,lambdas不需要一個指向其父類的指標。這聽起來說起來容易做起來難。弄清楚什麼時候需要指標,什麼時候不需要指標是非常具有挑戰性的。Fan nodes 需要2個或3個指標,這取決於它們的位置。Lambdas 需要他們的變數指向他們,而這必須始終保持同步。另外,也不清楚什麼時候應該停止減少。但所有這些事情最後都有了合理的解決方案。
  2. 透過使用者定義的方程來實現函式比透過Y-組合器Y-combinators和λ-編碼 λ-encodings要有效得多,因為你不需要重複複製sabe big body 。這就省去了很多改寫的工作,這也有很大的幫助。

 
存疑:當一個共享值被釋放時,它將以不影響其他共享值的方式從被丟棄的值中釋放盡可能多的記憶體。
示意圖:第一個示例顯示了一個未共享的 GC 列表。在這種情況下,它只是被完全釋放(黃色圈出的區域)。第二個示例顯示了一個共享的 GC 列表。在這種情況下,僅釋放特定於丟棄副本的節點。
好像不是一種非常專業的引用計數形式,計數只能是 2、1 和 0。

專案點選標題

相關文章