2012/01/17
失敗に学ぶこと
色々なプログラミング言語を学んでおくことは、単に多くのパラダイムに 触れられて視野が広がるから、というだけでなく、 他の言語の失敗に学ぶという効果があるかもしれない。
ループ変数を破壊的に変更するのは、レキシカルクロージャと相性が悪い。 伝統的なLispのdoはこの点で失敗していて、Schemeのdoはそれを直した。 (Common Lispのdoは伝統的なdoの失敗を引きずっているが、それは仕方ない。 Common Lispの全てはkludgeだから)。
C#も同じ間違いをしてて、C# 5で直すそうだ。 互換性を破っても直す、というのはえらいと思うが、 クロージャを導入した時に誰かが気づいてたらもっと良かったのに、と思わないでもない。 (尤も、選択はその時点で見えていたいろいろな要素に重み付けをした結果で、 もしかするとその時クロージャとの相互作用について気づいてはいたけれど for文との一貫性の方を重く見た、ってだけかもしれないから、 後知恵でとやかく言えることではないけど。)
とはいえ、自分がよく知っているもの以外の言語について「失敗」を探すのは難しいよなあ。 それがおかしな機能に思えても、 実は自分が知らないだけでそれが有用な場面があったり、 その言語特有の別の機能と合わさるとものすごく強力だ、とか見えない理由があるかもしれない。 正しく判断するには、その言語の歴史も知らないとならないし。
むしろ、みんなが自分のよく知っている言語についての失敗点を挙げておけば 今後の言語開発者の参考になったりしないだろうか。
Tag: Programming
Post a comment