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並行
- Rust語言之GoF設計模式:抽象工廠模式RustGo設計模式抽象
- 【抽象那些事】不完整的抽象&多方面抽象&未用的抽象&重複的抽象抽象
- 從零開始的Java程式設計之抽象與介面Java程式設計抽象
- Daniel Bryant:平臺工程是新的DevOps或SREdev
- 開源 | 攜程度假零成本微前端框架-零界前端框架
- 介面的行為抽象和抽象類的行為抽象抽象
- 怎麼樣零程式碼零成本搭建個人網站?網站
- 為什麼會辭去Netflix的45萬美元工作? - Lin
- PHP 抽象類繼承抽象類時的注意點PHP 抽象類繼承抽象類時的注意點PHP抽象繼承
- 抽象的力量抽象
- 零成本入門車聯網安全研究
- Flutter 零成本搭建個人小部落格Flutter
- C 還是 Rust:選擇哪個用於硬體抽象程式設計Rust抽象程式設計
- [20200309]rlwrap: error: Cannot execute sqlplus: Too many levels of symbolic linErrorSQLSymbol
- CAN(FD)/LIN網路開發諮詢服務
- G016-OS-LIN-CENT-01 CentOS 7.8.2003 安裝CentOS
- 軟體架構師應避免的7種行為 - Daniel Watts架構TTS
- 抽象方法和抽象類抽象
- 小白福利,零成本,配置小程式前後端後端
- Java中的抽象Java抽象
- 抽象抽象
- Java的抽象類 & 介面Java抽象
- 我對抽象的理解抽象
- 通用查詢的抽象抽象
- 辦公成本也是一個很大的成本
- 地理服務零成本:免費地圖 API 合輯地圖API
- curl 作者 Daniel Stenberg 計劃:將為 curl 新增原生支援 JSONJSON
- java抽象Java抽象
- 抽象合集抽象
- 抽象類抽象
- 印萌自助列印系統,零成本實現降本增效
- Java —— 流的抽象基類Java抽象
- 成本僅100美元的鐳射雷達:這個專案教你零基礎DIY
- 26. 乾貨系列從零用Rust編寫正反向代理,如何釋出Rust專案到DockerRustDocker
- 為什麼說DeFi是真正新的借貸P2P平臺? -daniel
- Rust是如何用Rust編寫的? - RedditRust