前言
譯者言:周日立冬,北方多地迎來 2021 年的第一場雪,上海也降下大雨,此時你所在的城市降溫了嗎?記得添衣保暖,避免感冒生病影響工作和生活。
Xcode 13.2 Beta 版已具備并發支援,該特性将有助于解決很多 Swift 開發者的某些痛點。或許 Swift 内置的并發系統最重要的好處是,它允許以更簡單的方式,并行執行多異步任務。可以想像,通過增加執行任務的速度這将節省我們更多時間。
Kristaps Grinbergs Swift 周報負責人在本期周報中公開自己将不再上司 Swift 周報項目,原文如下:
我非常高興地編寫這麼優秀并且已經營運了三年的 Swift 新聞周報。我遇到了很多了不起的人,并且感謝你們所有人,我已經收獲了很多! 這是為什麼打出下面這句話,讓我感慨萬千的原因。第 200 期周報将是我營運的最後一期。我已經決定不再上司這個項目,并且懷着愉悅的興奮,我正在尋找願意繼續管理 Swift 周報的人。
為了 Swift 社群周報持續穩定的釋出更新,我們希望邀請 Swift 愛好者參與周報編輯,同時邀請贊助商對我們平台贊助支援。
入門任務
SR-15408 [Swift-DocC] 用含有空格的回調顯示名稱建構文檔會産生一篇無法閱讀的文章
譯者注: 如果将帶有空格的回調顯示名稱(如 --fallback-display-name "My Display Name")以及有效的符号圖傳遞給 DocC,DocC 會生成一篇以“我的顯示名稱”作為 H1 的文章标題并将其組織在頂級架構頁面上的“文章”主題組下。
新聞和社群
新的 Xcode 13.2 Beta 增加了對 macOS 10.15、iOS 13、tvOS 13 和 watchOS 6 或更高版本的 Swift 并發支援。 這種支援包括async/await、actor、全局 actor,結構化的并發及其任務 API。
Tim Condon 釋出了 Vapor 已經支援 async/await。
Konrad ktoso Malawski 寫了一篇介紹 Swift Distributed Actors 的文章。
Marc Aupont 将加入 Diversity in Swift 工作組。
Swift 下載下傳連結已移至新位置以提供更快的下載下傳速度! 工具鍊将托管在 download.swift.org,它将使用與目前 URL 類似的模式。 要使用新 URL,請将 swift.org/builds/ 替換為 download.swift.org/。 從 2021 年 10 月 26 日開始,swift.org/builds URL 已重定向到新的子域。
Sarun Wongpatcharapakorn 寫了一篇博文解釋 Swift 中的 KeyPath。
Commits 和 pull requests
Erik Eckstein 合并了一個 pull request,該請求實作了性能注釋的原型,如 Swift 中的 @_noLocks 和 @_noAllocation。
Slava Pestov 合并了一個 pull request,該請求改進了對“身份一緻性”的處理 [P].[P] => [P]。
John McCall 合并了一個 pull request,該請求修複了高度對齊的結果類型的未來片段的對齊方式
同意的提案
SE-0325 附加包插件 API 提案已被修改并同意。
正在審查的提案
SE-0326: 多語句閉包參數/結果類型推斷正在審查中.
Kristaps Grinbergs 建議通過啟用閉包體的參數和結果類型推斷,來改進多語句閉包推斷行為。 這将令類型推斷更符合開發者的預期,并且移除現存的行為壁壘,即向閉包添加一個表達式或語句會導緻編譯失敗的結果。
SE-0327: On Actors and Initialization正在審查中。
Actors 是 Swift 中相對較新的名義類型,為其可變态提供了資料競争安全性。資料保護是通過将每個 actor 執行個體可變狀态一次最多隔離一個任務來實作的。引入 actor(SE-0306)的提案非常龐大和詳細,但忽略了建立和銷毀 actor 隔離狀态的一些細微之處。 該提案旨在支援一個 actor 的定義,為了弄清一個 actor 執行個體的資料隔離何時開始和結束,以及在一個 actor 的 init 和 deinit 函數聲明中能夠做什麼。
SE-0328:Structural opaque result 類型正在審查中。
Opaque 結果類型可以用作函數的結果類型、變量的類型或者下标的結果類型。在所有情況下, Opaque 結果類型必須是整個類型。該提案建議解除該限制,并且在“結構性”的位置中允許使用 Opaque 結果類型。
Swift 論壇
I
一個來自 @justkwin 關于 Foundation 如何使用 URL 結束來表示 file.paths 的小曆史教訓。
II
Anders Bertelrud 提出了添加包管理器指令插件的提案。
SE-0303 引入了第一種 SwiftPM 插件,專注于使用自定義建構工具調用擴充建構系統的能力(特别是為了生成源代碼)。 那些插件一直計劃成為第一種被 SwiftPM 支援的插件。
Kristaps Grinbergs 想提出一個提案草案,為 SwiftPM 添加另一種更通用目的的“指令插件”。 這些類型的插件可以由使用者直接調用,用于源代碼格式化、文檔生成、測試報告生成等。指令插件不一定與建構系統有任何關系。
這些自定義指令插件一個重要的方面是它們可以要求插件主機(SwiftPM 或支援包的 IDE)按需生成專門的資訊,或着初始化建構或測試運作。 這是提案草案中最需要仔細審查的部分。 在使 API 足夠豐富以令其盡可能有用,同時也使其足夠通用以不僅在 SwiftPM 中而且 IDE 中支援 Swift 包,這裡有一個相悖的因素。
III
Guillaume Lessard 提出了一項提案,該提案将實作指針族初始化改進。
UnsafeMutablePointer 系列中的類型通常需要手動管理記憶體配置設定,包括對其初始化狀态的管理。 涉及的狀态是在配置設定後:
- 未綁定和未初始化時(當在UnsafeMutableRawPointer.allocate() 傳回)
- 綁定到一個類型,并且未初始化(從UnsafeMutablePointer<T>.allocate() 傳回)
- 綁定到一個類型,并且初始化
無論何時它未曾被初始化,記憶體都能夠安全地銷毀。
不幸的是,不是每一個 UnsafeMutablePointer 系列中的類型有這個必要功能,以用于全面管理它記憶體初始化的狀态。 我們打算在本提案中解決這個問題,并提供在各種更廣泛的情況下管理初始化狀态的功能。
IV
Kelvin Ma 展開了一個關于 AsyncStream 構造函數的讨論,該構造函數也傳回其 Continuation。
有沒有什麼方法我們可以向 AsyncStream 添加一個 API,它直接傳回 Continuation,進而我們就不必把它的閉包“調來調去”?
一般來說,我也覺得 AsyncStream 真的很難使用,因為疊代在建立了 AsyncStream 的同一個任務中發生,甚至是沒有并發疊代時曾出現。 這使“訂閱” actor 對象生成的事件變得困難,即使訂閱方法被标記為 nonisolated。
V
Adam Fowler 積極将 MQTTNIO 庫加入 SSWG 包清單中.
MQTT 是一種通常用于與 IoT(物聯網)裝置進行通信的消息傳遞協定。 它是一種輕量級的釋出/訂閱消息傳輸,旨在具有較小的代碼占用空間和網絡帶寬。
VI
Cory Benfield 向我們更新了關于 SwiftNIO Swift 版本支援。
SwiftNIO 團隊已将其作為我們工作流程的主要支柱,以嘗試在相當長的時間内支援 Swift 版本。大多數使用者沒有利用這一點,更願意繼續使用最新版本的 Swift,但我們認為重要的是你要有信心,新編寫的應用程式将在未來獲得一些有意義的支援。
VII
Victoria Mitchell 寫了一篇關于擴充 Swift-DocC 以支援 Objective-C 的文檔。
DocC 的架構目前僅支援 Swift 一個語言的渲染符号文檔。然而,有些跨語言項目可以從将多個“語言變體”收集到同一組文檔中受益,例如可以被 Swift 中調用的 Objective-C API,反之亦然。
關于我們
我們是由 Swift 愛好者共同維護,我們會分享以 Swift 實戰、SwiftUI、Swift 基礎為核心的技術内容,也整理收集優秀的學習資料。