Swift內(nèi)存所有權(quán)宣言

責(zé)任編輯:editor006

作者:Sergio De Simone

2017-03-08 16:43:45

摘自:INFOQ

開發(fā)人員將可以定義一個變量是具有所有權(quán)的還是共享的,以避免在進(jìn)入或離開詞法作用域時引用計數(shù)和做不必要的拷貝 銷毀。宣言中為這一所有權(quán)模型定義所賦予Swift的全部特性給出了長篇的和詳細(xì)的分析,宣言的細(xì)節(jié)內(nèi)容仍非最終版本。

根據(jù)Chris Lattner介紹,Swift 4的主要目標(biāo)之一就是要定義一個類似于Rust/Cyclone的內(nèi)存所有權(quán)模型(Memory Ownership Model)。Chris Lattner是Swift的創(chuàng)建者,在跳槽到Tesla之前曾擔(dān)任Swift團(tuán)隊負(fù)責(zé)人。在Swift 4當(dāng)前已進(jìn)入第二階段的情況下,Swift團(tuán)隊發(fā)布了一個宣言,詳細(xì)闡明了Swift內(nèi)存所有權(quán)的工作方式。

Swift編譯器為確定所有權(quán)轉(zhuǎn)換的時機(jī),已實現(xiàn)了一種自己的不透明所有權(quán)模型(即ARC)。雖然所有權(quán)在一些情況下是很明晰的,但是編譯器也會在一些情況下做出錯誤假設(shè),進(jìn)而導(dǎo)致不必要的復(fù)制。簡而言之,Swift的新內(nèi)存所有權(quán)模型使得內(nèi)存復(fù)制盡可能地處于開發(fā)人員的控制之下。定義該模型在于盡量克服當(dāng)前寫時復(fù)制(copy-on-write)在引用計數(shù)方法上的不足之處,包括:引用計數(shù)的開銷及性能偶爾無法預(yù)測,以及為實現(xiàn)隨時可復(fù)制的需求而籠統(tǒng)地分配堆內(nèi)存。

雖然這些缺點(diǎn)通常對于應(yīng)用編程并不會構(gòu)成問題,但是對于那些需要一定性能保證的系統(tǒng)編程而言卻不受歡迎。此外,更靈活的內(nèi)存管理模型具有顯著優(yōu)點(diǎn),這些優(yōu)點(diǎn)同樣適用于應(yīng)用編程,去解決特定瓶頸問題的優(yōu)化。基于上述原因,與ARC相比,選取Swift的新內(nèi)存所有權(quán)模型無疑會更具優(yōu)勢,只有那些對更細(xì)化控制有需求的開發(fā)人員才需要承擔(dān)模型的復(fù)雜性代價。

“獨(dú)占性原則”(Law of Exclusivity)會影響到所有的Swift開發(fā)人員,這一更改并非可選擇添加的。它強(qiáng)制變量不能以沖突的方式同時訪問,典型情況包括變量作為inout參數(shù)傳入兩個不同函數(shù),以及方法所接收的回調(diào)訪問了方法所調(diào)用的同一變量。這兩種情況當(dāng)前在Swift中是允許的,移除他們無疑將會影響到所有的開發(fā)人員。此外,獨(dú)占性原則會更改對參數(shù)所做的保證,進(jìn)而影響到語言的應(yīng)用二進(jìn)制接口(ABI),因此它會成為被率先采用的特性之一。

除了獨(dú)占性原則之外,Swift還將引入新的標(biāo)注和語言特性,允許傳遞共享值以及表達(dá)無法隱式復(fù)制的類型。宣言的作者指出。在獨(dú)占性、顯示控制共享值傳遞和不可復(fù)制類型這三種機(jī)制的共同作用下,編譯器可以對代碼做更好的優(yōu)化。

簡而言之,可以將新Swift所有權(quán)模型的高層愿景概括如下:

如上所述,編譯器將會標(biāo)注所有非獨(dú)占性使用的inout參數(shù),無論是顯式的還是隱式的。

開發(fā)人員將可以定義一個變量是具有所有權(quán)的還是共享的,以避免在進(jìn)入或離開詞法作用域時引用計數(shù)和做不必要的拷貝/銷毀。

開發(fā)人員將可以定義moveonly(即不可拷貝)類型,該類型對編譯器不可復(fù)制,也不能用于創(chuàng)建更多的引用。moveonly類型具有move語義,被認(rèn)為是一種高級特性。除此以外,所有類型將默認(rèn)是可復(fù)制的。

宣言中為這一所有權(quán)模型定義所賦予Swift的全部特性給出了長篇的和詳細(xì)的分析,宣言的細(xì)節(jié)內(nèi)容仍非最終版本。Swift開發(fā)人員Alexis Beingessner發(fā)布了一篇更簡短的文檔,扼要地概括了宣言的要點(diǎn)。

查看英文原文: Swift Memory Ownership Manifesto

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號