Swift 5預(yù)計(jì)將于2018年發(fā)布,Swift 5將會(huì)帶來更好的ABI穩(wěn)定性,并將進(jìn)一步關(guān)注API彈性(resilience)和內(nèi)存所有權(quán)(memory ownership)。新的演進(jìn)過程將有助于確保Swift 5將開發(fā)重點(diǎn)放在其既定目標(biāo)上。
ABI穩(wěn)定性在早先的Swift發(fā)布版本中被推遲之后,目前已經(jīng)成為Swift 5中一個(gè)必要的功能。Apple工程師、Swift維護(hù)者Teb Kremenek這樣寫道:“對于第三方框架開發(fā)人員來說,ABI穩(wěn)定性是至關(guān)重要的,并且為了擴(kuò)大Swift在Apple公司內(nèi)部的使用范圍,ABI穩(wěn)定性的實(shí)現(xiàn)不能再被推遲了,并且它將會(huì)成為Swift 5的重中之重?!比欢?,Swift 5對ABI穩(wěn)定性的官方定義不包括模塊穩(wěn)定性,模塊穩(wěn)定性被認(rèn)為是一個(gè)難以達(dá)成的目標(biāo),可能不會(huì)出現(xiàn)在下個(gè)版本的Swift語言中。模塊穩(wěn)定性涉及到模塊文件的格式,它定義了編譯器是如何表示框架中的公共接口的。因此,只有當(dāng)開發(fā)代碼依賴于一個(gè)二進(jìn)制模塊并且其不可用性不會(huì)影響到運(yùn)行時(shí)加載共享庫的時(shí)候,模塊穩(wěn)定性才是必需的。為了讓ABI穩(wěn)定性可控,必須要確定出一些底層實(shí)現(xiàn)的細(xì)節(jié),其中包括標(biāo)準(zhǔn)庫中所使用的通用特性,如條件性符合(conditional conformances)以及協(xié)議遞歸約束(recursive protocol requirements);API彈性,確保庫API能夠在保持其ABI穩(wěn)定性的同時(shí)進(jìn)行演進(jìn);另外還有內(nèi)存所有權(quán)(memory ownership)。
Swift 5另外一個(gè)主要目標(biāo)是源穩(wěn)定性(source stability),這使得Swift 5編譯器能夠接受使用之前版本的Swift編寫的代碼。為此,只有當(dāng)滿足以下三種情況時(shí),才會(huì)接受源代碼的更改:當(dāng)實(shí)際語法很明顯會(huì)引發(fā)問題時(shí);當(dāng)新語法明顯更好時(shí);當(dāng)存在現(xiàn)有代碼自動(dòng)遷移路徑時(shí)。源穩(wěn)定性將會(huì)支持Swift 4的代碼,也有可能支持Swift 3的代碼。
對于字符串人機(jī)工程學(xué)(string ergonomics)領(lǐng)域的額外改進(jìn)也被列入計(jì)劃,它可以使字符串更易于使用,除此之外,還有對標(biāo)準(zhǔn)庫的改進(jìn),它為新的并發(fā)模型奠定了基礎(chǔ)。
最后但同樣重要的是,Swift 5的演進(jìn)過程已經(jīng)被重新定義,避免過多的演進(jìn)提案對ABI穩(wěn)定性的專注度造成影響。特別是從2018年3月1日起,每個(gè)新提案都需要一個(gè)可行的實(shí)現(xiàn),其中包括測試用例。缺少可行實(shí)現(xiàn)的提案也可以被提交,但是不會(huì)被審查通過。
查看英文原文:Swift 5 Sets its Goals, Defines New Evolution Process