Hatena::ブログ(Diary)

プログラミング言語を作る日記

2007-08-05

[]「型なし言語逝ってよし」について

LL魂」にて、パネル「オレ様言語の作り方」に出演してきました。

ひとり10分ぐらい、自分の言語を紹介する枠がありまして、OpenOffice Impressプレゼン資料を作って持っていきました。

発表直前にステージ上でプロジェクタの接続テストを行い、プレゼン資料の表紙がきちんと表示できることは確認したのですが、いざ自分の番が来て、スライドショーの2ページ目をめくってみると、解像度が合わなくてプロジェクタの画面をはみ出してしまいました。

そもそも私はこんな機会には慣れてませんからかなり緊張してましたし、そこへ来てコレで少なからずパニクりまして、なんとかスライドショーではなく編集モードで発表は進めたのですが、そもそも日頃PowerPointは使ってもOpenOfficeは使ってないし、ノートPCのトラックパッドにも慣れないし、等々あって、なんというかみっともないことになってしまいました。

まあ、そういったトラブルがなくてもたいした発表ができたとは思えませんが。

さて、そのプレゼン内で

「型なし言語逝ってよし」

と書いたスライドを入れてたわけでして、会場では(ケンカだけ売っといて?)ろくな説明もしないで流してしまったので、ここでその意図するところを書きます。

「型無し言語逝ってよし」とは、かつて2chのプログラム技術板にあったスレッドです。

このスレッドで挙げられているそれぞれの利点欠点は、大きく以下のもののようです。

型あり言語の利点:

(1)コンパイル時にエラーが検出できる。

(2)統合開発環境の支援が得やすい。

型なし言語の利点:

(1)型宣言が不要なのでさくっと簡単なプログラムを書くには向いている。

(2)柔軟な記述が可能である。

型あり言語の利点のうち、私は古い人間なので(2)は重視しないのですが、(1)は重要だと思います。

コンパイラは、ソースコード全体を最低1回は舐めますが、実行時エラーはそもそも「ソースを1回舐める」こと自体がかなり困難です(だからカバレッジテストのツールなんかが売っていたりするわけです)。WRITING SOLID CODEには、「コンパイルを通しただけですべてのバグを検出してくれるコンパイラがあったならどんなによいことか」という意味のことが書いてあったはず。

では、静的言語の重要な利点は「コンパイル時にバグが見つかるから楽だ」ということだけなのかというと――そうでもなくて、少なくとも私にとっては、静的型は、プログラムをどう作るかを考える上で重要な役割を果たしているようです。

Paul Grahamによれば、プログラムスケッチのようなものだとのことですが、私も同じように思います。

そして、私が考えるスケッチというのは、たとえばマンガを描くときに目鼻の位置を決めるために顔に入れる十字線のようなものです。スケッチ(下書き)を入れたら、その後そこにペン入れをしたり、ベタなり色なりを塗ったり、トーンを貼ったりしなければなりません。

コーディングに話を戻すと、たとえばCなら、ヘッダファイルさえ書いてしまえば、残りの作業は会社なら若い奴らに振れば済むこともありますし、ひとりでコーディングしている時でも、集中力が続かないときの作業とすることができます。

素晴らしきハッカーによれば、

また、何人かのハッカーが、ビールを半杯でも飲んだら全くプログラムできなくなると言っているのも聞いたことがある。

とのことですが、そんなことを言っていたらcrowbarもDiksamもほとんど書けません。私は自宅じゃたいてい酒飲みながらコード書いてるからです。

いやまあそんなことは自慢できることじゃないですが、酒を飲もうが飲もないが、人間の脳の主記憶領域に一度に乗る情報量なんて限られているわけで、重要な情報を静的型(Cで言うならヘッダファイル)に集中させることで、設計者の主記憶領域の負担を減らせると思うわけです。

そうすれば、プログラムの残りの部分は、割と単純作業に近い形で書けるようになります。単純作業のコード書きなんてつまらない、と思うかもしれませんが、いくらなんでも型定義だけでプログラムが動くはずはなく(特定分野なら、そういうDSLを作ればよさそうですが)、いずれそれ以外の部分も書かなければならないわけです。それなら、そういった部分は、コンパイラとヘッダファイルにできるだけ書き方を規定される方が楽です。会社で若いやつらに仕事を振るにせよ、酔っ払った頭で自分でコーディングするにせよ。

だからこそ、

 オ 俺は「自由」より「犬の首輪」がほしいンだよォ〜〜ッ!!

となるわけです。

ではもし仕様変更があったらどうなるか。静的型言語なら、直すべきを直してコンパイルエラーを取れば済みます。型のない言語では、気が付いたところを直すことは容易でしょうが、直すべき箇所すべてを直したことを判定するのはずっと難しそうです。よって、静的な型付けのある言語のほうが、型なし言語よりも変更に強いように私には思われます。

以上、これらは私が「静的型に縛られている」ことに他ならないのでしょうが、(ヘボ含む)一定以上の人数で、一定以上の規模のプログラム開発に携わっていると、こういう発想になるのは自然じゃないかな、と私としては思います。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kmaebashi/20070805/p1
Connection: close