💬 Pofat 的話
本週社群有兩件好事發生,以及史上最複雜的 Swift Evolution 也開始進入審核,希望 大家能享受本期的內容。
🌎 On Swift Community
Swift Package Index gains Apple sponsorship
這周最令人開心的社群消息就是 Swift Package Index 現在由 Apple 贊助支持!Swift Package Index 做得遠比單純 index 專案資訊來得多,他們不旦有提供檢查支援平台和版本相容的服務、支援存放版本化 DocC 文件的服務,還可以一鍵打開 playground 來試玩專案。此 Swift 開源專案的好友去年中一度陷入營運上的困境,曾公開呼籲大家捐款協助營運資金。
力推 Swift 到各處的 Apple 終於也意識到這個網站對他們的價值而以行動力挺,美事一椿。
沉默不代表靜止的 Apple 、生成式AI 對 App 的衝擊
此推文長,是付費帳號才能擁有的長度。 前半段提到 Apple 在 AI 策略上總以「能獨立在裝置上運算」來保護隱私,以及用來加強面對使用者的功能見長(比如相機中),雖然前者對企業來說很重要,公司文件或程式碼可不能因此而儲存於第三方伺服器,不過我懷疑僅為數不多的個人使用者會認真在意裝置運算或雲端運算的差異,語言判斷模型能不能連接擁有其它知識和技能的服務才是大家想要的未來。打個比方若 ChatGPT 能接上 Siri Shortcut ,想必用語音能完成的事情會更多元。試想 Apple Watch 的本質 - 把使用者從 iPhone 解放,一開口便能行天下一定會是 Apple 想要達成的目標,接下來的 AR/VR 裝置更不用說。
不過這篇推文的後半段非常有趣,作者認為因為開發 app 的成本大幅下降,「單一功能」的 app 會是件大事,本來市場規模不符開發成本的點子都有可能因此重生、或更加蓬勃發展,換言之 app 將會 plugin 化。但如此一來,對於入口的需求也會重生,記憶中的 yahoo 奇摩或許將以不同面貌轉生。
OpenAI 招 iOS 工程師
相信這是會令人振奮的職缺,看描述感覺是要包山包海一把扛、十里山路不換肩,果然是早期團隊成員的特性,建議應聘前先加點抗隕石屬性。
Wanqu 灣區日報重生
這跟 Swfit 雖然沒有直接關係,但我們工程師還是需要產品力與了解軟體圈生態的,而灣區日報是我從以前在新創工作就勤奮追蹤的網站,每天推幾篇精選文章和短評,停更六七年後竟然重生了!TLDR 雖然似乎最近已經可以讓機器代勞了,不過重點還是 curation,摘錄網站簡介的一段精華:
在 AI 横行的年代,更需要人类的手动推荐,手动点评;人类好的品味不会被 AI 淘汰的。
🗣️ On Swift Forum
SE-0393: Value and Type Parameter Packs (Reviewing)
翹首企朌已久的 variadic generic 終於進入正式 review 階段,這個功能解鎖後大家終於不用再自己手寫 n 個 overload 。以 zip
為例,現在只能接受兩個 Sequence
做為參數,因為它只定義了 func zip<Sequence1, Sequence2>(_ sequence1: Sequence1, _ sequence2: Sequence2)
。
之後我們可以把這種需求寫成如下,其中 S
叫做 parameter pack (參數組)。
疑,有新的語法,沒錯這個提案不只有新的語法,也讓現行所有值和類型的意義有了基本意義上的變革,從此後所有的類型和值都可以被「群組」,因為也多了許多頭昏腦漲的新名詞,整理如下:
類型參數組(Type parameter pack):泛型參數 T 的進化,用來代表一個類型群組的參數,寫作
each T
。參數組擴充類型(Pack expansion type):使用參數組時的新語法,放在函數參數、或者 Tuple 裡使用,寫作
repeat each T
,其中repeat
的語法代表後面的就是一個群組,同一個表示式裡可以有多個repeat
,它會適用於後面的參數直到下一個repeat
為止,repeat Array<(each T) -> each U>
是Array<(T1) -> U1>, Array<(T2) -> U2>, ....
;repeat Array<(each T) -> (repeat each U)>
則是Array<(T1)-> U1, U2, U3..>, Array<(T2) -> U1`, U2`, U3`...>
要暈了嗎?先看程式碼緩和一下:
緩過來了嗎?還有更複雜的,你可以用 repeat each U
來填充 each T
,就能一直擴展下去:
T 和 U 又可以包含新的參數
最終的返回類型就展開成
以往泛型參數中可以使用的成員和加上限制也能使用
最後比較重要的一點是「同形限制」(Same-shape requirement),所謂同形代表展開後的類型有相同數量,而且擴充類型發生在同樣的位置,像是 T: {Int, Int}
和 U: {String, String}
為同形。如果群組了不同的類型群組,這些群組互相都要是同形(打到這裡都快不知道自己在講什麼了),以下的情況是需要同形:
但如果是重複使用參數本身來定義新的參數,則不需要滿足同形限制:
看到這大家感覺如何呢?一起迎接美好的泛型未來吧😘
🤪 Pofat 選推
Xcode 裡面真的沒有 AI 這兩個字啊!
Resident Evil 4 2023 不能摸狗,不玩了(丟手把)
Bard 真讚,跟 Numbers 一樣讚(?)
恭喜 MS Teams 高票榮獲 2023 軟體金酸莓獎