天天看點

Swift 周報 第七期

前言

LeetCode 算法到目前我們已經更新了 5 期,我們會保持更新時間和進度,每期的内容不多,我們希望大家可以在上班路上閱讀,長久積累會有很大提升。

​​Xcode 13.2 beta​​ 中有一項新功能,可以通過使用更多 CPU 核心來加快建構速度。這個新的建構系統是可選的,是以你必須啟用它。

為了 Swift 社群周報持續穩定的釋出更新,我們希望邀請 Swift 愛好者參與周報編輯,同時邀請贊助商對我們平台贊助支援。

新聞和社群

Nicole Jacque 向我們介紹了 ​​Swift 5.6 釋出流程​​的最新情況。

Mishal Shah 通知我們​​更新了 swift:main 的 llvm-project 分支​​。

John Sundell 宣布了 ​​CollectionConcurrencyKit​​​ —— 一個輕量級的 Swift 包,他将所有符合 ​

​Sequence​

​​ 協定的 Swift 集合添加了标準 ​

​map​

​​、​

​flatMap​

​​、​

​compactMap​

​​ 和 ​

​forEach API​

​ 的異步和并發版本。

Steven Van Impe ​​在高等教育中引入了 Swift​​。

Mishal Shah 向我們通報了 Swift 項目的​​假期時間表​​。

Leonardo Maia Pugliese 寫了一篇文章​​解釋使用遞歸連結清單​​。

Antoine van der Lee 在部落格文章中​​解釋了 Swift 中的屬性包裝器​​。

同意的提案

SE-0326 ​​Multi-statement 閉包參數/結果類型推斷​​已被接受。

拒絕的提案

SE-0327 被拒絕​​重新進行修訂​​。

審查讨論集中在初始化模型的複雜性上,并發現了一個更簡單的模型,應該更容易推理。核心團隊已退回此提案進行修訂,以調查此新模型。感謝所有參與的人!

正在審查的提案

SE-0329: ​

​Clock​

​​, ​

​Instant​

​​, ​

​Date​

​​, 和 ​

​Duration​

​​ 正在​​審查中​​。

時間的概念可以分為三個不同的部分:

  1. 提供現在概念的項目以及在給定時間點後醒來的方式
  2. 時間點的概念
  3. 時間測量的概念

這三個項目分别是一個時鐘、一個瞬間和一個持續時間。時間測量可用于多種類型的 API,從進階網絡連接配接逾時概念到休眠任務的時間量。目前,測量時間類型的 API 使用 ​

​NSTimeInterval​

​​(又名 ​

​TimeInterval​

​​)、​

​DispatchTimeInterval​

​​,甚至 ​

​timespec​

​ 等類型。

Swift 論壇

I

Ilias Karim 提議将 ​​notContains​​ 添加到标準庫。

在 Swift 中,使用 ​

​keypath​

​ 符号過濾可以讓函數式程式設計變的更加簡潔和可讀。

然而,沒有一種直覺的标準庫方法可以按布爾值相反的方向過濾。我之前提議 ​

​.toggled​

​​ 或 ​

​.isFalse​

​,但是被駁回了。

II

Karl 提議對 ​​RandomNumberGenerator​​ 完善兩個小功能。

  1. 填充緩沖區
  2. 靜态成員文法

III

Richard Wei 提出了一個關于​​強類型正規表達式捕獲​​的想法。

捕獲組是正規表達式的常用元件,允許程式員從比對的輸入中提取資訊。捕獲組将多個字元收集在一起作為一個單元,可以在正規表達式中反向引用,并在成功比對的結果中通路。

IV

Joseph Heck 開始讨論術語問題 —— ​

​behaviors​

​​、​

​shell​

​​ 和 ​

​possible reductions​

​。

我會回答 “Yep, these could be all implementation details”。在挖掘 ​

​swift-distributed-actor​

​​ 的源代碼後,我了解了一些資訊(​

​basic actor concept​

​​, ​

​mailboxes​

​​, 和 ​

​messages​

​)。

分布式 actors 代碼使用了一些我不太熟悉的術語和措辭,大部分我可以通過推斷和猜測知道是什麼意思和關系,但是我認為最好是弄清楚他們之間的互相關系。

V

Ethan Kusters 提出了非架構文檔示範的改進。

并不是所有的 ​

​Swift-DocC​

​ 文檔都是用架構建構的。在自定義工作流程中,Swift-DocC 将提供任何符号圖形輸入建構文檔,例如 Swift-DocC 在 Swift.org 上的使用者文檔。然而不管符号圖形的内容是什麼,Swift-DocC 都将此文檔描述為最上層頁面上的“架構”。

例如,當 Swift-DocC 在 Swift.org 上的使用者文檔是用作“工具”,而不是“架構”時,在最上層頁面上被描述為“架構”。

VI

Tom Doron 基于 result builders 提出了 ​​SwiftPM​​ 清單。

​Swift Package Manager​

​​(以下簡稱 SwiftPM)是在 2016 年 Swift 開源時釋出的。SwiftPM 使用一個名為 ​

​Package.swift​

​ 的檔案,使用者可以用它來描述包的源結構、建構工件(例如建構生成的任何可執行檔案或庫)以及 對其他包的任何依賴。

SwiftPM 的清單是一個 Swift 程式(各種腳本),SwiftPM 在安全沙盒中作為單獨的程序建構和執行,以生成代表所需包配置的靜态資料模型。 目前,靜态表示基于 JSON,該 JSON 的詳細内容是内部實作細節。 JSON 模型後來被反序列化并加載到父程序記憶體空間,進而驅動 SwiftPM 的工作流,如依賴解析、建構、測試等。

VII

Konrad ktoso Malawski 分享了一個實作​​分布式 actor 隔離​​的提議。

該提案僅側重于支援分布式 actor 所需的隔離規則,并從大型整體分布式 actor ​

​pitch 8​

​​ 中分離出來。我們的目的是提出這個非常大的提案的各個部分,作為單獨但是又互相關聯的提案,類似于去年引入 ​

​Swift Concurrency​

​ 的方式。通過這種方式,我們希望保持内容數量的可審查性,并且讨論也集中在手頭的特定主題上。

VIII

Holly Borla 提出了一項 ​​Introduce existential any​​的提案。

Swift 中的現有類型具有一個非常輕量級的拼寫:類型上下文中的普通協定名稱表示存在類型。多年來,這已經從引起混亂上升到主動危害的程度,導緻程式員走上了錯誤的道路,一旦他們遇到值級抽象的基本限制,通常需要他們重新編寫代碼。該提案通過使用 any 注釋這些類型,使語言中的存在類型的影響變得明确。

關于我們