はじめに

この本を手にとってくれたそこのあなた!はじめまして(あるいはお久しぶり!)本書の著者、nasa と申します。 まず、この本が生まれた背景をお話していきますね。本書はボクの「非同期処理の仕組みをなるべく隅から隅まで理解したい」という思いから生まれました。主に JavaScript を使う場面で、async/awaitを用いた非同期処理、非同期プログラミングをしています。しかし、その具体的な仕組みを知らないままで使っています。たとえば「アプリケーションサーバーにリクエストを投げる」という処理があったとします。このタスクはいつ実行されるのでしょうか?そして、実行のタイミングを誰が決めているのでしょうか? プログラマーである私でしょうか?

どのタスクをいつ実行するかを決めているのはランタイムと呼ばれるものになります。本書ではこのランタイムの実際のコードを読んでいくことで非同期処理、非同期プログラミングをより深く理解していこう、内部動作を理解することでより高みを目指そう!という本になります。

改めて本書を手にとってくれてありがとうございます!

想定する読者層

本書は、こんな人に向けて書いています。

  • 「そもそも非同期処理とはなんぞや?」と思っている人
  • 非同期処理は知っているけど、仕組みまでは知らない人
  • 非同期処理ランタイムを読みたい人
  • 非同期処理ランタイムを自作してみたい人

前提とする知識

本書では Rust の実際の非同期ランタイムを読み書きしていきます。なので、前提知識として次のものがあったほうが良いです。

  • プログラミングの基礎的な知識
  • Rust のコードが読める方
  • Rust をはじめて読むけど、雰囲気は掴めるだろうという自信のある方

本書の特徴

本書は、非同期処理の解説、必要になった経緯から非同期ランタイムのコードリーディング、非同期ランタイムの実装を実際に著者である僕と一緒にやる本です。

大きく3部構成になっています

  • 第 1 章: 非同期処理とは?
    • 非同期処理をあまり書いたことがない人向けに Rust での非同期プログラミング(async/await)の説明から「なぜ非同期処理が必要なのか」を解説する内容。
  • 第 2 章: ランタイムを読んでみよう
    • Rust の非同期処理ランタイムasync-stdのランタイムを実際に読んでいく。
  • 第 3 章: ランタイムを実装してみよう -> wip

第 1 章では、非同期処理というものが必要になったのか、その経緯とともに非同期処理の何が嬉しいのかを話していこうと思います。また、非同期処理を書いたことがないという方向けに Rust の非同期処理の書き方を少々、話していこうと思います。

第 2,3 章では実際にランタイムを読み書きしていきます。まず 2 章でランタイムのコードを実際に見ていき、全体像の理解、気をつけるべきポイントを見ていきましょう。ここで読んでいくコードは Rust の非同期処理ランタイムの 1 つであるasync-stdというライブラリの実際のコードです。

ここで一つ注意が必要なのですが、今回読むコードは master ブランチのものではなくnew-schedulerブランチのものを読んでいきます。new-schedulerブランチのランタイムを読む理由は、new-schedulerブランチのコードのほうが 1 つ 1 つのモジュールが疎結合になっており、コードが読みやすくなっているからです。また、ランタイムの動作が変更されたことやタスク実行方法がより効率的になっていることから、パフォーマンスも向上されています。(2020/02 時点での話) そのため、new-schedulerブランチを読むほうが著者自身そして読者のみなさまの学びがあると判断しnew-schedulerブランチを読んでいくことにしました。

第 3 章では実際にラインタイムを実装していきます。ここで実装するランタイムはコードを非常にシンプルにすることを心がけます。しかし、余り使い物にならないものは作る気になれませんよね?なので、シンプルですが安全で高速に動作するランタイムの実装を目指します。

1 章で非同期処理を知り、2 章で理解を深め、3 章で理解を深めていきましょう!

本書のゴール

本書を読み終わると、読者であるあなたは次のような状態になっているはずです。

  • 自分ならではの非同期処理ランタイムを自作できるようになっている
  • 非同期コードがどのような仕組みで動いているかの雰囲気がつかめる

問い合わせ先・フィードバック

本書は、著者である僕の学習も大きな目的となっています。まだまだこの分野は勉強不足です。なので、「こうした方が良いよ」、「ここ間違ってるよ」などの意見があると思います。

その場合は、次の GitHub リポジトリに issue を立てていただくか Twitter までご連絡下さい! 質問も大歓迎です。その場合は Twitter の方がレスポンスが早いと思います、気軽にご連絡下さい。

GitHub リンク: https://github.com/k-nasa/rust-async-book

Twitter id: @nasa_desu

謝辞

  • TODO お世話になった方の名前を書く

執筆にあたってレビューをしてくださった皆さん本当にありがとうございました。他にもサークルメンバーの様々な方のサポートがなければ本書を書き上げることは出来ませんでした。本当にありがとうございました。その他、助言をくれた方々、本書関係者の方々に感謝します。