私がプログラミング言語に望むこと

私もプログラミングに触れ始めてから5年ぐらい経ったので,今プログラミング言語について思うことをまとめておこう.

速度

速度は重要だ.とにかく言語を選ぶ段階でいきなり速度のボトルネックが発生するようでは困る.処理するデータが肥大化し続けている現在では,とにもかくにも早く無ければ困るのだ.速度が10倍になれば10時間かかるタスクも1時間で終わる.そうすれば世界は変わるのだ.速度の問題は大概ハードウェアが速くなったので問題は無くなったと言われるが,そんなことは無かったのだ.

文法はある程度どうでもいい

プログラミングを始めた当初は「この言語の文法が美しい」だの「この言語の文法は糞」だのと思っていた.しかし,そんなものはどうでもいいのだと気づく年になってしまったのだ.中括弧だろうが,begin-endだろうが,どーでもいいよ….

スタイルの強制はある程度必要

pythonhaskellのインデントの強制は必要であると私は思う.あれはスタイルというより哲学だ.どうせインデントを合わせるのはプログラマーの嗜みという面があり,みんなそうするのが当たり前なのだから,強制してしまえばいいという考えだ.プログラミングをやっていく以上他人のソースコードを読む機会は必ず生じる.その際に必ず同じスタイルが保証されていることは大きなメリットとなる.

次は変数名など識別子の名前にも強制が入ると面白い*1Rubyでは,変数の種類をファニーキャラクタや大文字で区別している.例えば先頭が大文字の変数は定数であり,@で始まればインスタンス変数だ.このように変数の種類の区別を名前に強制させるという試みを他の言語でもやってはどうか.フィールド変数は_で始めなければならないとか,終わらなければならないとか.慣習的にやられていて,ある程度効果があると考えられていることは,強制させるのが一番だ.

静的型付けは必須

静的型付けは必須だ.どれだけ動的言語が魅力的だろうが,静的型付けは必須なのだ.というかコンパイルというプロセスが必要なのだ.コンパイルはしょーもないエラーを検出する重要なテストである.どんなプログラムだろうが,しょーもないエラーは致命的な結果を招く.コンパイルによりそのエラーを実行よりも早い段階で検出できることは,非常に大きなメリットなのだ.

強力なtypedef

どちらも欲しい機能だ.強力な型付けとは,コンパイラが区別してくれるtypedefが欲しいということだ.Haskellnewtypeコンパイラが区別するtypedefとして機能している.

何故強力な型付けが必要なのかというと,StringやIntegerのようなデータを型のレベルで区別するお手軽な方法が欲しいからだ.型のレベルで区別するだけなら,classでデータを包んでしまえばいいのだが,classはとてもお手軽な方法とは言えない.classは多くの場合必要以上に強力で不要だ.

型推論

これは単純にタイプ数を減らしたいと言う意図で欲しい機能である.まあ別になくても良いかもしれない.ただ,JavaGenericsのタイプ数に苦しめられている今の現状を考えると必須かとも思う.

マルチパラダイム

命令型言語と関数型言語の融合は最低でも欲しい.
Scalaは関数型と命令型のマルチパラダイムを上手く達成していて,本当に素晴らしい.関数型言語のように書くことで,命令型言語の多くの処理はより抽象度の高い記述に変えることができる.これはソースコードの可読性を上げる,非常に良いことだ.

以上,こんなところ.

*1:ただし私はPerlのファニーキャラクタは嫌いだ.あれは静的型付け言語なら勝手にやっていることをわざわざ自分でやる意味の分からないものだ