スクリプト言語に型はいらない」というのは良く聞かれる話である.これはちょっと乱暴だろうというのが僕の意見だ.

この話は二つの主張を含んでいると考えられる.「どうせちょっとしたプログラムしか書かないんだから,型システムは必要がない」と「型システムを導入することで失われるダイナミズムが惜しい」という主張だ.

まず,「どうせちょっとしたプログラムしか書かない」というのは,おそらく誤った仮定だろう.近年のスクリプト言語は十分に高機能であり,どんな大きなプログラムも記述できる性能をもっている.それならば,プログラマがその言語を気に入っていればいるほど,大きなプロジェクトにおいても使おうという気になるってもんだ.したがって,これは誤りであろうと反論することができる.

しかしもう一つの主張は少し難しい.確かに真実であるから.こちらは,トレードオフであるとしか言いようがない.ただ,少なくとも,型システムの導入がCやJavaのような型宣言の氾濫を意味すると思っているならば,それは誤りである可能性があるとは言える.MLとかのHindley-Milnerの型推論アルゴリズムを考えてみればいい.ほら,これならばあなたが失うものは,ずいぶんと少なくなるんじゃないかな?それに,インタプリタスクリプト言語ならば,おかしなプログラムに関しても「警告」を出すだけで,しゃにむに実行してしまえばいいんだから,やっぱり失われるものは少なくなる.


もう一つ,先日見つけた主張について考えてみよう.「型の整合性のチェックなんて,テストでできるんだからいいじゃん」というものだ.僕が対象としているRubyの開発者であらせられるまつもとさんも,そういう発言をWeb日記でされていたので,この主張を退けることは重要な使命である*1

まあちょっと落ち着いて考えてみれば,「コンピュータにできることはコンピュータにやらせればいいじゃん」と言い返せばすむことである.CとかMLだったらコンパイルの段階ではじけるエラーをわざわざテストを記述して検証しなくてはならないのは,プログラマの知性に対する挑戦であり,神をも恐れぬ大罪である.


とかなんとか言って,精神の安定を保つよう努力してみる.

*1:いや,別に退けはしないんだけど.まあ,そういう意見を突きつけられてもモチベーションを維持するだけの反論が欲しい,という話