型付けについてのまつもとさんとみずしまさんのやりとり

動的型付け言語と静的型付け言語の違いに関する言語仕様について
24
Yukihiro Matzmotto @yukihiro_matz

関数オーバーロードとか。RT @mametter: @kmizu ところで、静的型付けが動的型付けより表現力がある事例ってのは、implicit conversion を使う事例以外にはないんですかねえ。

2010-05-08 22:34:24
Yukihiro Matzmotto @yukihiro_matz

それだとマルチメソッドじゃないですかね、言語で支援しても。その違いがどれだけ重要かっていうと、よくわかんないけど。RT @mametter: @yukihiro_matz kind_of? とかでディスパッチすればいいんじゃないですかね

2010-05-08 22:41:00
Yukihiro Matzmotto @yukihiro_matz

aの型がSuperAである場合、a.fooはSuperA#fooを呼ぶべきだと思います。aの型がSubならSuberB#fooでいいけど。RT @kmizu: @mametter http://gist.github.com/394552 を見ていただくとたぶんわかると思います。

2010-05-08 22:44:11
Kota Mizushima (on a diet) @kmizu

@yukihiro_matz まさにそうなるように作った例です。最初のa.fooはSuperAのインスタンスが入ってるのでSuperA#foo、二番目のはSubのインスタンスが入っていてSuperA#fooはfoo2にrenameされてるので、SuperB#fooが呼ばれる、と。

2010-05-08 22:51:28
Yukihiro Matzmotto @yukihiro_matz

@kmizu いや、だから、(aの型がSuperAなら)二番目でSuperB#fooが呼ばれちゃダメだって。全然関係ないメソッドだから。呼ばれるとしたら言語設計が間違ってる。

2010-05-08 22:59:51
Yukihiro Matzmotto @yukihiro_matz

@kmizu あ、間違ってるってのは、静的型オブジェクト指向言語として、ね。

2010-05-08 23:01:03
Kota Mizushima (on a diet) @kmizu

@yukihiro_matz あ、いや、aの型はSubですよ。型宣言省略したから伝わって無かったみたいですが、変数の型宣言省略時の型=右辺の型、のつもりでした。つまり、こう。 http://gist.github.com/394552

2010-05-08 23:05:20
Kota Mizushima (on a diet) @kmizu

@yukihiro_matz コメントのsubstitute Sub for SuperAってのは、コメントより上のコードのSuperAをSubに置き換えたら、その下のコードになる、という意図です。

2010-05-08 23:06:40
Yukihiro Matzmotto @yukihiro_matz

だとすると私は問題ないと思うけど。静的型言語ではサブタイプの変数を通じた呼び出しは自由だと思ってるので。Liscovの論文にはどう書いてあるんですか。RT @kmizu: @yukihiro_matz あ、いや、aの型はSubですよ。型宣言省略したから伝わって無かったみたいですが

2010-05-08 23:19:54
Kota Mizushima (on a diet) @kmizu

@yukihiro_matz Liskovの論文では、renaming mapみたいなのを用意して定式化してあって、(衝突があっても)普通に問題無い感じですね。

2010-05-08 23:23:39
Yukihiro Matzmotto @yukihiro_matz

ん? Sub型の変数からfooを呼ぶと問題なくSuperB#fooが呼ばれるってことだよね。論文読めって話かもしれないけど。RT @kmizu: Liskovの論文では、renaming mapみたいなのを用意して定式化してあって、(衝突があっても)普通に問題無い感じですね。

2010-05-08 23:26:04
Kota Mizushima (on a diet) @kmizu

@yukihiro_matz はい。そういうことです。>Sub型の変数からfooを呼ぶと問題なくSuperB#fooが呼ばれる

2010-05-08 23:32:33