1 名前:デフォルトの名無しさん mailto:sage [2006/05/18(木) 01:03:42 ] 前スレ 【Java】次世代Java・J2SE1.6の動向【Mustang】 pc8.2ch.net/test/read.cgi/tech/1081698555/ 関連スレ 【JavaFive】C#からJ2SE5.xへ進化【TigerShot】 pc8.2ch.net/test/read.cgi/tech/1094891986/ www.itmedia.co.jp/news/articles/0404/07/news018.html マルチタスク実現へJava言語改良 Sun幹部によると、2005年に一般リリース予定の「J2SE 1.6」には、 Javaバーチャルマシン(JVM)のアプリケーション共有を強化する「分離」機能が備わり、 ローカライズコンピューティング処理実行のための分離が可能になるという。 米Sun Microsystemsは、Javaバーチャルマシン(JVM)内部での アプリケーションマルチタスク実現に向けてJava言語の改良に取り組んでいる。 カリフォルニア州サンノゼで開催のClusterWorld Conference & Expoで4月6日、同社幹部が明らかにした。 SunのJavaアーキテクト、ムラリ・カウンディンヤ氏によると、 今秋β版が登場し、2005年に一般リリース予定の「J2SE 1.6」には、 JVMのアプリケーション共有を強化する「分離」機能が備わる。 この機能によってローカライズコンピューティング処理実行のための分離が 可能になり、第2のJVMを要求することなくJVM内部でマルチタスクが行えるようになるという。 またJ2SE 1.6では、Javaプログラム間の高速通信を可能にする Sockets Direct Protocolのサポートが計画されている。カウンディンヤ氏によると、 J2SEに施された改良は、その後間もなくJ2EEにも組み込まれる予定。
52 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 11:16:08 ] >>40 そいで for (XML d : test.dataset[0].key) { System.out.println(d.key.value); } とかアクセスできたらまんまE4Xじゃないか。俺的には超OK。
53 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 11:59:47 ] >>50 36だけど、例として挙げたプログラムだと、レキシカルクロージャの特徴で あるキャプチャされた変数が無限の寿命を持つという点を生かしてない という話かな?確かにその通りではあるんだけど、それを生かしたプログラムは、 Schemeではよく出てくるけど、C#ではオブジェクトがあればほとんどの場合、 代用できてしまうので微妙かなと思う。
54 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 12:02:43 ] >>52 その例を見て思ったんだが、もしかして、プロパティの導入目的は、 言語レベルでのXMLのサポートを、より効果的に行うためなのかも。
55 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 13:00:54 ] >>53 そう。あとdynamic bindingでも、lexical bindingでも同じ意味。 Schemeのようなクロージャは強力すぎるけど、 C++の式テンプレートくらいの機能は欲しいなあ。 C#の匿名メソッドは、>>12 のページにあるように、 引数に与えられた式を使ってクラスを定義するみたいだから、 変数や関数の参照は、名前呼び出し風って事になるのかな。ちょっと使いにくそう。 > オブジェクトがあればほとんどの場合、代用できてしまう まさに式テンプレートですね。 Javaに式テンプレート入れると、型システムのルールが、 クロージャの引き数のところだけ変わるから無理そうだけれども…
56 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 15:32:18 ] >>55 >そう。あとdynamic bindingでも、lexical bindingでも同じ意味。 確かにそうだね。というわけで、dynamic bindingじゃできない例を作ってみた。 クロージャの話でよく出てくる古典的な例なので、またかよって思うかもしれんが、 そこは見逃してくれるとありがたい。Converterってのは、.NET Framework 2.0 で入ったdelegate型で、ある型を受け取って別の型(同じ型でもいいけど)を返す メソッドを表す型ね。 using System; class TestLexicalClosure { /* カウンタを作って返すメソッド */ static Converter<int, int> Counter(int start){ return delegate(int n){ return start += n; }; } static void Main(string[] args){ Converter<int, int> counter = Counter(0); //カウンタを作る Console.WriteLine(counter1(1)); // => 1が表示される Console.WriteLine(counter1(2)); // => 3が表示される } } > 引数に与えられた式を使ってクラスを定義するみたいだから、 > 変数や関数の参照は、名前呼び出し風って事になるのかな。ちょっと使いにくそう。 これは意味がよくわからなかった。もうちょっと詳しく言ってくれるとありがたい。
57 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 15:34:32 ] ミスった。counter1って書いてあるところは、counterの間違い。
58 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 16:49:51 ] もう、マクロでよくね?
59 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 17:32:29 ] >>56 class TestLexicalClosure { int _start; /* カウンタを作って返すメソッド */ static Converter<int, int> Counter(int start){ _start = start; return delegate(int n){ return _start += n; }; } じゃなくてもいいの? blogs.msdn.com/abhinaba/archive/2005/10/18/482180.aspx ant0x.udap.jp/material/mat_AnonymousMethod.htm www.divakk.co.jp/blog/aoyagi/archive/2005/10/27/7038.aspx とか読むとめまいしてくるんだけど… 結論としてはC#のanonymous methodと同じものならJavaにはいらない。
60 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 17:57:00 ] >>59 55のコードで大丈夫。実行して、ちゃんと動作することも確認した。 あと、59のコードだと、複数のCounter()を複数回呼んで、複数個の カウンタを作っても、カウンタの値が共有されてしまうので、まずい。 ポイントは、匿名デリゲートから参照されている外側のローカル変数は、 それが宣言されたスコープを抜けても生きているということ。 >とか読むとめまいしてくるんだけど… >結論としてはC#のanonymous methodと同じものならJavaにはいらない。 俺はむしろC#のanonymous method的な振る舞いじゃないと嫌だなあ。 あと、anonymous method(というかクロージャ)の振る舞いに関して、 どの辺がめまいがすると感じた?
61 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 18:39:43 ] あのコードみて問題ないと感じるのがすごいな なぜそうなるかは実装側の都合という状態
62 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 18:43:16 ] 一番内側のブロックがクラスに変換されるの? > 匿名メソッド@C# >>59 の二つ目のページ読むとそんな感じなんだが。 >>56 では、Counter()が一番内側のブロックだから、 引数は変換されたクラスのメンバ変数になるってこと?
63 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 20:30:15 ] >>61 >>59 の3番目のリンク先は、仕様書のバグということで問題だと 思うが、1番目と2番目のリンク先の挙動は、本当に問題無いよ。 実装側の都合でそうなっていると勘違いしているようだけど、 レキシカルクロージャになるように匿名delegateを実装したら そのような実装になったというだけのこと。あと、1番目のリンク先 の人はレキシカルクロージャという概念を勘違いしてて、コメント 欄で突っ込まれまくってる。 >>62 実装としては、一番内側のブロックが…とかいうのではなく、匿名 デリゲートから匿名デリゲートの外側のローカル変数を参照していた 場合、参照されている変数をメンバ変数として持つクラスが生成される ということ。
64 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 20:37:29 ] >>63 いや、なぜそうなるか、は昔からいわれてたけど それが本当に書く人が理解でき照るかというのとは別だと思う 書いた本人ならまだしも、他人のコードをさらっと斜め読みして 結果を予想できるかという割れると厳しいかも
65 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 20:45:13 ] >>64 > それが本当に書く人が理解でき照るかというのとは別だと思う それは確かにその通りだけど、このスレではなんか、匿名delegateの セマンティクスが実装の都合だという風に誤解されてるようなので、 それは違うんだと言いたかった。 > 書いた本人ならまだしも、他人のコードをさらっと斜め読みして > 結果を予想できるかという割れると厳しいかも レキシカルクロージャという概念に馴染みの無いユーザが驚く可能性は あるかもしれないけど、よっぽどトリッキーな使い方をしてない限り、 どう動くかというのは、簡単に予想できるんじゃないかなあ。
66 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 21:19:49 ] 二つ目のページで、 static D[] F() { D[] result = new D[3]; int x; for (int i = 0; i < 3; i++) { int y = i * 2; x = i * 2; result[i] = delegate { Console.WriteLine(x + y); }; } return result; } だと、[4 6 8](=[0 2 4]+[4 4 4])なんだろ? 変換結果のILはどうなるんだ? メソッドb__0()は、xとyをどうやってaccessするんだ? 別のインスタンス内にあるはずだが…(宣言のある場所で閉じ込めるインスタンス生成) それとも「一番内側の」ブロックで生成するインスタンスに全部含めるのか? そうすると[8 8 8]か?
67 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 21:48:53 ] delegate自体C#の構文はよくないねぇ
68 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 22:27:16 ] >>66 ILを含めると長くなるので、その辺は省略して、宣言だけ示すと、大体こんな感じになる。 DisplayClass3のフィールドとして、DisplayClass1のフィールドを持っているので、b__0(匿名 デリゲートのコード本体)からはxとy両方にアクセスできる。 class <>c__DisplayClass1 { public int x; } class <>c__DisplayClass3 { public DisplayClass1 <>8__locals2; public int y; void <F>b__0(){/* 匿名デリゲートの中身が入る */} } というわけで、結果は[4 6 8]で正しい
69 名前:デフォルトの名無しさん mailto:sage [2006/05/20(土) 22:36:35 ] 苦労じゃなんて使うんかい
70 名前:デフォルトの名無しさん mailto:sage [2006/05/21(日) 03:36:44 ] おればかだから>>12 ,27,33,36の話がよくわかんなくて、groovyでコード >>12 の参照先とほぼ同じ書いてみてやっと分かった。 def closures = [] for( i in 0..10) { closures[i] = { println i } } for( c in closures) { c() } 結果は同じように10がずらっと表示された。 これは、closuresに入っている各クロージャは、クロージャ外側の変数 i に そのままアクセスできるわけだけど、実際に実行されるc()の段階では、 i は既に10になっちゃってるから、これがずらっと表示されると考えて やっとしっくりきた。 >>56 は def makeCounter( start) { return { n -> return start += n } } def closure = makeCounter(0) println( closure(1)) println( closure(2)) ってな感じなんで、つまりクロージャから参照された変数 start は、変数自体がスコープを 越えてもクロージャ内では普通につかえるし、クロージャがある限り存在しつづける、と。 インナークラスがエンクロージングクラスのインスタンス変数にアクセスできるようなもん だけど、クロージャにはクロージャのスコープがあるので、一度クロージャが使った変数は クロージャ内で存在し続ける、ということか。
71 名前:70 mailto:sage [2006/05/21(日) 03:37:53 ] groovyでコード>>12 の参照先とほぼ同じ書いてみて ↓ groovyで>>12 の参照先とほぼ同じコード書いてみて
72 名前:デフォルトの名無しさん mailto:sage [2006/05/22(月) 23:01:22 ] んで、結局Dolphinで対応されるのは どういう機能なわけ。まだ曖昧にも決定してない?クロージャって単語だけが歩いてる?
73 名前:デフォルトの名無しさん [2006/05/23(火) 03:13:41 ] 匿名クラスのシンタックスシュガーには間違いなさそうだな。
74 名前:デフォルトの名無しさん mailto:sage [2006/05/25(木) 06:26:42 ] 嬉しい誤算発見 JavaでのサブピクセルAAレンダリングはJavaのレンダリング使うからか リモートデスクトップ経由でも有効だね ピクセルの構成が一致してないとつらいとは思うが
75 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 01:39:14 ] プロパティマンセー obj.setWidth(obj.getWidth() + 1)) なんて書かなくてもよくなりてぇえええ
76 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 04:15:52 ] じゃ、 obs.width = obj.width +1 ; になるわけか・・・・ なんか、VBのProcedureみたい。(VB4の知識で書いてます悪しからず)
77 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 06:14:57 ] >>75 ,76 ほんとにそうなるの? おれはgetter/setterの定義を書かなくて済むようになるだけだと思ってた。 ソースきぼん。
78 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 08:33:46 ] >>77 むしろそっちがソースキボン。 getter/setter だけなんて、中途半端じゃん。
79 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 09:09:56 ] >>78 いや、ソースはない。「プロパティがサポートされる」と聞いて、どうせgetter/setterが自動生成される程度で、getXxx()/setXxx()は使わないといけないのだろうと思った。それだけ。
80 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 13:25:01 ] >>79 getter/setterの定義よりも、それらにアクセスするコードを書く回数の方が 圧倒的に多いので、getter/setter自動生成だけだと、新しい言語機構を 導入するメリットが少なすぎる。だから、たぶんアクセスするときの便宜も 図られるんじゃないかなあ。
81 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 13:54:31 ] こんなんもいけるんかのう? obs.width++;
82 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 15:16:13 ] >>78 ライトアクセスとリードアクセスを区別して grep できないのはやだなぁ。
83 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 18:35:27 ] >>82 呼び出し階層の検索でいけるんじゃないの? たぶん。 あ、ごめん、これはEclipseの話だな。。。
84 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 23:12:33 ] とはいえピリオドでやっちまうとメンバ変数のwidthとgetWidthメソッドとの判断が難しいよな obs@widthとかobs->widthとかなんか特殊な構文が追加なのかも getsetかかせるよりはいいけどね
85 名前:デフォルトの名無しさん mailto:sage [2006/05/26(金) 23:26:41 ] >>84 C/C++ で使われてる -> よりは @ に賛成。 Character.isJavaIdentifierStart('@') も false 返すみたいだし、 やろうと思えばできるのかな? あと、JSR 295 見ると、converter や validator 使って何かやるみたいね? obs@width = "120"; とかやると勝手に StringToIntegerConverter を 使ったコードを挿入してくれるのかな? とか妄想してみる。
86 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 00:14:26 ] 245なんかのProperty Resolver APIが言語に入るんでしょ。 operator.のoverload。 Property Binding API, Method Biding APIなんかも。
87 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 11:49:33 ] >>80 Javaにそんな気の利いたことを望んではいけない。 ヒアドキュメントすらない言語だ、「互換性」を楯にして、最小限の使用追加だけですませるだろう。 しかしほんとに後付けの機能がふえるよな。もうぜんぜんシンプルな言語じゃなくなった。
88 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 11:58:45 ] プロパティに関しても1.1での後付考えかただし1.0はアルファ品質だったしな それでもプロパティはEODでは? 用意するほうはIDEがやってくれるけど使うほうが原始的杉 Genericsは開発効率がよくなりバグが大幅に減るすばらしいものだが 落ちこぼれるやつが多数いる この程度でおちこぼれるのならそいつはこの業種向いてないとは思うのだが ひとつの判断材料にはなるかも lockはsynchronizedのように専用構文がないと厳しいような なんでもそうだが資源解法でfinallyあてにするのは苦しいよな
89 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:01:11 ] いますでにgetXXX, setXXXの存在を前提として作られているフレームワークが やまほどあるので、基本的にはシンタックスシュガーになるんだろうな。 obj.prop = xxx とか書くにしても、バイトコード上では setProp(xxx)になってるとか。
90 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:07:39 ] そりゃそうだろ
91 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 12:21:18 ] >>88 俺はC++も好きなタイプなので、 Javaの言語領域で機能増えるのは嬉しい気持ちもある反面、 やりすぎて失敗しないのを祈りたい気持ち。 既に十分複雑だからね。抱えているプログラマ層を考えると。
92 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 13:03:03 ] Perlがあんだけ使われてるのみると、記号が増える分には問題なさそうだ。
93 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 13:36:50 ] ヒアドキュメントって、国際化対応とかどうするの?
94 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 17:59:29 ] それでなくても、ヒアドキュメントなんか、めったに使わないからな。 めったに使わないもののためにコンパイラ作りにくくすることもない。
95 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 19:15:47 ] ヒアドキュメントはあかんでしょ なんでヒアドキュメントかっていうと基本的に書く側の都合じゃない そこに書きたいっていう。 視認性は悪くなるし文法なんて無茶苦茶。 あれを使いたくなる理由は、簡易テンプレートエンジンとして使えるからだと思うんだけど テンプレート処理がしたいんだったらIDEとか開発ツールのアシストで 何とかなると思うんですけどね。 ScriptingAPIと同じ扱いでいいんじゃないかと思う。 あれも構造が類推できないスクリプト言語がソースにヒアドキュメント形式で生で埋め込まれてたらと思うとぞっとする・・・
96 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 19:54:22 ] >>94 ちょっとまて、ヒアドキュメントごときでなんでコンパイラが作りにくくなるのだ? あんなの、字句解析部をちょこっといじれば済む機能だぞ。 おまえ、コンパイラの作り方もわかってないだろ。 >>95 ヒアドキュメントで済むことをIDEとか開発ツールのアシストを使わなきゃいけないということに疑問をもたないのか。 HTMLページをまるごと埋め込むのならアホだけど、テストデータとその期待値を埋め込むのなら ヒアドキュメントはすごい便利なんだけど。 つーか、「そんな機能必要ない」「IDEのサポートがあれば十分」とかいってるやつらって、実際その機能が追加されたら「これはEoDを実現するすばらしい機能だ」とか言い出すんだろ。 Genericsだって、最初は「C++のテンプレートは複雑だから同じような機能はJavaには必要ない」とか揃っていってたくせに、いざ実装されるとみんなGenericsマンセーなんだよな。 プロパティだって、今までgetterとsetterはEclipseが自動生成してくれるから問題ないとか言ってたくせに、それが実装されると「これは便利だ」とか言い出すんだぜ、絶対。 Javaにない機能は「そんなの必要ない」と言い切り、実装されれば「すばらしい進化だ」と手のひらを返す。ほんと学習しねーよな。 >>93 なんで国際化が必要なん?ふつうにStringリテラルと同じ扱いでいいじゃん。
97 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 20:01:41 ] ヒアドキュメント作るとして、懸念があるとすれば改行記号の扱いぐらいかな?
98 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 20:02:14 ] >>96 だから当時「いらない」と言ってた人たちは恥ずかしくなって黙ってしまって、 今度は別の人が別の機能に「いらない」といってる、くらいの想像力はないのか? 実際まったく同じ人だったらキモイだろう。 ヒアドキュメントはあれば便利だと思う。 一方でコンパイルされたバイトコードの中(つまりはclassファイル)の中に そのヒアドキュメントの内容が埋め込まれるんだったらダサすぎなのでペケかな。
99 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 20:04:24 ] >>96 > 最初は「C++のテンプレートは複雑だから同じような機能はJavaには必要ない」とか そんな阿呆な事言ってた奴は居るのか? 少なくとも俺は聞いたこと無いぞ。 erasure よりマシな実装方法もあったんじゃないの? って話なら結構聞いたけど。
100 名前:98 mailto:sage [2006/05/27(土) 20:07:46 ] あ、しかしまあ、String document = ""が自動生成されると考えると さほどヘンでもないか。 しかし一方で、ヒアドキュメントってドキュメント中に変数値を簡単に 埋め込めないとあまり使い道がないと思うんだがどうだろうね。 式言語っぽく${変数名}なんてのを採用すると、式言語パースが必要に なるかな。
101 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 20:15:06 ] Stringで生成されるなら%dとか%sでいいだろ 何のためのフォーマッタだ
102 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 20:25:12 ] それだとあとから変数をセットしなくちゃいかんじゃないか。
103 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 20:43:44 ] >>102 そういうことなら、ドキュメントの生成とその中の文章の埋め込みまで やっちゃわないと駄目ね >>96 そのアホが出てくるからコードのメンテナンス性が落ちちゃうんだよなぁ でもそれは、コーディング規約でやらないようにさせるっていうのなら ツール用意して・・・・っていう話と比べてもどっちもどっちだと思うが 他の言語で利用されて便利なヒアドキュメントのいいところだけをJavaらしく取り込んでくれれば いいとは思う。 特殊なコメント記法を入れて、コメントを識別子つけて参照できるようにするってのはどうかな? /*** <html><body> ほげひげは、${age}歳です */ あ、名前つけんのどうしよう それよりは、特殊な改行付き文字列定義をかけた方がいいか・・・・ String document = ''' <html>ほべー げれげれー </html>'''; うーん、ターミネータがきめうちなだけのヒアドキュメントになったぞ。
104 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:11:41 ] >>96 > なんで国際化が必要なん?ふつうにStringリテラルと同じ扱いでいいじゃん。 そりゃそうだよね。 javacのソースの文字コード、 Shift_JISがディフォールトなのそろそろやめてくれないかな…
105 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:13:48 ] >>104 なにいってるの?
106 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:40:47 ] javacのソースの文字コードのデフォルトは、プラットフォームのデフォルトと 一致している予感。
107 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:41:29 ] >>104 LANG=ja_JP.UTF-8 export LANG
108 名前:デフォルトの名無しさん mailto:sage [2006/05/27(土) 23:59:04 ] >>107 どこのJDKよ?
109 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 00:09:32 ] 馬鹿が涌いてるな。
110 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 00:13:00 ] >>99 そうだね。Genericsに関しては、初期の頃からJavaプログラマの間でも、 Javaの欠点として言われていたし、Javaを拡張してGenericsを導入して欲しいという 提案も比較的初期の頃からあった。まあ、最近になってJavaにかぶれた人で、 ひょっとしたらそういう人は居るかもしれんが、ごく少数だろう。
111 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 00:47:29 ] オプションつければええやん 仕事でコード書くときは、普通レポジトリ中のロケール合わせて ビルドオプションにもそれ入れておくでしょ? まぁあの書き方からして>>106 をしてるっぽいんだが・・・・ >>110 複雑でいらねっていわれてたのは、ポインタと演算子のオーバオードだという記憶だねぇ それが、今度はとうとう . 演算子をオーバロードすることになるわけか・・・
112 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 01:26:57 ] Parameterized typeもいらないって言っていたヤツいたけど、総じて馬鹿だった。
113 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 01:46:46 ] 演算子のオーバーロードまではいかないんじゃない? Java 5がでたときのインタビューかなんかでも、演算子のオーバーロードは Javaを複雑にするので入れたくない、とSunの誰かが答えてたはず(ソース見つからず) プロパティを obj.prop = value で設定できるようになったとしても、それはオーバーロード とは言わんと思うし(シンタックス・シュガーだよね) Dolphinでオーバーロードをサポートするとか言う発表があったんだっけ?
114 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 03:11:55 ] >>99 Gosling自身が「いらない」と言っていたんだけど。Bill Joyは「parameterized typeがあればどんなにいいだろう」といってたけどな。 つか、ほんとに聞いたことないのか。それはいくらなんでも世界狭すぎだろ。 あれか、恥ずかしい過去はなかったことにしたがってる連中か。 EJBのときとかわんねーな。あれも推進派だった連中が今は「やっぱりEJB2は複雑だったよな、アノテーションマンセー」だもんな。自分たちがどれだけEJBを押し付けてきたのか忘れたらしい。 foreach文もそうだよな。foreach文なんていらね、Iteratorパターン最高といってたヤシばかりだったのにな。 ほんと恥ずかしい過去はなかったことにしたいらしい。
115 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 03:23:36 ] foreachは聞いた事ないけど
116 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 03:48:27 ] いやいくらなんでもEJB2が複雑じゃないなんて話は聞いたことがない。 EJB2じゃないけど、Strutsだって「あれは壮大なネタだろ」とか言ってたくらいで、全般的に 冗長なフレームワークは嫌われてたように思うが。 genericsでは何度か見たが、一方でMapがタイプセーフでないことに苦しめられたって 意見もあったわけで、バランスは取れてただろ。 Java言語をシンプルなままにしておきたいという希望は俺にもある。一方で、書くのが楽に なって欲しいという希望もある。一人の中でもせめぎ合いがあるんだから、スレ内でどっちの 意見が出たって不思議には思わんがね。
117 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 03:56:09 ] >>96 ヒアドキュメントがあると、文脈自由文法じゃなくなってしまうからJavaCCとかのパーサージェネレータで作りにくくなるよ。
118 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 05:33:15 ] >>116 EJB2が複雑という意見はあった。しかし、それは一部の開発者のみ。EJBを推進する連中のほうがずっと多かった(理由は「それが標準だから」だとさ)。 Strutsだって同じだろ。雑誌記事みればわかるじゃん。どれもEJBマンセー、Strutsマンセー。 EJBやStrutsを明確に批判したのはRodやTateなどごく一部。日本じゃ皆無。 >>117 単純なヒアドキュメントは字句解析だけで実現できる。パーサはいじる必要ない。 つうかな、これだけ機能がごちゃごちゃ増えてるのに、ちょっと文法たすだけなのがなんで問題なんだ。 今のJavaはコンパイラ作るのがすごい面倒な言語になったけど、それは機能が増えたせいで構文解析よりあとが大変になったからだろ。 それにくらべたら、構文解析までなんて簡単。ヒアドキュメントの追加ぐらいわけない。 ほかにずっと大きな問題があるのを見ないふりして、「パーサジェネレータで作りにくくなる」なんてささいな問題をとりだすなよ。
119 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 06:11:10 ] >>118 少なくとも、ヒアドキュメントは「ずっと大きな問題」じゃないな。
120 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 06:38:50 ] >>118 つ ttps://mustang.dev.java.net/ 時代は貴方を求めています。言い出しっぺの法則ってことでヨロピク
121 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 08:04:10 ] 俺はforeachいらねーわ。
122 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 09:46:04 ] >>114 GoslingがGenericsをいらないと言っていたというのは、信じがたいのだが。ソース希望。 Java House MLのアーカイブやその他の場所で引用されていた過去のGoslingの発言を見る限りでは、 Genericsの導入には前向きだったように思える。 あと、世界狭すぎなのは自分の方なのかも、って考えは無いのかね。
123 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 09:53:24 ] >>118 Rubyにあるような、式を埋め込めるヒアドキュメントはパーザをいじる必要があるけどな。 実際のところ、ヒアドキュメントはあれば便利だろうし、使うだろうけど、そこまでこだわる 程の機能か?あと、そんなにヒアドキュメントが本当に欲しければ、こんなところで ぐちぐち言ってるよりも公式に提案した方が良いかと。Genericsやその他の言語拡張だって、 要望が多かったから取り入れられたわけだし、ヒアドキュメントも場合によっては取り入れられる こともあるかもしれん。
124 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 10:07:39 ] Goslingが否定的だったのは、 C++のtemplateの特殊化やC++,CLOSなどのgeneric functionだろ。 operator overloadはかなり初期から批判的。 Bill JoyとGoslingが"暴力沙汰"になりそうになったのは、 Billがgenericsはゆっくり考えることにして、generics抜きでJavaをshippingしようとしたから。 Goslingは、進行はJCP任せだけど、collectionのreliabilityを増すと積極的。 C/C++に対する大きなアドバンテージと考えているから。> reliability www.gotw.ca/publications/c_family_interview.htm
125 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 10:24:43 ] >>124 本題からはずれるのだが、C++のgeneric function(=テンプレート関数のことか?) とCLOSのそれ(=マルチメソッド)は全く意味合いが異なるのでは。前者は静的に 呼び出しが決定され、後者は動的に呼び出しが決定されるので。
126 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 10:44:44 ] 性的か童的か違うと「全く意味合いが異なる」のか? 「関数テンプレート」が正式名称な。C++03で間違っている部分も修正。
127 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 10:51:28 ] >>126 全くというと言いすぎだったかもしれんが、少なくとも意味が異なるのは事実。 Javaのメソッド **オーバーロード** とメソッド **オーバーライド** が異なるのと同じ。 関数テンプレートが正式名称というのは、知らんかった。すまん。
128 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 10:56:49 ] >>124 は、わざわざ"generic function"って書いているんだから、 クラスに属さない多相型の関数のことを言っているのは自明だよ。 性的なw特殊化はわざわざ別に書いているし。
129 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 12:10:38 ] >>128 言いたいことがよくわからないのだが、C++には関数テンプレートとは 違う、"generic function"があって、それは、CLOSのように、実行時に オブジェクトの型に応じて、動的にディスパッチしてくれるのか?
130 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 12:49:01 ] "generic function"をCLOSの意味に制限して、 意味不明って言っても仕方ないじゃないの? 一般名詞としての"generic function"は、C++のWGでも出ているよ。 例えば、www.research.att.com/~bs/evol-issues.html generic programmingで使うparametric polymorphismを持った関数が"generic function"。 知らないのはよっぽどうとい人だと思われ。
131 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 18:45:57 ] >>130 いや、"generic function"をCLOSの意味に制限したいわけ じゃなくて、CLOSのそれとC++のそれは意味が異なる機能なのに、 124が > C++,CLOSなどのgeneric function と、C++とCLOSのgeneric functionが同じ機能かのように言っていたので、 つっこんだだけ。
132 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 22:01:40 ] >>123 ヒアドキュメントはあくまで例のひとつ。 「そんな機能いらね」といってたくせにそれが実装されると意見を180度変えるJava屋さんが多すぎてうざいというのが主張内容。 JCPに提案しろとかポイントはずれてる。
133 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 22:29:35 ] >>131 > C++とCLOSのgeneric functionが同じ機能かのように言っていたので、 FUDかよw
134 名前:133 mailto:sage [2006/05/28(日) 22:52:36 ] お口直しに、 www.osl.iu.edu/publications/prints/2003/comparing_generic_programming03.pdf 結局propertyは>>86 の言うように、JSR245なの?
135 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 23:22:33 ] >>133 132だが、いい加減しつこいかもしれんが、どの辺がFUDなんだ?
136 名前:デフォルトの名無しさん mailto:sage [2006/05/28(日) 23:25:08 ] >>135 間違えた。「132だが」は、「131だが」ね。
137 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 00:35:52 ] >>132 確かにポイントがずれてたかもしれん。 でも、結局、 > 「そんな機能いらね」といってたくせにそれが実装されると意見を180度変えるJava屋さんが多すぎて というのは、そんなに居るかなあとしか自分は思えない。あなたの 周りはそういう人ばっかりだったのかもしれんが、全体として どうだったかというのは、ソースが無い以上、わからんし。
138 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 08:50:44 ] えーい、IDが無い板でそういう話題はやめーい。 技術の話でぶつかるならともかく!!!!
139 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 08:59:23 ] まあ、ヒアドキュメントは実装されても意見を180度変えるJava屋は少ないだろうな。 いらね。
140 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 09:10:29 ] XMLで出来るんだから、プレインテキストはいらんだろ。
141 名前:デフォルトの名無しさん [2006/05/29(月) 12:41:52 ] >>134 JSR 245のexpression languageのところだけ、 つまり JSR-000245 JavaServer Pages 2.1 FR から抜き出された JavaServer Pages 2.1 Expression Language Specification だけ入るんじゃないのかな。property関係のところは。 1.6 Operator [] and . The EL follows ECMAScript in unifying the treatment of the . and [] opeartors. expr-a.idenfitifer-b is equivalent to expr-a["identifier-b"]; this is, the indentifier identifier-b is used to construct a literal whose value is the identififer, and then [] operator is used with that value. (以下、式を評価する時のルール;略) java.elのELResolver.getValue()辺りのインターフェースは どうなるのか知らないが。もともとJSPのproperty用だからさ。
142 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 16:53:15 ] >>137 まさに、すぐ下にいるじゃん。>>139 ,140 今まで幾度となく同じことが繰り返されてきたし、これからもおんなじ。
143 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 16:58:39 ] つまり、>>43 がXMLリテラルがあればヒアドキュメントいらね、って言い出すと予言してるわけね。
144 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 17:34:37 ] ヒアドキュメントはもう話題としてはいいだろ。つまんねえし。
145 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 17:49:01 ] >>142 ヒアドキュメントなど、間違いなく不要。
146 名前:デフォルトの名無しさん mailto:sage [2006/05/29(月) 23:48:08 ] あってもなくてもどうでもいいや。 自分ならヒアドキュメントで書きたくなるような文字列はコードと分離するけど。
147 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 01:46:32 ] まあつまりさ、genericsにせよヒアドキュメントにせよ、あれば使うし無ければ 今を受け入れるか、Javaを使わないしかないだろ。 おれはヘタレなのでMapに想定していないオブジェクトをつっこんじゃって、 キャストで落ちるなんてことをよくやってたからGenericsはすごくありがたい けど、なけりゃないで、無いんだからどうしようもないから受け入れてただけ。 Genericsがないからまともなコードが書けません、なんて仕事では言えない んだし。
148 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 02:42:09 ] いや、ヒアドキュメントは、あっても使う機会がない。
149 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 05:26:34 ] Ruby並にいろいろできるなら欲しいな、便利だし
150 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 06:57:54 ] スクリプト言語と比較されてもなあ… ま、俺も>>146 と同じでどっちでもいいや。どうせ使わないだけだし。
151 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 09:27:59 ] つうか、Ruby並にいろいろやりたいならJRuby使えばいいだけじゃん。
152 名前:デフォルトの名無しさん mailto:sage [2006/05/30(火) 09:31:37 ] 時々でいいのでGroovyのことも思い出してあげてください。。。