📚
[随時更新] Swift Concurrencyを学ぶためのリソースまとめ
私は最近、Swift Concurrencyに関して、網羅的に調査・学習しています。
本記事では、Swift Concurrencyに関わる学習リソースを整理します。
なお、自分用の備忘録・TODOリストも兼ねているので、リストの項目は随時追加・更新していきます。
私自身がきちんと目を通したものについては✅をつけます。
また、特におすすめの学習リソースについては👍をつけます。
公式のリソース
動画
- ✅👍 Meet async/await in Swift (WWDC21)
async/awaitをはじめとするSwift Concurrencyの初歩が解説されている。 - ✅👍 Protect mutable state with Swift actors (WWDC21)
actor
やSendable
といったデータ競合を防ぐ仕組みの初歩が解説されている。 - ✅👍 Explore structured concurrency in Swift (WWDC21)
Structured concurrencyあるいはUnstructured concurrencyとは何かという解説に加え、async let
やTaskGroup
といったStructured concurrencyを実現する仕組みが解決されている。 - ✅👍 Meet AsyncSequence (WWDC21)
AsyncSequence
,AsyncThrowingSequence
の初歩的な使い方の説明である。 - ✅👍 Swift concurrency: Behind the scenes (WWDC21)
従来のGCDによる並行処理の性能上の問題点に触れた上で、Swift Concurrencyのスレッド管理の仕組みやactor reentrancyによって、それらの問題点がどのように解消されるのか解説している。Swift Concurrencyの低レイヤの仕組みへの理解を深めたい人には、特に視聴をお勧めする。 - Swift concurrency: Update a sample app (WWDC21)
- ✅👍 Eliminate data races using Swift Concurrency (WWDC22)
actor
やSendable
を駆使することで、コンパイラによってデータ競合が生じないことを保証しつつ、並行処理を導入する方法について解説されている。Swift 6以降のstrict concurrencyを有効化する上でも必要となる知識である。 - ✅ Meet distributed actors in Swift (WWDC22)
actor
を拡張して、分散システム上でのデータの通信・同期に使用可能にする、Distributed actorというオープンソースライブラリの解説。かなり高度なトピックで、関心がある人以外は特に見る必要性は低いと思われる。 - ✅ Visualize and optimize Swift concurrency (WWDC22)
Swift Concurrencyを適切に使えているかを、Xcode上のツールで確認する方法が解説されている。 - ✅👍 Beyond the basics of structured concurrency (WWDC23)
Structured concurrencyやTaskGroupに関する、3.よりも詳細かつ最新の言語仕様に沿った解説である。 - Migrate your app to Swift 6 (WWDC24)
記事・ドキュメント
- Swift: Concurrency
- The Swift Programming Language: Concurrency
- Migrating to Swift6
- SE-0296: Async/await
- SE-0297: Concurrency Interoperability with Objective-C
- SE-0298: Async/Await: Sequences
- SE-0300: Continuations for interfacing async tasks with synchronous code
- SE-0302: Sendable and @Sendable closures
- SE-0304: Structured concurrency
- SE-0311: Task Local Values
- SE-0313: Improved control over actor isolation
- SE-0314: AsyncStream and AsyncThrowingStream
- SE-0316: Global actors
- SE-0317: async let bindings
- SE-0323: Asynchronous Main Semantics
- SE-0327: On Actors and Initialization
- SE-0331: Remove Sendable conformance from unsafe pointer types
- SE-0336: Distributed Actor Isolation
- SE-0337: Incremental migration to concurrency checking
- SE-0338: Clarify the Execution of Non-Actor-Isolated Async Functions
- SE-0340: Unavailable From Async Attribute
- SE-0343: Concurrency in Top-level Code
- SE-0344: Distributed Actor Runtime
- SE-0381: DiscardingTaskGroups
- SE-0388: Convenience Async[Throwing]Stream.makeStream methods
- SE-0392: Custom Actor Executors
- SE-0412: Strict concurrency for global variables
- SE-0417: Task Executor Preference
- SE-0418: Inferring Sendable for methods and key path literals
- SE-0420: Inheritance of actor isolation
- SE-0421: Generalize effect polymorphism for AsyncSequence and AsyncIteratorProtocol
- SE-0423: Dynamic actor isolation enforcement from non-strict-concurrency contexts
- SE-0424: Custom isolation checking for SerialExecutor
- SE-0428: Resolve DistributedActor protocols
- SE-0430: sending parameter and result values
- SE-0431: @isolated(any) Function Types
- SE-0433: Synchronous Mutual Exclusion Lock
- SE-0434: Usability of global-actor-isolated types
- SE-0442: Allow TaskGroup's ChildTaskResult Type To Be Inferred
3rd Partyのリソース
本
Swift Concurrency
- Modern Concurrency in Swift: Introducing Async/Await, Task Groups & Actors
- ✅ Modern Concurrency on Apple Platforms: Using async/await with Swift
- ✅ 一冊でマスター!Swift Concurrency入門
iOS Concurrency
Concurrency一般
動画
- Xcode 16 & Swift 6 キャッチアップ: Swift Concurrencyの基礎と最重要ポイントを総復習
- async/awaitやactorでiOSアプリ開発がどう変わるか Before&Afterの具体例で学ぶ
- iOSDC Japan 2021: Hello, Swift Concurrency world.
- iOSDC Japan 2022: Swift Concurrency時代のiOSアプリの作り方
- iOSDC Japan 2022: Swift Concurrency Next Step
Discussion