2010/05/08
静的型がうらやましいとき
「静的型の方が簡潔に書ける場合がある」「いやそれは動的型では悪いスタイルでは」 みたいなやりとりなんだけども。
この、「戻り値の型によって多相化できる」っていうのは静的型の 強力なところだと思う。結局、動的型よりも純粋に利用できる情報量が多い わけだから。
でも、動的型でどうしても出来ないかというとそうでもなくて、 その多相関数がランタイムに実際に呼ばれる際はその関数がどう 使われるかがわかっていることが多いわけだから、 caller側のコンテキストをcallee側で参照してディスパッチできれば 同じようなことが出来る可能性はある。 WiLiKi:Scheme:ExplicitMonadなんかはそのひとつの例と言えるかも。
ちょっとややこしいのは、たとえば返り値がそのまま多相の引数を取る関数に 渡されていたりすると、直接のcaller自身にはほんとにどの型を 扱ってるのかわからないこと。静的型ならコンパイル時に どんどん辿って行って型をつけてくれるか、つけきれなければエラーに なるんだけれども。
この「わからないこともある」っていうのがある限り、 いつでも汎用的に使える手にはならないんだよな>戻り値の型でディスパッチ。
戻り値の型がわからなかったらとりあえず可能性のある計算をする promiseの集合を返して、いざ型がわかったところで必要なものだけ計算する、 とかやったら動的型でもいけるかも。でもlazyになっちゃうから eagerな処理系にそのまま入れるのは難しそうだ。
Tags: Programming, Language
とおる。 (2010/05/09 10:05:41):
shiro (2010/05/10 00:41:26):
とおる。 (2010/05/10 23:53:34):