そうだろうか。

finalventの日記 - 夢みたいな夢じゃないような
以前もちょろっと書いたが変数は型(タイプ)なんてないほうがいいというか、型を意識して物を考えさせられるのは苦痛だ。人間は物に対して型なんて考えない。それが自然だ、と。

怠惰(laziness)を追求すれば、自然と型を使ってしまうのが人間、いや生物だと思うのだが。

別にプログラムの世界に限った話ではない。「メタルカラーの時代5」において、三井ハイテックの三井孝昭氏は、「人間と動物の違いは金型を使うか使わないかだ」という名言を残しているが、動物どころか地球上の生物は金型はとにかく一つの細胞の例外も残さず型を使う。DNA → mRNA → tRNA+アミノ酸 → タンパク質というのは、あまりに見事な型の連鎖である。

「でも、金型はcastであってtypeではない」という反論もあるかも知れない。しかしこの二つもtypecastという言葉でつながっているのはCプログラマーであれば誰でも知っている。「はめる」という動詞に注目するか「型」という名詞に注目するかの違いでしかない。

そう。「型」は、抽象化の仮定で必ず登場するのだ。

これほど根源的で本質的な「型」なのに、なぜ型は嫌われるのだろうか。

Audrey Tangの最近のスライドには、以下の表現が頻繁に登場する。

Types
(^o^)
Typing
(;_;)

そう。型を使うのは好きでも、型を作るのは面倒なのだ。

OOにもこれは共通している。クラスやプロトタイプを使うのは好きでも、クラスやプロトタイプを作るのはめんどいのだ。このあたりも実に金型とそっくりではないか。

そして、PerlやRubyのような動的言語にも、型はないようでいてある。ただ、どの型を意識せねばならぬかを言語の方でよきにはかってくれるだけだ。これを静的言語でやったところに、Haskellの凄さがある。この点にfinalventさんが気がついたのはさすがだと思うが、実はこれとて我々が常々息をするようにしていることに過ぎない。しかもまだまだ型推論(type inference)は充分賢いとは言えないのはご存じの通り。

そしてOOにしろFunctionalにしろ、普及にあたってはOOなのかFunctionalかというよりも重要なことが一つある。

すでに使える「型」がどれくらいあるか、ということだ。

なぜJavaScriptが普及したかといえば、それがOOだったからじゃない。プロトタイプ型だったということも関係ない、すでにそれが(Browser) windowという誰もが扱いたいオブジェクトを持っていて、そこへはJavaScriptを通してしかアクセスできなかったからだ。これはPerlに関してもそうで、すでに「Perlは文法に過ぎず、CPANが言語である」というのが合い言葉にすらなっている。

もちろん、それは言語の設計はどうでもいいということにはならない。Rubyの設計が汚かったら、DHHはRailsを書きはしなかっただろう。そのDHHのバックグラウンドがまたPHPというのも両極端で面白いではないか。

結局のところ、型というのは抽象化の一手段である。そして抽象化には、苦痛を超えた魅力がある。最後にAudryの言葉をもう一度借りよう。

Abstraction is Sexy.

Dan the Typist