能明確地把 Rust 管理記憶體方式歸於隱式,同時把 C 管理記憶體方式歸於顯式嗎?

時間 2021-05-11 20:33:19

1樓:dc lin

BS說過,乙個語言如果不夠複雜,那是因為應用還不夠多。

C++為了適應最基本的簡單硬體的使用,肯定不能在記憶體的控制裡搞太複雜,基本上除了RAII外沒什麼內建的管理記憶體的方式,所以把其視為顯式也是正常的。

2樓:

rust 在alloc stable 前也可以手工管理記憶體啊,都不用 unsafe,利用 vec::new 和 forget 就行,當然要做到非pod物件,還得靠 unsafe 並且沒有stablized 的 inplace new。

另外 Box 從嚴格意義上講,對 rust 來說可能並不算是智慧型指標(區別於arc/rc),雖然它有點像 unique_ptr,它是 rust 的所有權概念的產物。

3樓:

這裡面其實有兩個維度:

第乙個維度是記憶體分配。而這個維度又包含兩個層次:

乙個層次是:語法/語義的層次,開發者使用Box等智慧型指標來分配堆記憶體。如題主所說,是隱式分配。

另外乙個層次是:開發者可以替換底層的堆記憶體分配器。比如jemalloc替換為System或tcmalloc。

Box等智慧型指標具體分配記憶體還是得依賴底層的記憶體分配器,也就是題主認為的顯式分配,(https://

doc.rust-lang.org/std/a

lloc/index.html

),而這個是底層的記憶體分配介面。你使用Box等分配記憶體,呼叫的就是底層的這個介面。

所以這兩個層次是包含和依賴關係。

第二個維度是Safe Rust和Unsafe Rust的分界。

Rust鼓勵你用Safe Rust。Safe Rust隱藏了很多髒活累活幫助你檢查程式中可能出現的錯誤。而Unsafe Rust,使用unsafe關鍵字和unsafe塊來隔離,但即便你用unsafe rust,也無法顯式分配記憶體。

所以,這裡其實不存在什麼「顯式分配」和「隱式分配」的涇渭,是壓根就不想讓你顯式分配。

另外我覺得用「顯式」和「隱式」來描述Rust和Cpp的記憶體管理差異,不夠精準。

你用Rust的Box,建立起了完整的語義,也可以認為它是一種顯式分配記憶體。更精準描述的話,應該是「手工分配」和「自動分配」比較好。

CPP屬於完全是手工分配,Rust屬於自動分配。

為何不將不同身份應該遵守的道德規範明確地寫下來?

不想寫 不想長篇大論的回答,很簡單。如果有哪個人能夠完整寫出適合於全人類的所有的道德規範標準,我服。就不說合不合理了,根本就沒有可操作性。再補充一下,明明能用法律來解決的問題,偏偏非要扯什麼道德規範,何必?公序良俗本來就是法律有的東西,好嗎! 書劍 道德規範正是因為其靈活多變,由特定群體共同接受的體...

為什麼我明確地感受到了我不需要任何東西,但我卻有想購買的慾望呢?

啊啊原來是醬紫啊 我以前也這樣,後來就不了,一方面因為隨著時間推移購物慾望減退,還有其他的東西分散了心神,另一方面,我是最主要的原因,窮。特別想買的太貴了,得攢錢。沒錢能減少很多慾望。男朋友也不想交了。沒興趣。 迷糊的迷糊 不然就是有錢任性 不然就是沒有目標,不知道自己真正需要什麼不需要什麼 不然就...

有哪些能深入淺出地把概率論或統計學的原理和應用說明白的書?

查理 以上提問是統計學的基本概念不清楚,統計學的發展史說明,先有變數後有隨機變數,先有社會統計學,後有數理統計學 社會統計學以變數為基礎,數理統計學以隨機變數為基礎,且變數與隨機變數是在一定條件下可相互轉化的數學概念 統計學的主要問題是變數與近似變數 近似變數問題是微積分的擴充套件 問題而不是隨機變...