thunkとは「ずしん」「ぶすっ」とかいう意味らしいのだがどうもコンピュータで使われるthunkとは合わないのである。。最初にthunkという言葉を観たのはWin16からWin32への移行の過渡期である。
サンクとは、一般的に、Windows 95やWindows 98などのWindows系32ビットOSにおいて、16ビットコードと32ビットコードを相互に利用するために、命令の変換を行う機構のことである。
(引用元:IT用語辞典)
http://www.sophia-it.com/content/thunk
続いてATL WindowでもHWNDとthisを結びつけるコードをサンクと呼んでおり、そういう変換するコードをサンクと呼ぶのかなと思っていたのである。何かと何かをくっつけるノリのようなイメージであろうか。
なのでもともとthunkという英単語が持つ意味からは想像できない機能なので何でかなーと思っていた。でも「thunkって?」というブログエントリを読むと、「引数なしの手続きを引数にするときに thunk っていう」ことらしい。さらにこのエントリのコメントには下記のように書いてあった。
ちゃんとした英語じゃなくて、ジャーゴンです。もともとはAlgol 60の名前渡し引数を実現するために導入された機構です。実引数に渡された式の計算が呼び出し先でその引数を使う時まで遅延されるので、ちょうど引数をクロージャで包んでやって呼び出し先でそれを評価する感じになります(左辺値になった場合はもっと面倒っぽいですが、Algol60は使ったことないので良く知りません)。そこから、他の言語でも引数をくるむクロージャをthunkと言うようになったようです。
http://www.orangehedgehog.com/jargon/?entry=thunk
名前の由来もリンク先に書いてありますが、「既に考えられたもの」(already been thought of)という意味で名づけようとしたのだけれど、夜中まで議論してて頭が働いてなかったのでthinkの過去形としてthunkという単語を作って名づけてしまった、みたいなことを名付け親が語っています (本気で間違えたというよりは、誰かがうっかりそう言ったのを、おもしろいと思って採用したって気がしますが)。
そういうわけでthunkは元々の言葉の意味とは全く関係がないようである。さらにもともとthunkという意味はそういう変換機構みたいなのではなく「引数なしの手続きを引数にする」ことをthunkと呼ぶのだそうである。そうするとこの変換機構のようなものをthunkと呼ぶようになったのはなんでなんだろうかね。