💬 Pofat 的話
本週最大的事件(之一)應是 Stray 的發行,遊戲主題是在末日後 cyberpunk 都市冒險的流浪貓,這三大要素亮出來還有不玩的道理嗎?
我很享受在遊戲裡各場景暢遊的感覺,尤其是貧民窟,孤寂且渴望著連結的都市,萬物皆廢但仍有生命(?)的痕跡,以一隻貓的身份在此遊蕩似乎一切行動也合理了起來,總之這是一款會截圖截不停的好遊戲。
🌎 On Swift Community
Cpp 後繼者 Carbon 現身,但...
本週最大的開發者新聞之一是在加拿大舉行的 Cpp North 宣佈了 Cpp 的繼承者 Carbon。
我對於一個現代語言仍有分號結尾和 if 、for 後面要括號的堅持感到不解,不過更大的疑慮是沒有 memory safety ,因為不安全的 memory 操作帶來的代價大於語言語法與新功能所減少的成本。
Swift core team 的 Doug Gregor 強調 memory safety 是語言中不可割捨的「核心價值」,原推和下面的回應有不少精彩討論,值得一讀。
回應中一個有趣的 benchmark ,第一次看到把能源使用效率納入評比的:
iOS 開發會用到的實用資訊
iOS 開發者 Eugene 整理了一份「開發 iOS 時需要參考的資料集」,我特別喜歡硬體的整理部分,都是偶爾就會用上的實用資訊。
Swift protocol 的宣告中無法標明 weak
這串討論讓我意識到自己在 Swift 中很少再使用 delegate 模式,原因如下:
Swift 可以丟 closure 的特性比 delegate 管理成本更低,不用管理 delegate 物件
注入測試用的邏輯更容易
如果你已經使用 Combine 或其它響應式的框架,強力推薦把要接的 delegate 轉換成響應式的形態(範例)
土炮 Touch ID 按鍵
Podcaster 與專欄作家 Jason Snell 因不想放棄原本的機械鍵盤而將後來買的 Apple Magic Keyboard with Touch ID 黏在桌下使用,而後又因易誤觸再把周遭按鍵全部 mapping 到無用的按鍵上,最終目標就是大多數人的夢想 - 拆下 Touch ID 成一個獨立小按鍵。
🗣️ On Swift Forum
SE-0365: Allow implicit self for weak self captures, after self is unwrapped (reviewing)
讓我們在 Swift 5.7 能夠寫 if let some {}
來替代過往的 if let some = some {}
的 Cal Stephens 繼續將 Swift 帶往更精簡之路,這個提案讓 closure 裡的 unwrapped weak self
可以省略不寫 (目前不可省略以提示該 self
被捕捉了),這兩個功能可以組合連續技變成:
值得一提的是在 closure 中還是可以建立叫做 self
的變數,而這些名為 self
卻不是指向 weak self
的變數在呼叫時仍然要顯式地寫出來,而過濾的實做方式就是在編譯的語義分析階段時(lib/Sema 資料夾下的程式碼都是這階段的實做)檢查等號的左右邊是不是都等於 self
疑好像有波動拳。
遍歷的最佳方式
如果要對 Array 的每個元素進行操作,我們可以用逐一增加的 index 取元素、forEach
和 for-in
三種方式來進行,但你知道哪種是最佳解嗎?
答案是:「對 Array 而言,他們最後都會被編譯成一樣的操作。」
而 for-in
是最清晰和不容易出錯的選項,對編譯的組語結果有興趣的可參考這裡。
🎉 Swift commits
本週改拼字的 PR 就有六七個,這也不失為一種好的入門方式。
[SE-0362] Piecemeal adoption of upcoming language improvements
這個 SE 的實作即是讓我們可以在編譯時以 -enable-upcoming-feature X
啟用未正式發佈的新功能,以及在程式中用 #if hasFeature(X)
檢查是否已啟用該功能。
[CopyPropagation] Canonicalize all values
一個我目前完全看不懂的 PR,但是它大大地改善了 quicksort 的時間(30~40倍!),在 binary size 整體上也有改善,歡迎理解它在幹嘛的讀者來告訴我!
RequirementMachine: Fix a request cycle
Type checker 現在有個有趣味的 bug 會引起迴圈,此 PR 修復了這件事,想試的人可以在任一 檔案加入下面這段 code ,會讓編譯器崩潰(物理)。
🤪 Pofat 選推
各位,這是檔案數不是行數啊
¯\_(ツ)_/¯ - 1
這個我可以
¯\_(ツ)_/¯ - 2