簡體   English   中英

“零成本抽象”是什么意思?

[英]What does 'Zero Cost Abstraction' mean?

我在探索 Rust 時遇到了這個術語。

我看到了關於這個的不同類型的解釋,但仍然不太明白。

嵌入式 Rust 書中,它說

類型狀態也是零成本抽象的一個很好的例子

  • 移動某些行為以編譯時執行或分析的能力。

這些類型狀態不包含實際數據,而是用作標記。

由於它們不包含數據,因此它們在運行時在 memory 中沒有實際表示:

這是否意味着運行時更快,因為運行時沒有 memory?

如果有人可以以易於理解的方式解釋它,請欣賞它。

零成本抽象意味着添加更高級別的編程概念,如 generics、collections 等不帶來運行時成本,只有編譯器時間成本(代碼編譯速度會更慢)。 零成本抽象上的任何操作都與您使用較低級別的編程概念(for 循環、計數器、ifs 等)手動編寫匹配功能一樣快。

零成本抽象是在執行速度或 memory 使用方面不承擔運行時成本的抽象。

相比之下,虛方法是高成本抽象的一個很好的例子:在許多 OO 語言中,方法調用者的類型是在運行時確定的,這需要維護一個查找表(運行時 memory 用法),然后實際執行查找(每個方法的運行時開銷)調用,可能至少是一個額外的指針取消引用)與運行時類型來確定調用哪個版本的方法。 另一個很好的例子是垃圾收集:作為回報,您不必擔心您通過 GC 暫停支付的 memory 分配的細節。

Rust 雖然主要嘗試實現零成本抽象:讓您擁有蛋糕並吃掉它的抽象。 編譯器可以安全且正確地轉換為不承擔額外間接/內存使用的 forms 的那些。 事實上,我知道的唯一一件事(如果我錯了,有人會糾正我)你在運行時在 Rust 中真正付出的代價是邊界檢查。

零成本抽象的概念最初來自功能世界。 但是,該術語來自 C++。 根據 Bjarne Stroustrup 的說法,

通常,C++ 實現遵循零開銷原則:不使用什么,就不用付費。 更進一步:你使用的東西,你不能更好地編寫代碼。

這句話以及大多數答案都未能完整地傳達這個想法,因為沒有明確說明這些內容的上下文。

如果世界上只有一種編程語言:無論是 Rust 還是 C++,零成本抽象將與大多數其他編譯器優化沒有區別。 這里的含義是,有無數其他語言可以讓你做與 Rust 或 C++ 相同的事情,但成本不為零,而且通常是特定於運行時的成本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM