最近發布在swift-evolution郵件雜志上的《Swift ABI穩定性宣言》旨在匯編所有需要解決的問題,然后宣布Swift ABI具有穩定性。
《Swift ABI穩定性宣言》的作者——蘋果公司工程師Michael Ilseman寫道,ABI穩定性的目標包含以下兩個主要部分:
定義一個模塊文件,這個模塊文件包含了Swift編譯器關于把公共框架的API與在運行時加載的可執行代碼捆綁在一起的描述的標準化表示。 定義一系列影響低級別細節的約定,例如如何調用函數,如何在內存中表示數據和元數據等。Ilseman特別指出需要致力于以下六個方面:
數據布局,主要是定義如何在內存中布置struct和class實例。 類型元數據,要求有特定的內存布局或API查詢。 name mangling,主要是定義編譯器如何分別標識外部符號,例如類型和函數。 函數調用約定,主要是定義如何將參數傳入/傳出函數,以及該保留哪些寄存器等。 Swift runtime,主要是提供動態轉換、引用計數、反射等的基本機制,屬于ABI的一部分。 標準庫,它的API是ABI的一部分,應用程序和庫都會調用它。ABI穩定性是Swift 4計劃的優先級最高的功能之一,對第三方框架開發人員至關重要。正如InfoQ報道所指出,Swift 3因為無法定義鎖定ABI之前需要定義的一些方面,所以沒有實現ABI的穩定性。在最近的Accidental TechS播客采訪中,前蘋果工程師兼Swift創始人Chris Lattner表示,ABI穩定性對于應用程序開發人員來說并不重要,但“對蘋果公司來說非常重要”,并且它是公司內部采用Swift的關鍵因素:
要真正地在蘋果公司全面采用Swift,Swift團隊必須實現一些特定目標。ABI穩定性是阻止框架開發人員采用Swift的首要因素。這是一件非常重要的事情,也是ABI穩定性總是排在很高優先等級的原因之一。
實際上,目前仍然不完全清楚Swift 4 ABI是否能被宣稱為具有穩定性。Lattner說,這可能受兩個因素的影響,它們是ABI穩定性包含的工作量以及它可能不是Swift社區最重要的事情。
如果他們什么時候決定專注于Swift 4中其他比ABI穩定性更重要的方面,我也不會感到驚訝。
Lattner指出了一些Swift社區中排在更高優先級別的問題:比如使編譯器更具可靠性,更準確的錯誤提示,加快編譯速度,以及使Swift更適用于大型項目。
查看英文原文:The Road to Swift 4 ABI Stability