Rust的零成本抽象 - Daniel Lin
零成本抽象:抽象在執行時沒有任何成本,只在編譯時。
要做到Zero-Cost Abstractions 其中一個手段就是generic 的單態化 讓我們直接來看 Monomorphization:
fn add<T: std::ops::Add<Output = T>>(a: T, b: T) -> T { a + b } fn main() { let a = add(1, 2); let b = add(1.1, 2.2); println!("a: {}, b: {}", a, b); } |
第一個add 跟第二個add 其實是不同的函式。
這個Add函式 的泛型generic 在編譯compile 時期就將Add 變成了兩個函式去呼叫,而不是在程式執行的時候才去決定要用什麼函式,不佔用到runtime的時間,這也就達成了zero-cost abstraction,當然這樣的trade-off 就是rust 在compile 時期會花的時間較多,換取執行時的效能。
不過, rust 編譯時間比較長並非只有這個原因,可以從playground 的compile option 這個地方看到rust compile 要經過非常多的步驟,整個流程Rust Code -> HIR -> MIR -> LLVM IR -> ASM
而單態化只是MIR 到LLVM IR 處理的其中一塊,還有非常多像是:展開Macro, type check, life-time check 等,都會佔用一些compile 的時間。
原文點選標題
相關文章
- Rust中的零成本抽象簡介Rust抽象
- 本週精彩:Rust何時能實現零成本並行?Rust並行
- Daniel Powter: Free LoopOOP
- Daniel Steckly:休閒遊戲與硬核遊戲之間並非零和競爭遊戲
- Rust語言之GoF設計模式:抽象工廠模式RustGo設計模式抽象
- 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重複的抽象抽象
- 從零開始的Java程式設計之抽象與介面Java程式設計抽象
- 開源 | 攜程度假零成本微前端框架-零界前端框架
- 怎麼樣零程式碼零成本搭建個人網站?網站
- 雷軍:按成本價零售產品是小米模式的核心模式
- Flutter 零成本搭建個人小部落格Flutter
- 零成本入門車聯網安全研究
- 介面的行為抽象和抽象類的行為抽象抽象
- 抽象類、抽象欄位、抽象方法抽象
- RUST 在linux 系統的安裝RustLinux
- C 還是 Rust:選擇哪個用於硬體抽象程式設計Rust抽象程式設計
- 小白福利,零成本,配置小程式前後端後端
- rustyline 介紹Rust
- Rust for Linux 新補丁:為 Linux 核心增加對 Rust 作為第二語言的支援RustLinux
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- Kubernetes故障排除的直觀指南 - Daniele Polencic
- Daniel Bryant:平臺工程是新的DevOps或SREdev
- 抽象的力量抽象
- Kotlin基礎:抽象屬性的應用場景Kotlin抽象
- 【譯】探索Kotlin帶來的隱性成本(一)Kotlin
- 抽象方法和抽象類抽象
- 抽象類和抽象方法抽象
- [Rust] Dealing with Vec modificationRust
- Linux之父: Rust 將進入 Linux 6.1LinuxRust
- Java中的抽象Java抽象
- K8s中的排程程式是如何工作的? - danieleK8S
- PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- 地理服務零成本:免費地圖 API 合輯地圖API
- java抽象類和抽象方法Java抽象
- Linux 和 Java 的零複製LinuxJava
- Linux 和 Java 的零拷貝LinuxJava
- 軟體架構師應避免的7種行為 - Daniel Watts架構TTS
- 抽象抽象