Rust 裡的 Box 指標被稱作 affine type,請問 affine type 是什麼?

時間 2021-06-01 03:51:42

1樓:

題主看的是Rust Book第一版,客觀來說,這本書內容組織上比較混亂。

就拿題主碰到的這個問題來說,這裡提到Box是一種affine type,其實它應該在講所有權的時候就應該先解釋一下,但它並沒有。

然後放到Box章節突然多了乙個affine type,讓人雲裡霧裡。其實他想說的意思是:

「Box是獨佔所有權的」

話說回來,affine type屬於型別理論中子結構型別系統(Substructural Type Systems)的概念。子結構型別系統又是子結構邏輯(Substructural Logic)在型別系統的應用。而子結構邏輯是屬於證明理論裡的推理規則,其規則包含:

線性邏輯(Linear Logic)

仿射邏輯(Affine Logic)

其他子結構邏輯規則,用於推理。它的特點是不需要具體的邏輯符號,光靠結構來推理相關邏輯(大白話解釋)。怎麼理解?

線性邏輯表示,如果某個變數符合某種特定的「結構」,它就內含一種規則:最多只能使用一次,也就是說,可以使用0次或1次。

仿射邏輯和線性邏輯是類似的,但它的規則是,必須且只能使用1次。看上去比線性邏輯更嚴格一下。

所以,對應用型別系統那就是:

線性型別(Linear Type)

仿射型別(Affine Type)

而Rust作為現代程式語言,主打記憶體安全,眾所周知的就是它的所有權機制。它利用型別系統來完成這一目標。

來看乙個示例:

fnmain

()", a); // a 已經被move,這裡無法再次使用

}以上例子,變數a獨佔所有權,所以在let b = a執行完以後,a的所有權就會轉移給b,再次使用變數a的話,就會報錯。

利用仿射型別,Rust實現了所有權機制,在需要move的時候自動move,維護了記憶體安全。

我想這大概可以解釋清楚了吧。

2樓:Gangqiang

就是乙個指標,

而這種指標是指向堆(heap)上的記憶體的,而不是棧(stack)上的記憶體

BTW,

Rust把C中的指標分為n好幾種型別的

什麼樣的遊戲能被稱作青春?

肉絲秀忒 14年和朋友在300搞14黑對撞。12年起在艾爾之光認識眾多朋友。今年4月份入坑ff14給自己帶來很多感動。每個人經歷過的事情不同,總有人說這款遊戲多爛多無聊,但喜歡這個遊戲的人比比皆是,能留下這批老玩家肯定也有其中的緣由。 基督山伯爵 每個人的青春是會被不同遊戲填充的,我覺得我的青春就是...

怎樣才能被稱作是美觀的排版?

小私語 個人覺得單純段落進行排版真就沒什麼好說的了總的來說我們排報紙的時候是這樣的 簡潔大氣就算美觀 至於字型 一般就是報宋宋體標題多為黑體宋體類 詼諧一點不那麼重要的可以用楷體魏碑體等 其實沒有特別的要求 字型大小不要太小就行小六六五小五 現在的報紙流行留白比較多 看起來會比較舒服以上 不懂印刷,...

《華嚴經》為何被稱作富貴的經?

普波居士 高僧傳中記載 唐太宗問隱士孫思邈 佛經以何經為大?孫曰 華嚴經為諸佛所尊大。帝曰 近玄奘三藏,譯大般若經六百卷,何不為大,而六十卷華嚴經獨得大乎?孫曰 華嚴法界,具一切門,於一門中,可演出大千經卷,般若經乃華嚴宗一門耳。太宗乃悟,乃受持華嚴。又蓮池大師也說 華嚴見無量門,諸大乘經,猶華嚴無...