💬 Pofat 的話
上週我走到哪雨就下到哪,我真的是雨神吶。
🌎 On Swift Community
Apple:歐盟哭喔
Apple 上週在歐盟區掀起兩陣不小的風波,如同每年 iPhone 發表,果粉果黑們出籠各擁其陣營,身為蘋果生態系開發的開發者,我對蘋果的溝通態度感到反感,畢竟小社畜跑去做 indie 就是不想再奴了,豈料 Apple 仍把開發者當農奴。
上週 EU 對於 Apple 開罰近 20 億美元的反壟斷罰款,原因是對音樂串流服務商濫用 App Store 規則(如禁止導購 IPA 外的付款方式),裁決一出 Apple 迅速地回應了一篇新聞稿,訴說著 Apple 是如何地為 Spotify 的成功做出了多少貢獻而 Spotify 分文未付。我的第一感受是 App Store 領導層該換了,這樣的態度彷彿對開發者表達:「上架 app 就是欠 Apple 人情,」。
另一件事就是 Apple 與 Epic 未完的戰爭,Apple 先終止 Epic 的開發者帳號,其中一個竟是 Tim Sweeney 批評 Apple 的推文,48小時後又承諾會復活該帳號,因為 Epic 表示會照規矩來,Epic Game Store app 之路的障礙已被再次清除。溫馨提醒,EU 的使用者如果離開 EU,一段時間後(最多 30 天)將無法再從非 App Store 的管道獲得更新,詳見 EU 替代市場規則。
Swift 5.10 正式發佈
雖著 Xcode 15.3 ,Swift 5.10 也一併正式推出,其中最關鍵的更新是完善了 full data isolation 的檢查,也提供了 opt-out 完全檢查的關鍵字,讓大家在 Swift 6 到來以前可以先做些轉移,分散痛苦。
這也是 Swift 5 的最終版本,接下來就會是 Swift 6 的世代了。
https://www.swift.org/blog/swift-5.10-released/
A journey with Swift on Linux
一個團隊選擇以 Swift 重寫他們的 server side 程式(負責透過 IPC 接受需求的程式,並非我們一般認知的 HTTP server),另一組 Swift 在非 Apple 平台上的開路先鋒,他們的經驗分享非常詳細,基本上就是 Swift 語言現今的整體問題加上非 Apple 平台的支援度問題。
Swift 語言本身的現代功能寫起來「大多」很享受,簡潔的語法和方便的擴展以及嚴密的安全性,可是偶爾會撞到不明的效能問題,沒遇到風平浪靜,撞上了便是驚淘駭浪,然後錯誤的診斷資訊也不夠清楚, Swift 團隊接下來的首要任務應該是改善這些痛苦的黑箱體驗。
https://forums.swift.org/t/our-journey-with-swift-thus-far-some-notes-and-reflections/70510/1
Swift Tooling: Windows Edition
做出 Arc 瀏覽器的 The Browser Company 很早就 all in Swift,在非 Apple 平台上做開路先鋒,他們整理要在 Windows 用 Swift 開發所需要的工具組,從寫碼、編譯、測試到 debug 皆有包括,為眾生們減少千里冤枉路。
而 Swift 在 Windows 上開發產品到底可不可行,文章開頭就給出了結論:
Swift on Windows is production ready, today
Swift Parameter Packs 官方教學
Variadic generic 是 Swift 6.0 裡的重大新功能,官方用的名詞是 Parameter Packs,這是一個大家呼喊以久的功能,不過設計出來的 API 頗為複雜,所以官方也提早推出相關教學,建議大家早點開始研究怎麼上手。
https://www.swift.org/blog/pack-iteration/
Pkl as CodeGen
前陣子 Apple 發表了類型安全的 configuration 程式語言 Pkl,其也可以用來生成 Swift 程式碼,很適合做為 codegen 的工具,利用 SPM command plugin 來打包生碼時要下的指令可以使其更容易使用,詳見教學文。
🗣️ On Swift Forum
[SE-0425] 128-bit Integer Types
SE-0425是個單純的提案,就是在整數家族中新增 128-bit 寬的整數,雖然是個小眾需求,除了 Swift 外大多數的程式語言都有支援,沒道理不跟上。其介面完全由它所繼承的 protocols 樹所決定,如果你不清楚這些 protocols 幹嘛用的,SE-0104 有很好的圖示說明整數的 protocol 結構樹。
實做 128-bit (即 16個位元寬度)的整數有兩種方式,一來是利用 C23 標準引入的 _BitInt(N)
(N=128) ,另一個則是非正式但廣泛地被使用的 __int128_t
與 __uint128_t
。由於 clang 裡實做的 _BitInt(N)
在 x86 或 arm64 對齊的位元數都是 8 (理想上應該是 16),且其 ABI 的未來方向仍不明確,使用已普遍使用的 __int128_t
是更實際的實作方向,因此 Int128
裡的值便直接使用 BuiltIn.Int128
這型別(對應 __int128_t
)。使用 _BitInt(N)
理論上能直接新增一固定任意寬度的泛型整數,可惜這有待底層 ABI 的未來方向確立。
另外有兩件開發者需留意的事,一是 Codable
的實做,因大多現存 encoder/decoder 並不支援 128-bit 整數,目前採用一對 64-bit 整數來進行 encoding 或 decoding;另外則是不支援 NSNumber 的橋接,但這是整數類型的首個「特例」,未來 Swift 會再全面檢視更一致性的雙邊關係。
🤪 Pofat 選推
只是想分享 Old man yells at cloud ,好好笑(改自 The Simpsons S13E13)
其实Swift in Windows去年还是前年就能很好地在VSCode工作了(除了lldb不稳定), 到23年年末也做到了能两行命令无脑安装, 但是在Windows/Linux平台有最大的两个问题:
1. Foundation只实现了最基本的那些类, 苹果平台才有的Framework(包括Foundation依赖的, 像Compression之类的)都没有对应的实现, 所以没法特别简单地把代码搬过去, 而且这块几乎没有社区支持, 所以只能用来写写pure Swift的命令行工具或者用专门写有很好支持的server工具
2. 没有一个能用的UI框架, 这个也没什么好办法, 不知道The Browser Company会不会开源他们实现的“APPKit”