rust所有按鍵 新版rust怎么保存家?
新版rust怎么保存家?對于C,C將內(nèi)存使用分為兩種情況:值對象和指針對象。如果值語義對象超出范圍,將自動調(diào)用析構(gòu)函數(shù)來銷毀它,并在傳遞或分配它時進行復(fù)制。指針語義由人肉管理,或者使用智能指針進行引用
新版rust怎么保存家?
對于C,C將內(nèi)存使用分為兩種情況:值對象和指針對象。如果值語義對象超出范圍,將自動調(diào)用析構(gòu)函數(shù)來銷毀它,并在傳遞或分配它時進行復(fù)制。指針語義由人肉管理,或者使用智能指針進行引用計數(shù)。在傳輸賦值中復(fù)制值對象是浪費的,所以C后來有了一個move構(gòu)造函數(shù)。移動值后,關(guān)聯(lián)的數(shù)據(jù)將移動到新值。生銹是干什么的?在C語言的基礎(chǔ)上進一步優(yōu)化了Rust,Rust對象具有一個所有者和多個引用。Rust只允許值有一個所有者。傳遞和分配值將導(dǎo)致所有權(quán)移動。它看起來像C_PTR的唯一性,但實際上更像C的移動語義。換句話說,C copy是隱式的,move是顯式的,rust move是隱式的。當然,rust在這里對編譯器進行靜態(tài)分析,沒有運行時開銷。在許多地方,我們不想改變價值觀。我們只是借用一下。Rust引入了引用的概念來表示指針語義。一個常見的內(nèi)存問題是指針指向一個無效的內(nèi)存地址,但是rust沒有這個問題。rust編譯器強制您證明值的生存期大于其引用的生存期。有些編譯器不理解的東西需要添加生命周期標記來告訴編譯器。獲取引用是一個處理值的過程,這是非常嚴重的。rust的核心是在這里進行限制,以保證內(nèi)存的安全性。rust的局限性在于,盡管它具有復(fù)雜的所有權(quán)和生存機制,但在復(fù)雜的情況下,它必須回到引用計數(shù)。如果我們想要零開銷的抽象和內(nèi)存安全性,代價就是代碼可讀性差。所以世界上沒有免費的午餐。你不能兩者兼得。我們希望信任能夠增強生命周期的自動推理,減少人工標注。