iOSDCをきっかけに「Swift5 async/await 研究読本」を購入して読んだ

ツイート

本の中身の前に

本の中身(ざっくり)

第1章 async/awaitとは何か

  • ネストの深いクロージャをasync/awaitを利用すること同期的でシンプルなコードとして表現できることについて説明しています。

第2章 Hydraで理解するasync/await

  • すでにSwiftでasync/awaitを実装しているライブラリ https://github.com/malcommac/Hydra の使い方についての説明しています。
  • Promise単独の例とasync/awaitを併用した例を並べることでasync/await構文がやっていることについて解説しています。
  • 確かJavascriptだとPromiseが先に入っていて、後からasync/awaitが追加されていたはずなので、これが自然な導入なんでしょうか。
  • エラーハンドリングについてもJavasciprtとおんなじ感じだった記憶があるので、あーそうそうそんな感じだよね、と自然に読めました。初見の人はどうなんだろう。

第3章 Hydraのasync/await実装を読む

  • 非同期処理の完了待ちをどうやって既存のSwiftの機能で実装しているかについて説明しています。
  • セマフォに尽きる、という印象でした。並行処理の待ちといえばこいつですよね。最近使ってなかったからこいつの存在を完全に忘れてた複雑怪奇な処理を実装するときにお世話になっていました。
  • Promiseのallは存在は知っていましたがzipなんてあったっけ?、と思ってMDNを調べたらjavascriptにはなくてああ動的型付けだからかと解釈しました。
  • googleはObj-cで実装したライブラリを公開している( https://github.com/google/promises )。恐ろしい。

第4章 「クリス・ラトナー氏が提案しようとし ている async/await for Swift のプロ ポーザルの下書きを解説する」

  • タイトルの通り、今回のasync/awaitの提案(プロポーザル)を和訳した上で説明しています。
  • 中身も大事ですがこういう感じで新機能を提案するのか、という意味でも勉強になりました。

雑感

  • ツイートもしましたが、すでにKotlin・JavascriptDartにはasync/awaitが入っているので、今回のSwift5で主要なネイティブアプリの言語でasyncが実装されることになります。Webを含めてフロントエンドプログラマの教養とか基礎知識として理解する必要性が大きいと思っています。
  • 会場で質問しましたが、Rxと競合している部分があるので置き換わりが発生すると思っています。通信系のライブラリや画像キャッシュライブラリでReactive Extensionsを作っているようなものは処理をasync/awaitで実装するだろうと見込んでいます。一方でRxCocoaを含むUIとのbinding系は置き換わらない気がするのでそこはRxを続けるかな、と考えています。