トップ 最新 追記   RSS 1.0 FEED  

Journal InTime


2007-10-01 (Mon) [長年日記]

_ RailsによるアジャイルWebアプリケーション開発 第2版

RailsによるアジャイルWebアプリケーション開発 第2版

AWDwRの第2版の日本語版ですが、ようやくAmazonで予約できるようになりました(実はまだ作業中だったりしますが)。

10/26頃には書店に並ぶのではないかと思いますので、よろしくお願いします。

Tags: Rails

2007-09-07 (Fri) [長年日記]

_ 未踏成果発表会

飛行機が飛ばず行けなかった。ごめんなさい。

代りにゆうぞうさんにお話いただけることになったので、より面白いんじゃないかと。

Tags: Ruby

2007-09-04 (Tue) [長年日記]

_ 未踏成果報告会

笹田さんのセッションでちょっとだけお話します。

9/7ですが、残席にまだかなり余裕があるようです。 私の話はともかく他の方のお話は面白いと思いますので、 お誘い合わせの上、ぜひご参加ください。

Tags: Ruby

_ AWDwR2邦訳

Agile Web Development with Railsの第2版ですが、現在鋭意翻訳作業中です。 邦訳の初版が品薄になっていますが、そういったわけで増刷できない状況です。ごめんなさい。

年内には出します。たぶん。

Tags: Rails

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>を渡せるわけだけど、そういう書き方は一般的なのかなあ。

Tags: 言語

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(火)なので参加したい人がいたら私に連絡ください。 ついてくのはしんどいと思いますが。

Tags: 言語
本日のツッコミ(全1件) [ツッコミを入れる]

_ みずしま [> そういう言語ってあったっけ。 Java Genericsでは型のユーザがvarianceを指定できるように なっ..]