Java による高階型変数と Scala とジェネリクス

@nagise …というのは型関数?(型を引数にとって型を返す関数)それとも高階型関数?(型関数を受け取ったり返したりできる関数)
2011-01-20 19:19:24
@ChihiroShiiji Javaの場合、スコープがメソッドの型変数と、スコープがインスタンスの型変数があるわけですが、二階層に使いたい場合、型変数自身に型変数を持つ必要が出てくるんです
2011-01-20 19:53:39
@nagise 変数が変数を持つという表現は判りにくいので、型変数の解決を一種の関数適用(数学の意味で)と考えて、型変数を引数、引数に具体的な型を当てはめたもの(この置換で結果によりその型変数は消える)を結果という感じに整理して考えましょうかと…。
2011-01-20 20:05:07
blog書いた。「HttpSessionを型安全にする」 http://d.hatena.ne.jp/Nagise/20110122/1295664922 本題はその過程で出てくるジェネリクスの未解決問題の提示
2011-01-22 11:56:40
Javaだとインスタンスのインスタンス、言うなれば高階インスタンスのようなことが出来て、僕はこのプログラミングパラダイムが結構好きなんだけど、世の中にはパラダイムとしては認知されてないね
2011-01-24 19:54:54
blog書いた http://d.hatena.ne.jp/Nagise/20110124/1295874192 Javaによる高階型変数の実装
2011-01-24 22:04:42
"その昔「たかしな」と読んだ人がいたとか、いないとか。" / 『Javaによる高階型変数の実装』 プログラマーの脳みそ http://goo.gl/wRjxK
2011-01-24 23:22:48
俺は型安全というのはコンパイル時に型の合わない代入を許容しないことだと思っていて、「実行時にClassCastExceptionが出る」ような実装は型安全では無いと思う。
2011-01-24 23:37:54
要素型Tを型変数に取るMapがあったとして、そのコレクションに対するget(key)の結果型がkeyの値によって型付けされるためには、コンパイラはkeyに対してどんな型の値が入ってるか知らなくてはならない。つまり、コンパイル時にデータそのものが決定されている必要がある
2011-01-24 23:40:46
@nagise keyを列挙できる=型にエンコードできる、だと思います。静的な型付けでは外部の入力に対して型付けが出来ないの。列挙できるなら、そもそもコレクションクラスの形態を取る必要はなく、ふつーのクラスでもいいのではと思いました
2011-01-24 23:47:31
@yuroyoro そう。単品なら普通のクラスにしちゃえばいい。抽象化しようというのがそもそもやりすぎともいえる。動機はHttpSessionみたいなケースをどうにかしたかった訳なんだけど
2011-01-24 23:49:36
@nagise やっぱりコンパイル時に決定できない計算に対しては、nominal typingによる制限しか表現の仕様が無い気がしますね。Vの型はある型以上であるとか、Keyはある型かそのサブタイプか、とか。それとも俺が知らないだけでもっといい型システムがあるのかな?
2011-01-24 23:51:31
ヘビィなジェネリクスってのはたいていの場合、そこまで抽象化する必要はなく、ちょっとだけDRY原則を破ったほうがトータルでコスト安であることが多い
2011-01-24 23:51:58
WicketのSessionクラスはどうだったかな。。 RT @nagise: @yuroyoro そう。単品なら普通のクラスにしちゃえばいい。抽象化しようというのがそもそもやりすぎともいえる。動機はHttpSessionみたいなケースをどうにかしたかった訳なんだけど
2011-01-24 23:52:34
@yuroyoro この十数年未だにしっくり来てないんですけど、sessionに1こだけbean入れるって運用にして、そのbeanに必要(というか十分)な数のメンバをつけて。。。だと何が不味いんでしたっけ?
2011-01-24 23:54:41
@naka_aki_spl 粒度しだいですけど、そういう実装は得てして重複した構造があちこちに散らばってDRYじゃなくなりがちですね
2011-01-25 00:16:04
@yuroyoro sessionを名前不安全にアクセスする通常のスタイルでも「構造」はそこに存在するわけですよね。コードに明示的に書けないせいでヤラしくなるという違いがある(だけ。。。てのもなんだが)で、同じなんじゃないのかなあと思うんです。
2011-01-25 00:20:08
@j5ik2o Wicketの場合、Sessionクラス自体自分で作るのだから、setAttributeとかgetAttributeとか関係なくて、自分でメソッド作るのだからタイプセーフですよ。
2011-01-25 00:30:30