HVM:Rust編寫的比Haskell GHC更好的執行時
Haskell程式設計師可能會發現 HVM 專案非常有趣:高階虛擬機器 (HVM)是一個純函式式編譯目標,它是惰性的、非垃圾收集的和大規模並行的。
它也是 beta 最優的,這意味著在某些情況下,它可以比大多數函式執行時(包括 Haskell 的 GHC)快得多。
這得益於一種新的計算模型,即互動網路,它結合了圖靈機和 Lambda 演算。該模型的先前實現在實踐中效率低下,但是最近的一項突破大大提高了其效率,從而催生了 HVM。儘管是一個原型,但它在許多情況下已經擊敗了成熟的編譯器,並且將朝著未知的效能水平擴充套件。
與 GHC 相比,HVM 有兩個主要優勢:自動並行性和 beta 最優性。
類似於 LLVM,但適用於函式式語言,隨著 AMD 釋出 128 核 CPU,這種方法似乎很可能會在未來長期有效。
突破點:
- 一種緊湊的記憶體格式,避免了儲存一堆指標,本質上是將佔用空間減半。例如,lambdas不需要一個指向其父類的指標。這聽起來說起來容易做起來難。弄清楚什麼時候需要指標,什麼時候不需要指標是非常具有挑戰性的。Fan nodes 需要2個或3個指標,這取決於它們的位置。Lambdas 需要他們的變數指向他們,而這必須始終保持同步。另外,也不清楚什麼時候應該停止減少。但所有這些事情最後都有了合理的解決方案。
- 透過使用者定義的方程來實現函式比透過Y-組合器Y-combinators和λ-編碼 λ-encodings要有效得多,因為你不需要重複複製sabe big body 。這就省去了很多改寫的工作,這也有很大的幫助。
存疑:當一個共享值被釋放時,它將以不影響其他共享值的方式從被丟棄的值中釋放盡可能多的記憶體。
見這示意圖:第一個示例顯示了一個未共享的 GC 列表。在這種情況下,它只是被完全釋放(黃色圈出的區域)。第二個示例顯示了一個共享的 GC 列表。在這種情況下,僅釋放特定於丟棄副本的節點。
好像不是一種非常專業的引用計數形式,計數只能是 2、1 和 0。
專案點選標題
相關文章
- Youki:用 Rust 編寫的更快Docker容器執行時RustDocker
- 編寫更好的CSSCSS
- Rust是如何用Rust編寫的? - RedditRust
- 【譯】如何更好的編寫CSSCSS
- 編寫更好的CSS程式碼CSS
- 用 Haskell 編寫 CEK 風格的直譯器Haskell
- 如何更好的編寫async函式函式
- 編寫更好的C#程式碼C#
- 編寫高效的執行緒安全類執行緒
- 編寫更好的jQuery程式碼的建議jQuery
- 用jQuery編寫出更好的程式碼jQuery
- 編寫更好程式碼的 6 個提示
- ekzhang/rustpad:使用Rust編寫的高效程式碼編輯器Rust
- 只需 5 分鐘,教你如何編寫並執行一個 Rust + WebAssembly 程式RustWeb
- 使用正規表示式編寫更好的 SQLSQL
- 使用正規表示式編寫更好的SQLSQL
- 用Java編寫更好的不可變DTO的技巧 - SebJava
- 編寫執行R指令碼指令碼
- 如何編寫及執行JSJS
- Rust編寫的新終端多路複用器Rust
- 編寫更好 Bash 指令碼的 8 個建議指令碼
- 用Rust編寫的快如閃電的程式碼編輯器:lapceRust
- 編寫更好的 Java 單元測試的 7 個技巧Java
- 編寫執行緒安全的JSP應用程式執行緒JS
- 請教一個多執行緒編寫的題!執行緒
- locutus:用Rust編寫的去中心化平臺Rust中心化
- 使用Rust編寫的各種遊戲 - GameDev#28Rust遊戲GAMdev
- lr計算程式執行消耗時間的比較:
- crontab 每隔 1 小時 2 小時的執行 job 寫法
- 基於MFC的編寫執行緒快速入門 (轉)執行緒
- 編寫隨Windows啟動自動執行的程式 (轉)Windows
- Rust的併發執行緒 - ibraheemRust執行緒
- 編寫程式/執行緒監視器執行緒
- 【譯】編寫更好JavaScript條件語句的5個技巧JavaScript
- ChiselStore:Rust編寫的Raft分散式SQLite資料庫RustRaft分散式SQLite資料庫
- doyoubi/undermoon:Rust語言編寫的Redis叢集方案RustRedis
- Pingora:替代Nginx、Rust編寫的HTTP伺服器GoNginxRustHTTP伺服器
- job中執行帶有引數的procedure 時的寫法