imperative

次の翻訳に取りかかっていきなり引っかかった単語。どうすっかなぁ、これ。因みに意味はものすごくよく分かっている。分かっているどころか、プログラミング言語の世界に首を突っ込んだことのある日本人の中で、ことこの単語に関して私以上に思い入れのある人は他にいないのではないか?とすら思っている。通常のプログラミング言語手続き型言語)と関数型言語とを区別する上で、きわめて重要な意味を持つ概念である。代入文やGOTO文などのことを指して、imperative constructsという。コンピュータの内部状態を明示的に変更するような命令のことである。純粋な関数型言語にはこのimperative constructsがない。このため手続き型言語しか知らない人にとって、関数型言語の最初のハードルはこれら(特に代入)なしで、プログラムを書くこと自体となる。私がこのハードルを越えたの(かな?)は、かれこれ20年も前のことだ。そんなわけで数少ない関数型言語愛好者だと自負している。最近、Erlang, F#, Haskell(あとCAMLも?Standard MLは?)といった関数型言語が、にわかに流行りつつある??ようで、今日もHaskellのイベントがお台場あたりであるらしい。行けるようなら覗いてみたいなぁ。
なおimperativeに関する思い入れについてだが、この単語は私の修士論文のタイトルに出てくるのだ。Thesisのタイトルは「A Theory of Type Polymorphism in Imperative Programming」という。実はこれ、チューリング賞を受賞したRobin Milnerという超有名な先生の、これまた超有名な論文のタイトルをパクったもので元ネタは「A Theory of Type Polymorphism in Programming」なのだ(爆)。懐かしいなあ。結局あの論文は(修士論文として提出はしたが)理論として「完成」しなかった、というか、どうもそこに答えはなかったらしい…。あまりにも難しい問題だった。私ごとき凡人が手を出すようなテーマではなかったのだろうなぁ…。まあでも多少なりとも副産物はあったので、全くの無駄ではなかったと思うことにしている。