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
- 如何更好的編寫async函式函式
- 只需 5 分鐘,教你如何編寫並執行一個 Rust + WebAssembly 程式RustWeb
- 編寫執行緒安全的JSP應用程式執行緒JS
- 用Java編寫更好的不可變DTO的技巧 - SebJava
- 如何編寫及執行JSJS
- JavaScript 編寫和執行方法JavaScript
- Rust編寫的新終端多路複用器Rust
- 執行時框架,編譯時框架框架編譯
- ekzhang/rustpad:使用Rust編寫的高效程式碼編輯器Rust
- 用Rust編寫的快如閃電的程式碼編輯器:lapceRust
- Rust的併發執行緒 - ibraheemRust執行緒
- Pingora:替代Nginx、Rust編寫的HTTP伺服器GoNginxRustHTTP伺服器
- locutus:用Rust編寫的去中心化平臺Rust中心化
- crontab 每隔 1 小時 2 小時的執行 job 寫法
- golang編寫程式時,shell在子目錄批量執行go mod tidyGolang
- 【譯】編寫更好JavaScript條件語句的5個技巧JavaScript
- 「譯」編寫更好的 JavaScript 條件式和匹配條件的技巧JavaScript
- 使用Rust編寫的各種遊戲 - GameDev#28Rust遊戲GAMdev
- ChiselStore:Rust編寫的Raft分散式SQLite資料庫RustRaft分散式SQLite資料庫
- doyoubi/undermoon:Rust語言編寫的Redis叢集方案RustRedis
- 用Rust編寫的資料庫GreptimeDB現開源Rust資料庫
- 比cat更好用的命令!
- 比df更好用的命令!
- Wez:Rust編寫的類似Powershell的終端模擬器Rust
- 殺死Haskell的人也可能殺死Rust · GitHubHaskellRustGithub
- 在Vue.js編寫更好的v-for迴圈的6種技巧Vue.js
- 使用 Rust + WebAssembly 編寫 crc32RustWeb
- 使用Python編寫一個多執行緒的12306搶票程式Python執行緒
- Rust編寫的Memcached快取替代品:memc.rsRust快取
- Aero:用rust編寫的新現代作業系統Rust作業系統
- lemmy:Rust編寫的fediverse連結聚合器和論壇Rust
- Automata Network用Rust編寫的去中心化的服務協議Rust中心化協議
- liunx進行 idea java 執行時反彙編IdeaJava
- Rustyinject是Rust的編譯時依賴注入DI庫Rust編譯依賴注入
- xmake v2.6.1 釋出,使用 Lua5.4 執行時,Rust 和 C++ 混合編譯支援RustC++編譯