2007-10-01 (Mon) [長年日記]
_ RailsによるアジャイルWebアプリケーション開発 第2版
RailsによるアジャイルWebアプリケーション開発 第2版
AWDwRの第2版の日本語版ですが、ようやくAmazonで予約できるようになりました(実はまだ作業中だったりしますが)。
10/26頃には書店に並ぶのではないかと思いますので、よろしくお願いします。
2007-09-04 (Tue) [長年日記]
_ 未踏成果報告会
笹田さんのセッションでちょっとだけお話します。
9/7ですが、残席にまだかなり余裕があるようです。 私の話はともかく他の方のお話は面白いと思いますので、 お誘い合わせの上、ぜひご参加ください。
_ AWDwR2邦訳
Agile Web Development with Railsの第2版ですが、現在鋭意翻訳作業中です。 邦訳の初版が品薄になっていますが、そういったわけで増刷できない状況です。ごめんなさい。
年内には出します。たぶん。
2007-07-13 (Fri) [長年日記]
_ Java Genericsに見るvariance
20070710のみずしまさんのコメントより:
Java Genericsでは型のユーザがvarianceを指定できるように なっています。
ほう。 そういえば、最近のJavaはcovariant return typeもサポートしているそうですね。
型パラメータを? extends Tという形で記述することによって、 covariantな型になります。 List<Integer> ints = new ArrayList<Integer>(); ints.add(1); List<? extends Number> nums = ints; // OK nums.add(2); // NG
なるほど、面白い。 一瞬型安全じゃないのではと思ったのですが、配列の時のように実 行時にArrayStoreExceptionのような例外が発生するわけではなく、 コンパイル時にエラーになるんですね。
でもList<? extends Number>がList<Number>とcompatibleでない(null以外のaddができないので当然)のが、使い勝手的にどうなんだろう。 参照しかしない部分では(List<Number>ではなく)List<? extends Number>を要求するようなインタフェイスにするというスタイルでコーディングすれば、List<Integer>を渡せるわけだけど、そういう書き方は一般的なのかなあ。
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を指定できるように なっ..]