asyncとawaitの由来を調べたところ, asyncとawaitのaは関係なかったことがわかりました, 英語はクソ
背景
「awaitってなんだよ」 という気持ちがある日寝てる私に降ってきました.
asyncの由来
asyncはsynchronize(同期する), synchronization(同期すること)を省略したsyncに, ギリシャ語由来の接頭辞a-をくっつけて, async(同期しない)となります.
また、英語の〈a-〉という接頭辞はいろいろな意味がありますが、その中の一つに、ギリシャ語の〈a-〉(母音またはhの前ではan-)に由来して、「無」「ない」という否定を表すものがあります。
prefix meaning "not, without," from Greek
じゃあawaitの由来は?
そうなるとawaitは一体どうなるんだということになります. wait(待つ)にa-がついてるのでawait(待たない)? いやいや, プログラミング上の意味的に考えてawait(待つ)だろう, どういうことだよ.
まあ, そんな疑問は辞書を辿ればすぐに解決するもので, awaitは単独で待つ, 待ち受けるという意味を持っているそうです. ちなみに, wait forとawaitの違いはなくて, awaitの方がフォーマル(かしこまった)な言い方だそうです.
〔人が物事を〕期待して待つ、待ち望む
そうなると, awaitのaはどういう意味なんだこの野郎, という気持ちになったので, 調べてみました.
from a- "to" (see ad-) + waitier "to watch"
まず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).
英語が難しくてよくわからないのですが, 方向性を強調するプレフィクスであることと, 少なくともラテン語由来のため, ギリシャ語由来であるasyncのaとは微塵も関係ないことがわかりました.
英語はクソ
asyncとawaitってのが並んでたら普通はaは同じ意味で対称性を持ってると思うだろ! まずゲルマン語とラテン語とギリシャ語と古英語などをごちゃまぜにした英語はクソ言語だし, もっとこう命名はどうにかならなかったのでしょうか. 英語はクソ!
なんて言ってるから私は何時までたっても英語が全然出来るようにならないのでしょうか… この次初めて受けるTOEICで, せめて300点は取りたいものです.
async waitの省略なのではという説がありました
1年近く経ってこの話になって, ツイートで指摘を貰いました.
await = async wait なんですけどな
— 8zuだそうです (@bagatela_8zu) 2018年1月7日
ソースと言われても… await はもう1つのプログラム単語として生きてきたからgoogleするのちょっと難しい。一番近いと言えるソースは C# 5.0 specification p.24 で、await キーワードについての解説「asynchronously wait...」。ご参考ください https://t.co/oavYFjFcfL
— 8zuだそうです (@bagatela_8zu) 2018年1月7日
たしかに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で良かったんじゃないかと思っているのですが.