2004-07-10 (Sat)
_ ところてんとからし
スーパーでところてんをかったら、つゆといっしょにからしがついていた。 え、からしなんか入れるの?、と思って「ところてん からし」で検索したら けっこうひっかかる。うーん、入れるべきか、入れざるべきか。
ちなみに糖蜜で食べる人もいるらしい。くずきり感覚なんだろうか。
2007-07-10 (Tue)
_ A Theory of Objects読書会
A Theory of Objects (Monographs in Computer Science)
松江オープンソースラボでA Theory of Objectsの読書会。 といっても、Aさんとまつもとさんと私の3人だけだけど。
Reviewの"2. Class-Based Languages"までAさんに解説してもらったけど、Reviewまでは何とかついていけそう。 Part I以降は式ばっかりでコードが出て来ないのでつらそうだな。
covariance/contravariance/invarianceについて、ある型について
- getのみだったらcovariance
- setのみだったらcontravariance
- get/set両方あったらinvariance
という整理はすっきりしていると思った。
だからメソッドの場合は、戻り値についてはcovarianceを、引数についてはcontravarianceを適用する(つまりSather方式)のが、型システムの安全性を考えると一番自然である。
あとで思い出したけど、Javaの配列型はget/set両方あるのにcovariantなので(本当はinvariantであるべき)型安全性が破綻しているんだな。 配列型で型安全性が破綻していること自体はずっと前に気付いてたんだけど、理論的に整理されてすっきりした。今まで感覚的にsubtype is-a supertypeであるためには…と考えてたんだけど。
この話をパラメタ付型(generic type)に一般化すると、ある型パラメタについて、型パラメタがgetにしか使われない(メソッドの戻り値にしか現れない)ならcovariant、setにしか使われない(メソッドの引数(正確にはin引数)にしか現れない)ならcontravariant、get/set両方ならinvariantであるべきということなんじゃないだろうか。 Reviewをざっと眺めたところではそういう話はなかったけど、後の方で出て来るのかな。 実際にはinvariantな言語が多い気がするけど、そういう言語ってあったっけ。
あと、Betaのinner(superの逆)も面白そう。CLOSのメソッドコンビネーションのaroundみたいな使い方になるらしい。でも単一継承だと(mixinできないので)設計が難しそうだな。
何はともあれ、今回の勉強会が今までの勉強会で一番ラボっぽかった気がする。 次回は7/24(火)なので参加したい人がいたら私に連絡ください。 ついてくのはしんどいと思いますが。
_ みずしま [> そういう言語ってあったっけ。 Java Genericsでは型のユーザがvarianceを指定できるように なっ..]
_ なま [うちは入れますよ、からし。]
_ masaking [うちは黒蜜でした。おやつとして食べていました。]
_ shugo [やっぱりそうなのかぁ > からし ちなみにうちでもおやつとして食べてましたが、酢醤油でした。 あと、ごまが入ってた..]