従来の iOS アプリ開発では、主に Grand Central Dispatch を用いた非同期計算(イベントループ、マルチスレッド、マルチコア)と、
それらの処理をパイプライン合成可能な単位にラップしたリアクティブプログラミングが主流でしたが、
Swift 5.5 の登場により、いよいよ言語仕様としての async/await と Structured Concurrency が導入されます。
普段、私たちが Swift プログラミングで書く同期的なコードが、 async/await キーワードを付けるだけで、いとも簡単に非同期のコードに変換できてしまう。
さらに、協調的マルチタスクによって、スレッドを大量消費したりブロッキングすることなく、実行途中の関数を一時停止したり再開できる。
まるで魔法のようにも見えるこれらの仕組みですが、その裏側は一体どのように動き、解釈できるのでしょうか?
理論的背景からコンパイラ・ランタイムの実装に至るまで、テーマが非常に多岐に渡るとても奥深い領域ですが、
今回の発表では主に前者について、関数型プログラミングの観点から解説を試みようと思います。
重要なキーワードは、ずばり「モナド」「継続(コールバック)」「コルーチン」。
関数型プログラミング界の三銃士を連れながら、皆様の心の中の継続を呼び起して協調的な発表になるよう目指します。