前言
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
正在審查中。
時間的概念可以分為三個不同的部分:
- 提供現在概念的項目以及在給定時間點後醒來的方式
- 時間點的概念
- 時間測量的概念
這三個項目分别是一個時鐘、一個瞬間和一個持續時間。時間測量可用于多種類型的 API,從進階網絡連接配接逾時概念到休眠任務的時間量。目前,測量時間類型的 API 使用
NSTimeInterval
(又名
TimeInterval
)、
DispatchTimeInterval
,甚至
timespec
等類型。
Swift 論壇
I
Ilias Karim 提議将 notContains 添加到标準庫。
在 Swift 中,使用
keypath
符号過濾可以讓函數式程式設計變的更加簡潔和可讀。
然而,沒有一種直覺的标準庫方法可以按布爾值相反的方向過濾。我之前提議
.toggled
或
.isFalse
,但是被駁回了。
II
Karl 提議對 RandomNumberGenerator 完善兩個小功能。
- 填充緩沖區
- 靜态成員文法
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 注釋這些類型,使語言中的存在類型的影響變得明确。