Java7 のダイアモンドオペレータと型推論について。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
@nagise http://t.co/UCmYB1M 手前味噌で申し訳ないですが、型推論できるできないの違いに、代入変換かそうでないかというものがあります。
2011-08-01 01:52:20しげるさんのこのエントリは当時、驚嘆したが、真面目に全部おっかけてなかった(反省 QT @ashigeru http://t.co/WNN7qJF 手前味噌で申し訳ないですが、型推論できるできないの違いに、代入変換かそうでないかというものがあります。
2011-08-01 01:55:28@ashigeru いえいえ。あのへんは言語仕様の中でもかなり読むのがツライところだと思います。読んでも理解するのを挫折しかねない…。僕も半端にしか理解できてない…。不勉強が露呈しているw
2011-08-01 01:57:47これは別に @nagise さんへの批判ではなく、一応言語屋さん(?)である自分が、どういう思考過程でそういう推論をしてたのか、あたりが参考になれば、と思って書いてみました。
2011-08-01 02:08:06.@ashigeru さんも、ポスト見る限り、似たような推論をされてたように思います。あと、左辺がワイルドカードの場合に、単にraw typeでコンパイルする、というのは型安全性をぶち壊す危険性が思いっきりあるので、きちんと証明しないと危な過ぎる、という話も。
2011-08-01 02:04:57@kmizu 個人的に言えば、ダイアモンドオペレーターでは代入以外の文脈でも型推論してくれていい気はするんですよね。反例が見つからない状態です。
2011-08-01 02:07:43@ashigeru ええ。それはやってくれてもいいと思うんですが、Java 5の型パラメータ推論と挙動が同じになるような仕様っぽいので、その辺拡張するなら、型パラメータの推論規則も拡張して欲しい、と個人的には思います。
2011-08-01 02:18:17@kmizu メソッドの方は生の型変数の推論が入って、メソッド間で推論結果が振動しかねないですからね…。ダイアモンドオペレーターならイレイジャが確定した状態で始まるので、多少はマシかなと思った次第でした。
2011-08-01 02:20:26@ashigeru なるほど。ただ、「ダイアモンドオペレータ」みたいな小さな変更に対して、あまり期待するのが酷なのではないか、と思います。
2011-08-01 02:24:15■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
『Java7 のダイアモンドオペレータと型推論について。』をトゥギャりました。 Togetter http://t.co/d7r1qyn
2011-08-01 02:14:53(実際試してみないと)結構言ってること分からないというか、「自分は単にScalaに慣れてるだけで、型に関して抽象的に考える習慣とか能力がかけてるなー」と思い知らされる。まぁjava7の型推論まわりにあまり興味湧いてないっていうのもあるけど http://t.co/jA4CYXa
2011-08-01 02:31:00@nagise いえいえ。 @nagise さんが先走ったというより、たぶん、アプリケーションをメインに開発されている方の観点と、言語の仕様とか実装よりの人だと、推論の仕方が異なっていた、という話じゃないかと。この辺、結構面白いと思うのでその内議論してみたいところです。
2011-08-01 02:26:26@kmizu 推論はやはり経験に即してということだと思いますね。僕の知見の範疇では、これ型推論を省略できるんじゃないの、と。そっちにいっちゃった。型推論まわりの知見があれば「ははーん」と気づけたかもしれない
2011-08-01 02:32:14どの辺が違ったかと言うと、今回のケースでは、 @nagise さんは、大量のコード例を元に帰納的に、ある規則を導出しようとしたんだと思うんですね(違ったらツッコミお願いします)。
2011-08-01 02:31:52で、自分とかは、まず仕様読んで、そこから演繹的に個々のコード例の振る舞いを推定しようとしていました。で、個々のコード例が仕様から明らかに乖離していたら、これは仕様ガン無視したと推定してたかもしれないですが、
2011-08-01 02:34:20