はじめに
ncaq氏の記事を読んで様々なことを学習できました。
asyncが「syncしない」なのにawaitが「waitする」なのは何故か。awaitがasync waitであるという説は正しいのか。async/awaitの語源について学習したことを記事にしました。
asyncとawaitのa-の違い
asyncはsynchronize(同期)にa-(否定)が付いてasync(同期しない)となります。
awaitはwait(待つ)にa-(否定)が付いて「待たない」となりません。a-(方向)が付いてawait(待つ)となります。
a-(否定)とa-(方向)の違いです。
a-(否定)は「エイ」と発音する傾向
asynchronous エイスィンクロナス 非同期
Ajax エイジャックス(Asynchronous JavaScript And XML)
asymmetry エイスィメトゥリィ 非対称
asexual エイセクシュアル 他者に性的魅力を感じない
atheism エイシイズム 無神論
amoral エイモラル 道徳心がない
apathy アパシー 無関心
await アウェイト 待つ
awaitとwaitの違い
どちらも「待つ」という意味です。
awaitは、waitよりもフォーマルな単語で、ちょっとかしこまった時に使われます1。
async/awaitの歴史2
2007年、F# はawaitを用いた非同期ワークフローを追加。
2011年、C# はAsync CTPで初めてasync/awaitを搭載。
2012年、Haskell はasync パッケージを作成。
2015年、Python はasync/awaitを追加。
2015年、TypeScript はasync/awaitを追加。
2017年、JavaScript はasync/awaitを追加。
2019年、Rust はasync/awaitを追加。
2020年、C++ はco_return, co_await, co_yieldの新しいキーワードでasync/awaitを追加。
2021年、Swift はasync/awaitを追加。
async/awaitの歴史の中で C# が初登場です。
次に登場するC#での命名者の回答からawait命名の由来を学習できます。
C#のIssueを読む
ncaq氏が2018年1月7日にC#の公式レポジトリに投稿した質問を読みました。
await命名者の一人が回答していて参考になります。
HaloFour 氏がコメントしました。
awaitは「asynchronously wait」の略ではないと思います。
awaitという英単語がすでに存在しピッタリと当てはまるからです。
CyrusNajmabad氏がコメントしました。
私は命名者の一人です。
なぜwaitではなくawaitと名付けられたのでしょうか?
waitは適切ではありませんでした。waitが同期ブロックを示す多くの先例がありました。
本当にasync + waitなのか?
そのようにawaitを擁護する人に会ったことがありません。
- awaitは「そのことが起きるのを待っている間に他のことをしてもいい」ことを意味します。
- awaitは「Foo() continue with」または「Foo() continue after」が最も一致します。
await = async wait説への反論
C#の言語仕様の中でawait xの説明としてAsynchronously wait for x to completeと書いてあります。
ですが、ネイティブはawaitのa(ア)はasync(エイスィンク)ではない(アとエイの発音が違う)と思われるようです。
awaitはすでに存在する英単語のawaitに由来します。async + waitがawaitになったのではなく、awaitがたまたま非同期で待つことを意味したようです。
awaitは「そのことが起きるのを待っている間に他のことをしてもいい」のと「プログラム実行の続きを指定する(Foo() continue after)」という説明が最も一致します。
JavaScriptでは非同期で待つのみ
awaitが非同期で待つという説明は、JavaScriptでは釈然としません。JavaScriptでは同期で待つことが通常考えられないからです。
JavaScriptはイベントループを回してイベントを順番に実行するので、JavaScriptで同期で待ったらJavaScript自体を止めてしまうことになります。あるイベントが待っている間に他のイベントに実行権を渡すことがJavaScriptのプログラミング作法です。
JavaScriptは非同期で待つのみであり、同期で待つことが通常考えられません。
さいごに
ncaq氏の記事を読んで、async/awaitの語源について学習したことを記事にしました。
皆さんの学習になれば幸いです。