• 作成:

asyncとawaitの由来を調べたところ, asyncとawaitのaは関係なかったことがわかりました, 英語はクソ

背景

「awaitってなんだよ」 という気持ちがある日寝てる私に降ってきました.

asyncの由来

asyncはsynchronize(同期する), synchronization(同期すること)を省略したsyncに, ギリシャ語由来の接頭辞a-をくっつけて, async(同期しない)となります.

また、英語の〈a-〉という接頭辞はいろいろな意味がありますが、その中の一つに、ギリシャ語の〈a-〉(母音またはhの前ではan-)に由来して、「無」「ない」という否定を表すものがあります。

第29回 食べることと話すこと (2) - 語源でゴキゲン

prefix meaning "not, without," from Greek

Online Etymology Dictionary

じゃあawaitの由来は?

そうなるとawaitは一体どうなるんだということになります. wait(待つ)にa-がついてるのでawait(待たない)? いやいや, プログラミング上の意味的に考えてawait(待つ)だろう, どういうことだよ.

まあ, そんな疑問は辞書を辿ればすぐに解決するもので, awaitは単独で待つ, 待ち受けるという意味を持っているそうです. ちなみに, wait forとawaitの違いはなくて, awaitの方がフォーマル(かしこまった)な言い方だそうです.

〔人が物事を〕期待して待つ、待ち望む

awaitの意味・用例|英辞郎 on the WEB:アルク

そうなると, awaitのaはどういう意味なんだこの野郎, という気持ちになったので, 調べてみました.

from a- "to" (see ad-) + waitier "to watch"

Online Etymology Dictionary

まずawaitはa-waitierから来ている言葉らしいです. そして, a-はad-の省略らしいですね. ではad-は一体なんなのか.

word-forming element expressing direction toward or in addition to, from Latin ad "to, toward" in space or time; "with regard to, in relation to," as a prefix, sometimes merely emphatic, from PIE *ad- "to, near, at" (cognate with Old English æt; see at).

Online Etymology Dictionary

英語が難しくてよくわからないのですが, 方向性を強調するプレフィクスであることと, 少なくともラテン語由来のため, ギリシャ語由来であるasyncのaとは微塵も関係ないことがわかりました.

英語はクソ

asyncとawaitってのが並んでたら普通はaは同じ意味で対称性を持ってると思うだろ! まずゲルマン語とラテン語とギリシャ語と古英語などをごちゃまぜにした英語はクソ言語だし, もっとこう命名はどうにかならなかったのでしょうか. 英語はクソ!

なんて言ってるから私は何時までたっても英語が全然出来るようにならないのでしょうか… この次初めて受けるTOEICで, せめて300点は取りたいものです.

async waitの省略なのではという説がありました

1年近く経ってこの話になって, ツイートで指摘を貰いました.

たしかにawaitの説明としてAsynchronously wait for x to completeと書いてありますね. csharplang/introduction.md at cc435ac889996d6661a43a772085b98e410a2dc1 · dotnet/csharplang

しかし, 自然言語としての英語に既にawaitという名前があること. async + waitとして説明されているのがこのドキュメントのこの行しかないこと. .NET FrameworkにWaitAsyncというメソッドが複数あること. 略語なら構文木にはAwaitではなくAWaitを使うのではないかということ. Task.waitの書き換えとしてasyncからaだけ取り出してawaitという名前を使うのは不自然ではないかということ. など色々考えました.

どうも真実はC#の設計者に聞かないとわからなさそうですね.

しかし, async + waitを略してawaitとしたというのが真実ならば, asyncの否定を意味するaだけを取り出して先頭に取り付けるのは尚更命名が下手くそだと言わざるを得ません. だってa-syncなんだからaを取り出したらそれで単独で機能してしまうでしょう.

issueで質問してみました

どうしても気になったので, C#のissueに質問してみました. Question: Why was await named await instead of wait? Is it really async + wait? · Issue #1237 · dotnet/csharplang

コメントによると, やはりawaitという自然言語の単語由来という説が濃厚ですね.

岩永信之さんによる解説も追加されました. await って言う単語 | ++C++; // 未確認飛行 C ブログ

実際どういう単語にすれば良かったんでしょうね. 私は原形厨で細かいニュアンスを気にしないのでwaitで良かったんじゃないかと思っているのですが.