前スレ
【Java】次世代Java・J2SE1.6の動向【Mustang】
http://pc8.2ch.net/test/read.cgi/tech/1081698555/ 関連スレ
【JavaFive】C#からJ2SE5.xへ進化【TigerShot】
http://pc8.2ch.net/test/read.cgi/tech/1094891986/ http://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にも組み込まれる予定。
2 :
デフォルトの名無しさん :2006/05/18(木) 01:05:40
マ板のスレみたいな名前だからなぁ・・・
アンチ厨が群がってくると? マ板とは区別できるだろうと期待したい。 馬鹿には馬鹿しか集まらないが、 知的な議論が交わされれば オッサン共はこちらを荒らすことは無いだろう。 もしこっちがあれたらム板のC言語やC++スレ、C#スレまで 荒れることになる恐れがあるので。
Mustang ベータ2が来月。リリースが9月だっけか。。 Dolphinは2008年半ばだそうな。
7 :
デフォルトの名無しさん :2006/05/18(木) 19:41:51
Windows Vistaへの対応が気になるところ。 Windows版だけ、6月無理とか、制限あったりとかしそうな悪寒。
Vista発売の方が延びるから問題ない。
Vista 対応って、具体的に何を期待してんだろ?
10 :
デフォルトの名無しさん :2006/05/18(木) 20:17:37
XP SP2上と同じように動くこと。 現状、Vista公開β候補版でボロボロなので。
11 :
デフォルトの名無しさん :2006/05/18(木) 22:17:28
ttp://journal.mycom.co.jp/articles/2006/05/18/javaone3/ >Mustangの次のバージョンのJava SEはDolphin(Java SE 7)である。DolphinではJavaプ
>ラットフォームがエコシステムへと発展する方向での拡張を目指すという。具体的にど
>のような拡張が行われるのかは現在議論が重ねられている最中だが、現時点では次
>のような新機能の追加が発表されている。
>
>プロパティのサポート
>メソッドリファレンスのレポート
>クロージャのサポート
>言語レベルでのXMLのサポート
>JVM上で動作する動的言語のサポート
>スクリプト言語サポートの拡張
>モジュール化のサポート
>Swingアプリケーション開発のためのツールの充実
Dolphinってこんなに変わるのかよ。プロパティ・サポートとかクロージャのサポートって、
かなり大きな変更のように思うが...
>>12 なんでいきなり言い切ってるんだろうか....
C#がクソな実装したからってJavaがそうなるとは限らんだろうに。
実際、いままでJavaの実装で、このC#のようなクソな実装ってあったか?
おれはもしJavaで同じことやったら、実行速度上のデメリットがあっても、
ソースコードとの一致を取って、ループの度に匿名インスタンス生成を
選択するんじゃないかと思う。
それがMS一社で決めてるC#と、コミュニティで決めてるJavaの違いじゃ
ないかと。
それってruby の yield? Genericsみたいにもめても、何とかなるんじゃない?
GenericsってJavaのほうが実装早いだろ
Genericsはそんなにクソでもないと思うがなあ。 イレイジャのこと言ってるんだけど、妥当な妥協ポイントだと思うよ。 おかげでcommonsとかそのまま使えてるわけで。
>>11 この新機能ってJSRで言うとどれなのかリストあるのかね?
19 :
(・∀・)キタコレ!! :2006/05/19(金) 12:01:51
20 :
デフォルトの名無しさん :2006/05/19(金) 12:19:32
要は不良債権処理でしょ。マクネリもクビ切られるほどSunがヤバイ状況だから。
まくにーりーって会長職にいるんだけど・・・?
Linuxディストリにも標準バンドルされる、というのは良いことだな。
24 :
デフォルトの名無しさん :2006/05/19(金) 20:21:37
「JavaVMは汎用OS上で動かさない」---JRockitの開発マネージャにJavaVMの今後を聞く
---今,JavaVMにどんな機能が求められているのか
環境の変化に対応しなければならない。それは「サーバー仮想化」という動きだ。
VMwareやXenなどのHypervisor技術に基づいた仮想化ソフトを利用するケースが増えている。
一つのハードウエア上で多くのアプリケーションを動作させることになるが,
単に動作させるだけでなく,アプリケーション間の干渉がないようにすることが求められている。
そのためにはアプリケーションごとにリソースを制御しなければならない。
---リソースの割り当てはOSが担うのではないのか
その通り。だが汎用OS(WindowsやLinuxなど)では力不足だ。実行時に(プロセスごとの)
優先順位を付けることはできるが,一定量の(メモリー,CPU,ネットワーク帯域などの)
リソースをアプリケーションに確実に割り当てることはできないのが実情だ。状況によっては,
メモリー上のデータがディスクに書き出されてしまうこともある。そうなれば性能は大きく低下する。
---そうした問題をどうすれば解決できるのか
“汎用OSを利用しない”というアプローチがある。それを当社では進めている。ハード
ウエア上でHypervisor(技術に基づいたソフト)を動作させ,その上にJavaVM専用のOS
「Bare Metal」(開発プロジェクト名),さらにその上でJavaVMを動作させる。そのよう
な動作環境において,JavaVMごとにリソースを確実に割り当てるという方法だ。汎用OSを
利用しないので確実にリソースを割り当てることが可能だ。JavaVMから見るとBare Metal
はOSに見えるが,汎用OSの機能は備えず,一つのJRockitプロセスを動作させるのに必要
な機能のみ提供する。
http://itpro.nikkeibp.co.jp/article/NEWS/20060519/238478/
>>24 つまりどうなるの?
VMとOSの間に仮想化ソフトをかますってこと??
JRockitって、いつの間に無償になってたんだ
>>12 >>13 なんかあちこちで勘違いされてるっぽいけど、C#2.0の匿名デリゲートの
仕様は、(レキシカル)クロージャとして妥当だよ。レキシカルクロージャは、
(実行時ではなく)生成時の環境をキャプチャするので、
>>12 のリンク先の
ような挙動は、極めて普通。Schemeのlambda式によるクロージャや、
RubyのProcオブジェクトによるクロージャの挙動と基本的には同じ。
あと、C#の匿名デリゲートの振る舞いについては、langsmith MLの197から 始まっている議論が参考になると思う。
そもそもレキシカルスコープというもの自体が、プログラマの感覚から 離れててコンピュータの都合に合わせているもののように思う。
>>29 そういう考え方ができないとは言わないけど、歴史的に見れば、逆だと思う。
プログラマの都合に合わせるためにできたのが、レキシカルスコープ。
初期のプログラミング言語のほとんどが、グローバルスコープしか無い
のに対して、最近の言語のほとんどがレキシカルスコープを採用している
のも、それを示していると思う。
レキシカルスコープだけに歴史・・・いやなんでもない プロパティサポートとか次世代の話続けて
じゃあ、プロパティの話を。プロパティ自体は、そんなに大きな変更ではない と思うけど、どうやって取り入れるんだろうね。簡単に考え付くのが、Groovy みたいにx.hoge -> x.getHoge()、x.hoge = y -> x.setHoge(y)とコンパイラが 変換するというもの。これなら言語仕様の変更は最小限で済みそうだし、 Java VMも変更する必要が無い。ただ、プロパティと同名のフィールドが あった場合にどちらを優先するか、とかいくつか考えることはあるが。
>>30 すまん、Perlでいえばlocalとmyを逆に考えて書いてしまった....
レキシカル=ローカル だよな。
しかし
>>12 の例で言えば、
delegate { Console.Write ("{0} ", i); };
ってのは、ループカウンタ i の値をクロージャというもんのコンストラクタに渡したような
もんであり、 i という変数を渡したわけじゃないんじゃないか?
i がそのまま参照として渡されたような印象をうけるC#の動作の方に違和感があるん
だけど。
またレキシカルの話題をかいちゃったので、プロパティの話も書くね。
おれはGroovyの@Propertyみたいなのを採用するのかな、と思う。
>>32 のいうように、x.hogeとかいう部分はあくまでx.getHoge()のままで、
getter/setterの定義を「@Property hoge」みたいな感じで定義できる、
とかシンタックスシュガー的なもんなのかなあ、と。
モジュール化の話は詳細が出てたね。
共有ライブラリで、外部に提供する関数名を限定できるみたいに、
どのクラス、どのメソッドをエクスポートするか定義できるようになる
みたい。
パッケージにスーパーパッケージみたいなものを定義できて、そのなかに
複数のパッケージをまとめて、しかも外部から見えるのはこのクラスとこの
クラスね、とかやれるみたいだね。
Perlのモジュールと似たような感じかな?
一番よくわからん項目は「メソッドリファレンス」かなあ。これなんだろ。
おれは
>>11 に載ってる項目よりも、NIO2がいつになったら出るのかもう、
待ちくたびれるっつうの。はやくJavaからファイルのメタデータにアクセス
できるようにしてくれよ。
>>33 > delegate { Console.Write ("{0} ", i); };
> ってのは、ループカウンタ i の値をクロージャというもんのコンストラクタに渡したような
> もんであり、 i という変数を渡したわけじゃないんじゃないか?
レキシカルクロージャと言った場合、一般的には、まさにiという変数
そのものを渡すようなものを指す。もっと知りたい場合は、Schemeや
Rubyなどの、クロージャを持っている他の言語について調べてみると
良いと思う。
ちなみにこのような仕様になっていることによって、どんなメリットがある
かというと、例えば、次のような「制御構造」を抽象化したライブラリを
作れるという点が挙げられる。JavaやCなどの言語では、制御構造は
あくまで組み込みのものだけど、クロージャがある言語では、新しい
制御構造を提供するライブラリを簡単に作ることができる。
int sum = 0;
list.each(delegate(int i){
sum += i;
});
Console.WriteLine(sum);// listの要素の合計を出力
getとsetでプロパティがいいと思います
>>36 あ、なるほど、sumという外側のローカル変数そのものが渡っているというイメージね。
参考になったよ。逆に言えば、もともとアクセスできるものを引数で渡している
>>12 の
例が、ちょっと使い方を誤ってるということかな。
言語レベルでのXMLのサポートって、 E4Xみたいなもんが乗るのかな?
>>39 なんか、文字通りJavaのソースの中にXMLをそのままかけるらしいぞ。
イメージ的には
XML data = <test><dataset><key name="test"><value>test</value></key></dataset></test>
とかそのまま書けるって感じというか。
正直、まだ利点を見いだせない。シンプルなjavaを複雑にしてないだろうか?
VB9にも似たのがあった気が。 誰がつかうんだろう
Java的には、クロージャって引数の数によって識別されるRunnableが あって、いままでいろんなものでそれぞれリスナを作ってたところを、 そういう共通的なRunnableを使って実装する、というイメージなのかな、 という気がした。 inputFile.eachLine( closure(String line) { 行の処理 }); ってなことだよね?
そんなん入れるならヒアドキュメント入れろ
まあ なんたら.execute( new Runnable() { public void run() { ほげほげ } }); って長くてうざかったし、そのシンタックスシュガーを提供してくれる だけでもうれしいかな。 Wicketだとこの手の書き方大量にするんで.... );
もうJavaの拡張はいいよーまた覚えることが増えるだけじゃん
こんなの初心者はついていけないぞ。教えきらん。
>>34 俺もそう思う。たんにgetter/setterの定義を書かなくて済むようになるだけで、
x.getXxx() が x.xxx と書ける訳じゃないと思う。そこまで気が利くとは思えん。
>>36 その例は「制御構造」とはいわないのでは?いうのかな?
>>40 はげどう。JSONサポートならほしいけど、XMLサポートはいらね。
>>43 うおー超はげどう。ヒアドキュメントはだれも要求しないのか?
>>46 いや、 x.xxxだったらpublicのフィールドあったときかぶっちゃうじゃない記法www
>>47 publicのフィールドがあればそっちをつかう、なければsetter/getterを使う、というルールでいいんじゃない?
あるいは逆に、setter/getterがあればそれをつかい、なければフィールドを探すか。
どっちにしろ、どうルールを決めるかの問題。
いらないけどね。
それより、配列や文字列の長さをELからも参照できるようになってほしい。
str.getLength()じゃなくてstr.length()だから、ELからはstr.lengthとは参照できない。
関数使わなきゃいけないのなんてかっこわるい。全然オブジェクト指向じゃない。
シンタックスシュガーでいいのでは? だからべつにgetやsetをかくと重複していますというエラーがでればいい isをどうするかは今でも同じ話だしな 互換性を考えればコレしかないかと どのみちIDEの機能で意識はしてないけど、プロパティ扱いでまとめてくれると見やすいからね 折りたためるようになってくれればいい
>>36 その例は「レキシカル」クロージャの有益な例にはなってないよね。
クロージャの有益な例というだけで。
>>30 それは少し極端かな。両方の理由があった。
効率のいい実装、デバッグしやすい意味など。
>>48 そのlengthもプロパティで解決だね。
>>35 メソッドリファレンスは、
単純な(doAction()のみなど)Listenerを設定する時に、
extends 〜Listenerなクラスを定義しなくても、
既存のクラスのメソッドをそのまま指定できるんでしょ、たぶん。
C++でいうところのstd::mem_fun_refじゃないかと。
boost::signalsと一緒に使ったりする。
>>40 そいで for (XML d : test.dataset[0].key) { System.out.println(d.key.value); }
とかアクセスできたらまんまE4Xじゃないか。俺的には超OK。
>>50 36だけど、例として挙げたプログラムだと、レキシカルクロージャの特徴で
あるキャプチャされた変数が無限の寿命を持つという点を生かしてない
という話かな?確かにその通りではあるんだけど、それを生かしたプログラムは、
Schemeではよく出てくるけど、C#ではオブジェクトがあればほとんどの場合、
代用できてしまうので微妙かなと思う。
>>52 その例を見て思ったんだが、もしかして、プロパティの導入目的は、
言語レベルでのXMLのサポートを、より効果的に行うためなのかも。
>>53 そう。あとdynamic bindingでも、lexical bindingでも同じ意味。
Schemeのようなクロージャは強力すぎるけど、
C++の式テンプレートくらいの機能は欲しいなあ。
C#の匿名メソッドは、
>>12 のページにあるように、
引数に与えられた式を使ってクラスを定義するみたいだから、
変数や関数の参照は、名前呼び出し風って事になるのかな。ちょっと使いにくそう。
> オブジェクトがあればほとんどの場合、代用できてしまう
まさに式テンプレートですね。
Javaに式テンプレート入れると、型システムのルールが、
クロージャの引き数のところだけ変わるから無理そうだけれども…
>>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が表示される
}
}
> 引数に与えられた式を使ってクラスを定義するみたいだから、
> 変数や関数の参照は、名前呼び出し風って事になるのかな。ちょっと使いにくそう。
これは意味がよくわからなかった。もうちょっと詳しく言ってくれるとありがたい。
ミスった。counter1って書いてあるところは、counterの間違い。
もう、マクロでよくね?
>>59 55のコードで大丈夫。実行して、ちゃんと動作することも確認した。
あと、59のコードだと、複数のCounter()を複数回呼んで、複数個の
カウンタを作っても、カウンタの値が共有されてしまうので、まずい。
ポイントは、匿名デリゲートから参照されている外側のローカル変数は、
それが宣言されたスコープを抜けても生きているということ。
>とか読むとめまいしてくるんだけど…
>結論としてはC#のanonymous methodと同じものならJavaにはいらない。
俺はむしろC#のanonymous method的な振る舞いじゃないと嫌だなあ。
あと、anonymous method(というかクロージャ)の振る舞いに関して、
どの辺がめまいがすると感じた?
あのコードみて問題ないと感じるのがすごいな なぜそうなるかは実装側の都合という状態
一番内側のブロックがクラスに変換されるの? > 匿名メソッド@C#
>>59 の二つ目のページ読むとそんな感じなんだが。
>>56 では、Counter()が一番内側のブロックだから、
引数は変換されたクラスのメンバ変数になるってこと?
>>61 >>59 の3番目のリンク先は、仕様書のバグということで問題だと
思うが、1番目と2番目のリンク先の挙動は、本当に問題無いよ。
実装側の都合でそうなっていると勘違いしているようだけど、
レキシカルクロージャになるように匿名delegateを実装したら
そのような実装になったというだけのこと。あと、1番目のリンク先
の人はレキシカルクロージャという概念を勘違いしてて、コメント
欄で突っ込まれまくってる。
>>62 実装としては、一番内側のブロックが…とかいうのではなく、匿名
デリゲートから匿名デリゲートの外側のローカル変数を参照していた
場合、参照されている変数をメンバ変数として持つクラスが生成される
ということ。
>>63 いや、なぜそうなるか、は昔からいわれてたけど
それが本当に書く人が理解でき照るかというのとは別だと思う
書いた本人ならまだしも、他人のコードをさらっと斜め読みして
結果を予想できるかという割れると厳しいかも
>>64 > それが本当に書く人が理解でき照るかというのとは別だと思う
それは確かにその通りだけど、このスレではなんか、匿名delegateの
セマンティクスが実装の都合だという風に誤解されてるようなので、
それは違うんだと言いたかった。
> 書いた本人ならまだしも、他人のコードをさらっと斜め読みして
> 結果を予想できるかという割れると厳しいかも
レキシカルクロージャという概念に馴染みの無いユーザが驚く可能性は
あるかもしれないけど、よっぽどトリッキーな使い方をしてない限り、
どう動くかというのは、簡単に予想できるんじゃないかなあ。
二つ目のページで、 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]か?
delegate自体C#の構文はよくないねぇ
>>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]で正しい
苦労じゃなんて使うんかい
おればかだから
>>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 :2006/05/21(日) 03:37:53
groovyでコード
>>12 の参照先とほぼ同じ書いてみて
↓
groovyで
>>12 の参照先とほぼ同じコード書いてみて
んで、結局Dolphinで対応されるのは どういう機能なわけ。まだ曖昧にも決定してない?クロージャって単語だけが歩いてる?
73 :
デフォルトの名無しさん :2006/05/23(火) 03:13:41
匿名クラスのシンタックスシュガーには間違いなさそうだな。
嬉しい誤算発見 JavaでのサブピクセルAAレンダリングはJavaのレンダリング使うからか リモートデスクトップ経由でも有効だね ピクセルの構成が一致してないとつらいとは思うが
プロパティマンセー obj.setWidth(obj.getWidth() + 1)) なんて書かなくてもよくなりてぇえええ
じゃ、 obs.width = obj.width +1 ; になるわけか・・・・ なんか、VBのProcedureみたい。(VB4の知識で書いてます悪しからず)
>>75 ,76
ほんとにそうなるの?
おれはgetter/setterの定義を書かなくて済むようになるだけだと思ってた。
ソースきぼん。
>>77 むしろそっちがソースキボン。
getter/setter だけなんて、中途半端じゃん。
>>78 いや、ソースはない。「プロパティがサポートされる」と聞いて、どうせgetter/setterが自動生成される程度で、getXxx()/setXxx()は使わないといけないのだろうと思った。それだけ。
>>79 getter/setterの定義よりも、それらにアクセスするコードを書く回数の方が
圧倒的に多いので、getter/setter自動生成だけだと、新しい言語機構を
導入するメリットが少なすぎる。だから、たぶんアクセスするときの便宜も
図られるんじゃないかなあ。
こんなんもいけるんかのう? obs.width++;
>>78 ライトアクセスとリードアクセスを区別して grep できないのはやだなぁ。
>>82 呼び出し階層の検索でいけるんじゃないの? たぶん。
あ、ごめん、これはEclipseの話だな。。。
とはいえピリオドでやっちまうとメンバ変数のwidthとgetWidthメソッドとの判断が難しいよな obs@widthとかobs->widthとかなんか特殊な構文が追加なのかも getsetかかせるよりはいいけどね
>>84 C/C++ で使われてる -> よりは @ に賛成。
Character.isJavaIdentifierStart('@') も false 返すみたいだし、
やろうと思えばできるのかな?
あと、JSR 295 見ると、converter や validator 使って何かやるみたいね?
obs@width = "120"; とかやると勝手に StringToIntegerConverter を
使ったコードを挿入してくれるのかな? とか妄想してみる。
245なんかのProperty Resolver APIが言語に入るんでしょ。 operator.のoverload。 Property Binding API, Method Biding APIなんかも。
>>80 Java��にそんな気の利いたことを望んではいけない。
ヒアドキュメントすらない言語だ、「互換性」を楯にして、最小限の使用追加だけですませるだろう。
しかしほんとに後付けの機能がふえるよな。もうぜんぜんシンプルな言語じゃなくなった。
プロパティに関しても1.1での後付考えかただし1.0はアルファ品質だったしな それでもプロパティはEODでは? 用意するほうはIDEがやってくれるけど使うほうが原始的杉 Genericsは開発効率がよくなりバグが大幅に減るすばらしいものだが 落ちこぼれるやつが多数いる この程度でおちこぼれるのならそいつはこの業種向いてないとは思うのだが ひとつの判断材料にはなるかも lockはsynchronizedのように専用構文がないと厳しいような なんでもそうだが資源解法でfinallyあてにするのは苦しいよな
いますでにgetXXX, setXXXの存在を前提として作られているフレームワークが やまほどあるので、基本的にはシンタックスシュガーになるんだろうな。 obj.prop = xxx とか書くにしても、バイトコード上では setProp(xxx)になってるとか。
そりゃそうだろ
>>88 俺はC++も好きなタイプなので、
Javaの言語領域で機能増えるのは嬉しい気持ちもある反面、
やりすぎて失敗しないのを祈りたい気持ち。
既に十分複雑だからね。抱えているプログラマ層を考えると。
Perlがあんだけ使われてるのみると、記号が増える分には問題なさそうだ。
ヒアドキュメントって、国際化対応とかどうするの?
それでなくても、ヒアドキュメントなんか、めったに使わないからな。 めったに使わないもののためにコンパイラ作りにくくすることもない。
ヒアドキュメントはあかんでしょ なんでヒアドキュメントかっていうと基本的に書く側の都合じゃない そこに書きたいっていう。 視認性は悪くなるし文法なんて無茶苦茶。 あれを使いたくなる理由は、簡易テンプレートエンジンとして使えるからだと思うんだけど テンプレート処理がしたいんだったらIDEとか開発ツールのアシストで 何とかなると思うんですけどね。 ScriptingAPIと同じ扱いでいいんじゃないかと思う。 あれも構造が類推できないスクリプト言語がソースにヒアドキュメント形式で生で埋め込まれてたらと思うとぞっとする・・・
>>94 ちょっとまて、ヒアドキュメントごときでなんでコンパイラが作りにくくなるのだ?
あんなの、字句解析部をちょこっといじれば済む機能だぞ。
おまえ、コンパイラの作り方もわかってないだろ。
>>95 ヒアドキュメントで済むことをIDEとか開発ツールのアシストを使わなきゃいけないということに疑問をもたないのか。
HTMLページをまるごと埋め込むのならアホだけど、テストデータとその期待値を埋め込むのなら
ヒアドキュメントはすごい便利なんだけど。
つーか、「そんな機能必要ない」「IDEのサポートがあれば十分」とかいってるやつらって、実際その機能が追加されたら「これはEoDを実現するすばらしい機能だ」とか言い出すんだろ。
Genericsだって、最初は「C++のテンプレートは複雑だから同じような機能はJavaには必要ない」とか揃っていってたくせに、いざ実装されるとみんなGenericsマンセーなんだよな。
プロパティだって、今までgetterとsetterはEclipseが自動生成してくれるから問題ないとか言ってたくせに、それが実装されると「これは便利だ」とか言い出すんだぜ、絶対。
Javaにない機能は「そんなの必要ない」と言い切り、実装されれば「すばらしい進化だ」と手のひらを返す。ほんと学習しねーよな。
>>93 なんで国際化が必要なん?ふつうにStringリテラルと同じ扱いでいいじゃん。
ヒアドキュメント作るとして、懸念があるとすれば改行記号の扱いぐらいかな?
>>96 だから当時「いらない」と言ってた人たちは恥ずかしくなって黙ってしまって、
今度は別の人が別の機能に「いらない」といってる、くらいの想像力はないのか?
実際まったく同じ人だったらキモイだろう。
ヒアドキュメントはあれば便利だと思う。
一方でコンパイルされたバイトコードの中(つまりはclassファイル)の中に
そのヒアドキュメントの内容が埋め込まれるんだったらダサすぎなのでペケかな。
>>96 > 最初は「C++のテンプレートは複雑だから同じような機能はJavaには必要ない」とか
そんな阿呆な事言ってた奴は居るのか?
少なくとも俺は聞いたこと無いぞ。
erasure よりマシな実装方法もあったんじゃないの? って話なら結構聞いたけど。
100 :
98 :2006/05/27(土) 20:07:46
あ、しかしまあ、String document = ""が自動生成されると考えると さほどヘンでもないか。 しかし一方で、ヒアドキュメントってドキュメント中に変数値を簡単に 埋め込めないとあまり使い道がないと思うんだがどうだろうね。 式言語っぽく${変数名}なんてのを採用すると、式言語パースが必要に なるかな。
Stringで生成されるなら%dとか%sでいいだろ 何のためのフォーマッタだ
それだとあとから変数をセットしなくちゃいかんじゃないか。
>>102 そういうことなら、ドキュメントの生成とその中の文章の埋め込みまで
やっちゃわないと駄目ね
>>96 そのアホが出てくるからコードのメンテナンス性が落ちちゃうんだよなぁ
でもそれは、コーディング規約でやらないようにさせるっていうのなら
ツール用意して・・・・っていう話と比べてもどっちもどっちだと思うが
他の言語で利用されて便利なヒアドキュメントのいいところだけをJavaらしく取り込んでくれれば
いいとは思う。
特殊なコメント記法を入れて、コメントを識別子つけて参照できるようにするってのはどうかな?
/***
<html><body>
ほげひげは、${age}歳です
*/
あ、名前つけんのどうしよう
それよりは、特殊な改行付き文字列定義をかけた方がいいか・・・・
String document = '''
<html>ほべー
げれげれー
</html>''';
うーん、ターミネータがきめうちなだけのヒアドキュメントになったぞ。
>>96 > なんで国際化が必要なん?ふつうにStringリテラルと同じ扱いでいいじゃん。
そりゃそうだよね。
javacのソースの文字コード、
Shift_JISがディフォールトなのそろそろやめてくれないかな…
javacのソースの文字コードのデフォルトは、プラットフォームのデフォルトと 一致している予感。
>>104 LANG=ja_JP.UTF-8
export LANG
馬鹿が涌いてるな。
>>99 そうだね。Genericsに関しては、初期の頃からJavaプログラマの間でも、
Javaの欠点として言われていたし、Javaを拡張してGenericsを導入して欲しいという
提案も比較的初期の頃からあった。まあ、最近になってJavaにかぶれた人で、
ひょっとしたらそういう人は居るかもしれんが、ごく少数だろう。
オプションつければええやん
仕事でコード書くときは、普通レポジトリ中のロケール合わせて
ビルドオプションにもそれ入れておくでしょ?
まぁあの書き方からして
>>106 をしてるっぽいんだが・・・・
>>110 複雑でいらねっていわれてたのは、ポインタと演算子のオーバオードだという記憶だねぇ
それが、今度はとうとう . 演算子をオーバロードすることになるわけか・・・
Parameterized typeもいらないって言っていたヤツいたけど、総じて馬鹿だった。
演算子のオーバーロードまではいかないんじゃない? Java 5がでたときのインタビューかなんかでも、演算子のオーバーロードは Javaを複雑にするので入れたくない、とSunの誰かが答えてたはず(ソース見つからず) プロパティを obj.prop = value で設定できるようになったとしても、それはオーバーロード とは言わんと思うし(シンタックス・シュガーだよね) Dolphinでオーバーロードをサポートするとか言う発表があったんだっけ?
>>99 Gosling自身が「いらない」と言っていたんだけど。Bill Joyは「parameterized typeがあればどんなにいいだろう」といってたけどな。
つか、ほんとに聞いたことないのか。それはいくらなんでも世界狭すぎだろ。
あれか、恥ずかしい過去はなかったことにしたがってる連中か。
EJBのときとかわんねーな。あれも推進派だった連中が今は「やっぱりEJB2は複雑だったよな、アノテーションマンセー」だもんな。自分たちがどれだけEJBを押し付けてきたのか忘れたらしい。
foreach文もそうだよな。foreach文なんていらね、Iteratorパターン最高といってたヤシばかりだったのにな。
ほんと恥ずかしい過去はなかったことにしたいらしい。
foreachは聞いた事ないけど
いやいくらなんでもEJB2が複雑じゃないなんて話は聞いたことがない。 EJB2じゃないけど、Strutsだって「あれは壮大なネタだろ」とか言ってたくらいで、全般的に 冗長なフレームワークは嫌われてたように思うが。 genericsでは何度か見たが、一方でMapがタイプセーフでないことに苦しめられたって 意見もあったわけで、バランスは取れてただろ。 Java言語をシンプルなままにしておきたいという希望は俺にもある。一方で、書くのが楽に なって欲しいという希望もある。一人の中でもせめぎ合いがあるんだから、スレ内でどっちの 意見が出たって不思議には思わんがね。
>>96 ヒアドキュメントがあると、文脈自由文法じゃなくなってしまうからJavaCCとかのパーサージェネレータで作りにくくなるよ。
>>116 EJB2が複雑という意見はあった。しかし、それは一部の開発者のみ。EJBを推進する連中のほうがずっと多かった(理由は「それが標準だから」だとさ)。
Strutsだって同じだろ。雑誌記事みればわかるじゃん。どれもEJBマンセー、Strutsマンセー。
EJBやStrutsを明確に批判したのはRodやTateなどごく一部。日本じゃ皆無。
>>117 単純なヒアドキュメントは字句解析だけで実現できる。パーサはいじる必要ない。
つうかな、これだけ機能がごちゃごちゃ増えてるのに、ちょっと文法たすだけなのがなんで問題なんだ。
今のJavaはコンパイラ作るのがすごい面倒な言語になったけど、それは機能が増えたせいで構文解析よりあとが大変になったからだろ。
それにくらべたら、構文解析までなんて簡単。ヒアドキュメントの追加ぐらいわけない。
ほかにずっと大きな問題があるのを見ないふりして、「パーサジェネレータで作りにくくなる」なんてささいな問題をとりだすなよ。
>>118 少なくとも、ヒアドキュメントは「ずっと大きな問題」じゃないな。
俺はforeachいらねーわ。
>>114 GoslingがGenericsをいらないと言っていたというのは、信じがたいのだが。ソース希望。
Java House MLのアーカイブやその他の場所で引用されていた過去のGoslingの発言を見る限りでは、
Genericsの導入には前向きだったように思える。
あと、世界狭すぎなのは自分の方なのかも、って考えは無いのかね。
>>118 Rubyにあるような、式を埋め込めるヒアドキュメントはパーザをいじる必要があるけどな。
実際のところ、ヒアドキュメントはあれば便利だろうし、使うだろうけど、そこまでこだわる
程の機能か?あと、そんなにヒアドキュメントが本当に欲しければ、こんなところで
ぐちぐち言ってるよりも公式に提案した方が良いかと。Genericsやその他の言語拡張だって、
要望が多かったから取り入れられたわけだし、ヒアドキュメントも場合によっては取り入れられる
こともあるかもしれん。
Goslingが否定的だったのは、
C++のtemplateの特殊化やC++,CLOSなどのgeneric functionだろ。
operator overloadはかなり初期から批判的。
Bill JoyとGoslingが"暴力沙汰"になりそうになったのは、
Billがgenericsはゆっくり考えることにして、generics抜きでJavaをshippingしようとしたから。
Goslingは、進行はJCP任せだけど、collectionのreliabilityを増すと積極的。
C/C++に対する大きなアドバンテージと考えているから。> reliability
http://www.gotw.ca/publications/c_family_interview.htm
>>124 本題からはずれるのだが、C++のgeneric function(=テンプレート関数のことか?)
とCLOSのそれ(=マルチメソッド)は全く意味合いが異なるのでは。前者は静的に
呼び出しが決定され、後者は動的に呼び出しが決定されるので。
性的か童的か違うと「全く意味合いが異なる」のか? 「関数テンプレート」が正式名称な。C++03で間違っている部分も修正。
>>126 全くというと言いすぎだったかもしれんが、少なくとも意味が異なるのは事実。
Javaのメソッド **オーバーロード** とメソッド **オーバーライド** が異なるのと同じ。
関数テンプレートが正式名称というのは、知らんかった。すまん。
>>124 は、わざわざ"generic function"って書いているんだから、
クラスに属さない多相型の関数のことを言っているのは自明だよ。
性的なw特殊化はわざわざ別に書いているし。
>>128 言いたいことがよくわからないのだが、C++には関数テンプレートとは
違う、"generic function"があって、それは、CLOSのように、実行時に
オブジェクトの型に応じて、動的にディスパッチしてくれるのか?
"generic function"をCLOSの意味に制限して、
意味不明って言っても仕方ないじゃないの?
一般名詞としての"generic function"は、C++のWGでも出ているよ。
例えば、
http://www.research.att.com/~bs/evol-issues.html generic programmingで使うparametric polymorphismを持った関数が"generic function"。
知らないのはよっぽどうとい人だと思われ。
>>130 いや、"generic function"をCLOSの意味に制限したいわけ
じゃなくて、CLOSのそれとC++のそれは意味が異なる機能なのに、
124が
> C++,CLOSなどのgeneric function
と、C++とCLOSのgeneric functionが同じ機能かのように言っていたので、
つっこんだだけ。
>>123 ヒアドキュメントはあくまで例のひとつ。
「そんな機能いらね」といってたくせにそれが実装されると意見を180度変えるJava屋さんが多すぎてうざいというのが主張内容。
JCPに提案しろとかポイントはずれてる。
>>131 > C++とCLOSのgeneric functionが同じ機能かのように言っていたので、
FUDかよw
134 :
133 :2006/05/28(日) 22:52:36
>>133 132だが、いい加減しつこいかもしれんが、どの辺がFUDなんだ?
>>135 間違えた。「132だが」は、「131だが」ね。
>>132 確かにポイントがずれてたかもしれん。
でも、結局、
> 「そんな機能いらね」といってたくせにそれが実装されると意見を180度変えるJava屋さんが多すぎて
というのは、そんなに居るかなあとしか自分は思えない。あなたの
周りはそういう人ばっかりだったのかもしれんが、全体として
どうだったかというのは、ソースが無い以上、わからんし。
えーい、IDが無い板でそういう話題はやめーい。 技術の話でぶつかるならともかく!!!!
まあ、ヒアドキュメントは実装されても意見を180度変えるJava屋は少ないだろうな。 いらね。
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用だからさ。
>>137 まさに、すぐ下にいるじゃん。
>>139 ,140
今まで幾度となく同じことが繰り返されてきたし、これからもおんなじ。
つまり、
>>43 がXMLリテラルがあればヒアドキュメントいらね、って言い出すと予言してるわけね。
ヒアドキュメントはもう話題としてはいいだろ。つまんねえし。
>>142 ヒアドキュメントなど、間違いなく不要。
あってもなくてもどうでもいいや。 自分ならヒアドキュメントで書きたくなるような文字列はコードと分離するけど。
まあつまりさ、genericsにせよヒアドキュメントにせよ、あれば使うし無ければ 今を受け入れるか、Javaを使わないしかないだろ。 おれはヘタレなのでMapに想定していないオブジェクトをつっこんじゃって、 キャストで落ちるなんてことをよくやってたからGenericsはすごくありがたい けど、なけりゃないで、無いんだからどうしようもないから受け入れてただけ。 Genericsがないからまともなコードが書けません、なんて仕事では言えない んだし。
いや、ヒアドキュメントは、あっても使う機会がない。
Ruby並にいろいろできるなら欲しいな、便利だし
スクリプト言語と比較されてもなあ…
ま、俺も
>>146 と同じでどっちでもいいや。どうせ使わないだけだし。
つうか、Ruby並にいろいろやりたいならJRuby使えばいいだけじゃん。
時々でいいのでGroovyのことも思い出してあげてください。。。
あ、Groovyってヒアドキュメントなかったかも....orz
154 :
デフォルトの名無しさん :2006/05/30(火) 09:34:55
>>147 List<Map<String,Object>>とかだとListとだけかかれるとソース追わないと中身確認できないのはきつい
ドキュメントでしっかり書いてくれるところならいいがListとだけかいているとぶち殺したくなる
もう1.4時代にはもどれんよな
>>153 Groovyには、式を埋め込める複数行文字列リテラルがあるよ
こんな感じ
def i = 100
println """
Hello ${i}
"""
これをヒアドキュメントと言っていいかは正直わからんの
だが、機能的には、文字列の終端となる記号を自由に指定
できないことを除いて、ほぼ同等だと思う
ヒアドキュメントは*絶対*に入れて欲しくない こんなもの、保守やデバグを考えるとぞっとする チームで禁止しても絶対使う奴が出てくるから嫌だ
どうせコンパイルして逆コンパイルしたら普通の文字列リテラルになるから問題なし。
ヒアドキュメントいれただけで保守やデバッグができなくなる
>>156 のレベルに乾杯
159 :
デフォルトの名無しさん :2006/05/30(火) 18:06:25
まぁお行儀の悪いプログラムを推奨してるかんじだしあまりいいものではないな
コンパイラ機能とあわせて使うと意外と便利かもよ てかコンパイラ機能ってクラスキャッシュ直ぐ満杯になる欠点とかないの?
ヒアドキュメント入れるときの妥協点として コンパイルオプションでヒアドキュ封じができるようになればちょうどいい感じで導入できないかね? プロジェクトで使う人もこまんないんじゃない?
そういう問題じゃない。 というかそこまでして導入するもんでもない。
プロパティは、 言語として加わるのか、 XML対応としてXMLの属性にgetValue/setValueするAPIがJDKに加わるのかどっち? 関連JSRは、 JSR 227: A Standard Data Binding & Data Access Facility for J2EE(TM) JSR 245: JavaServer(TM) Pages 2.1 JSR 252: JavaServer Faces 1.2 JSR 295: Beans Binding あたり? Expression Language周辺
>>40 なんだからPerlの q!文字列!やPHPの'文字列\n$変数'と'文字列$変数'との
違いを表してるブツみたいだな。
PHP的なものならまだしもPerlのq!文字列!みたいな
混乱するブツになるのは避けてもらいたいところだよな。
ダブルクォーテーションが無いだなんて、
あれ使う前に何か宣言でもするのかな
>>46-47 そのまんま@Propertyアノテーションとして使えばいいやんか
>>48 C#みたいな表向きは set/getと書くだけでプロパティが使えるが
実際には内部ではプロパティ変数名がたとえばtest のとき実際にはGet_test(), Set_test()
というメソッドが定義されているとコンパイラに解釈されるという奴でどうにかなるんだろう。
ただし、このときGet_test(), Set_test()という名前のメソッドを定義するとC#ではエラーになるが。
>>167 そういう暗黙の定義が適用されるのは、
対XMLデータとか、シリアライゼーションとか、
定義をクラスライブラリ側が持っているケースでしょ?
それは既にBeansやServer PagesのELであるよね。
JavaDocのtagもpropertyが増えてる。
Dolphinのは、言語がproperty採用するって事なんじゃないのかな?
要するに、setter/getterはプログラマが記述して、
フィールド参照がsetter/getterに置き換わるヤツ。
>>96 遅レスながら激しく同意。ほんとJavaには呆れる。
>>165 >
>>40 > PHP的なものならまだしもPerlのq!文字列!みたいな
> 混乱するブツになるのは避けてもらいたいところだよな。
例えばの話だが
"<p id=\"hoge\" onmouseover=\"hige('fuga')\" class=\"hage\">";
q{<p id="hoge" onmouseover="hige('fuga')" class="hage">};
どっちが見易いかっつう話だ。
q{}とは違うが正規表現の場合も考えてみ。JavaよりC#の@の方がまだマシだろうに。
>>75 そんな書き方するのがいやだったら
インクリメントできるメソッドを定義したほうがいいんじゃないのか?
>>96 いっておくがC++のtemplateとJavaのgenericsとはまったく別もんだよ。
比較サイトでも似て非なるものであると書いてある。
よって全然手のひらを返したことにはならんよ
>>96 ヒアドキュメントは下手な奴が使うとソースコードを読みにくくするからな。
Perl厨が書いたコードみたいにな。
>>172 C++ templateの重要な特性である、コンパイル時プログラミング
ができるという機能をJava genericsは持って無いし、別物と言って
良いだろうね。
>>114 だからC++のテンプレートはJavaのGenericsと全く
同じではないと何度言ったら(ry
だからあれほど言ったものを
しかも今のJavaにも"foreach"なんてキーワード出て来ないし
>>122 >>114 はGoslingが「C++Templateの機能すべてはいらない」と
言ったのを勝手に「Genericsはいらない」と誤認しているだけなんだよ。
恥ずかしい奴だから
for (型 変数名 : コレクション) 文 いらねーよ、こんなの。
>>139 ま、Perlそっくりそのままのヒアドキュメントが実装されたら
あれだな。
XMLのCDATAセクションみたいなのがJavaソースコードに紛れるのかね
だとしたらJavaソースコードがまるっきりXML文書の一部になる?
>>178 お前らがforeachが無いんですけど(^^;;とか騒ぐから
>>170 そんなことをするんだったら別ファイルに書くか
JSPやカスタムタブライブラリやJSFやApache Struts
やJakarta Velocityを使うがな
>>174 もっと決定的な違いがあるよ。
C++厨がJava Genericsではこれができないと
愚痴を零している数々の機能。
多重継承ができないからといってブツブツ文句をいうC++厨が
いるようにJava GenericsがC++Templateとはあまりにも
違うことに文句をつけている変な奴がまだまだいるのさ
>>182 JSFやApache Strutsはヒアドッキュメントの代替にならない件
昔、ほんとにいらないのか、パクリを認めたくないのか 「いらねーよ、こんなの。」と言ってたものが 今までも、そしてこれからも追加されていくわけやね。
まあ、ヒアドキュメントが追加されることはないから心配するな。
そら便利ならそうなるわな。しないほうが馬鹿と言われる。
プロパティに関してはみんな欲しいと言ってたわけだしね。 XMLリテラルはいらねーともいるとも言ってない晴天の霹靂
J2EE方面の人の声が大きくなってきているね。
>>183 > Java GenericsがC++Templateとはあまりにも違うことに文句をつけている変な奴
ただ、Java Genericsは、Java仮想マシンの互換性を保つために、いろいろと
面倒な仕様になっているので、文句を付けられても仕方無いと思える部分もある。
特にC#のGenericsと比べると、その部分が際立つ。
金をだすのはエンタープライズ方面
192 :
デフォルトの名無しさん :2006/06/04(日) 11:05:46
いいかげんジョイスティックPureJavaでさぽーとしてくれねぇかなぁ デスクトップに目を向けています!なんてよくいえたものだ>5.0 1.4のほうがクライアントサイドで大幅によくなってたが、5.0ほとんどかわってねーし 6もほとんどかわってねーな グループレイアウトが標準になるくらいか
193 :
デフォルトの名無しさん :2006/06/04(日) 11:06:46
ところでなんでこの時間だけいきなりレスふえたんだ? しかも亀が多い
>>180 foreachはないけどfor(;;)やfor(;)はあるってことで
GenericsはあるけどC++Template相当のものはすべては無いってことで
「否定していた癖にJavaにforeachやGenericsが出た」と主張した奴は
馬鹿って事で
>>194 で、処理中にインデックスがいると分かり、for (int i = 0; i <
に書き直したり。これがアホくさい。言語レベルで今何番目か
分かるようにしてほしい。
>>184 それでも今Perl臭いヒアドキュメントの必要性は
感じないな。
JSFやStrutsがヒアドキュメント代わりになるというより、
>>170 のようなHTMLコードをいちいちJavaコードの中に
埋め込むというくだらないことをしなくて済むという観点から
>>184 の主張が現れている。
>>185 追加されるっていっても過去の言語にあるものとは
違うモノだから。
enumだってそうだし。
C/C++のenumはJavaのenumとは似て非なるものであって
Genericsが登場したからこそ実現できたものであって
C/C++のenumとくらべたら断然機能的で優れている。
よってC/C++のenumとJavaのenumとはまったく別のものである。
だから、かつてJavaにeumがいらないという発言があったのは
「Javaの新しいenumが要らない」というのではなく
「C/C++で実装されている仕様のenumが要らない」ということだったのだ。
>>188 みんなって誰?
あれの需要はそんなにあるとは思えないな
>>192 ハードウェア方面にまでPureJavaをサポートするのは
まだまだ先だろ。
JiniやらJava Communication API をどうにかしないと
>>197 それはIteratorの意味が無いとちゃうか?
何番目を知りたいかだなんて使い方が間違ってると思うぞ。
アルゴリズムや作りたいものによるが、
コレクションの分割とか考えるといいかと
そもそもコレクションの機能にランダムアクセスなんてないだろ interface RandomAccessとinterface Collectionは別の機能だ
>>203 間違ってるか? というか、拡張 for 使いまくった?
えーと、そうだ、おまい今まで組んだものはループは全部 Iterator か?
例えば、画面に行No出力する場合はどうする?
JSTL とかテンプレート言語が無い場合ね。
>>197 俺もインデックスが必要になるのがあとで必要になって書き直したりするよ
でも、イテレータパターンであることを言語的に保証するものだからありでは?
インデックスだと中身まで見ないと流れが把握できない
>>201 キーボードやマウスと同じ一般的な入力インターフェースなんだが
ついでにMSXのようにキーボードもジョイスティック0番とかでつかえるようにしておけば
コードを分ける必要もなくていいのだが
同人ソフトとかでJava製の物がほとんどない原因のひとつでは?
フルスクリーン等は1.4でサポート、じゃヴぁSoundは1.3でサポートされやっと使い物になってきたが
インターフェースがないのではね
1.1時代+JNIでなんでもできるということはなかったはずだし
JNIも万能ではない(スタックサイズ制限で引っかかる)からね
VM自体のリコンパイルが必要になるし、さすがにそれは現実的ではないだろう
> 同人ソフトとかで を例に示されてもワカラネw 分かるのが普通か?
「デスクトップ分野にも力を入れています」は口だけ
そんな大した手間じゃないと思うけどな<パッド・スティック対応 PadListenerみたいな標準インタフェース用意して、メーカー側が対応するSPIをサイトに置いとけばいいじゃん
>>203 > 何番目を知りたいかだなんて使い方が間違ってると思うぞ。
それは言い過ぎだろw
けどループ構造は代えずにカウンタ一つ用意すればいいだけだよな。
>>210 カウンタを用意するとループのスコープの外に変数を作ることになる。
なんかいや。
カウンタ用意したらイテレータパターンの意味ないだろ
何番目か意識することなく取り出すのが目的なんだから
カウンタ使いたければふつうにfor( ; ; )すればいいだけ
>>211 2軸32ボタンまではOSレベルで標準サポートされてるはずだ
だから、Iterator パターンでも、必要であれば、カウンタが とれればいい。freemarker のように。
Iteratorのコード書くよりは拡張forの方がはるかに楽な件 Iteratorのコードの場合、カウンターが必要なら拡張for使わなくてもIteratorかカウンタ変数かどちらかがスコープの外に出る件
ジョイスティックが「デスクトップがんばる」の範囲に入ってなくてもほとんどの人が困らない件
>>215 ここで言ってるIteratorは拡張Forのことだという件
>>206 >
>>201 > キーボードやマウスと同じ一般的な入力インターフェースなんだが
> ついでにMSXのようにキーボードもジョイスティック0番とかでつかえるようにしておけば
> コードを分ける必要もなくていいのだが
Adapterパターンでうまいことラッパークラス作れよw
>>216 ほとんど外の人がデスクトップ普及熱の根幹である件
>>219 みんなラッパつくってるだろ
それが面倒だということだろ
というかJ2SE5.0でデスクトップ改良部分ってなんかあったっけ? 1.4は明らかに今後がんばるんだなぁという光が見えたわけだが
ラッパならどこかでダウソできたような気がする
5.0は思いつかない。 6はピュアGUIやスクリプトなど一応の発展はある。
Google Web Toolkitのような使われ方も次世代Javaか?
>>222 みんなOceanに腰を抜かしたはず
あのセンスに。
たぶん、アレで識者は「これは俺が何とかせねば」と奮起したと思われる。
インデックスが必要ということはカウンターが必要であるということで
コレクションを操作するという事とは別の要素が必要になったということ
繰り返し処理と、カウンタを使うという意味を切り分ける意味で
俺は別にカウンタを用意している。
カウンタも0からスタートさせたい場合や、1からスタートさせたい場合など色々。
もし、繰り返し処理で使うなら、拡張機能をさらに入れたい。それで
・カウンタの初期値
・カウンタのステップ
を決めたいのだが、そうなるとforeachタイプforにさらなる
文法拡張が必要になるなぁ。
for( Object i : list : 0 : 2 ){
}
あ、イテレーションのコンテキストにアクセスするのに文法も必要か・・・
コレは一筋縄じゃいかんねぇ
>>226 それだよ、それ。そういう拡張が欲しい。
スコープもループ内だしな。
>>226 もういっそのこと、Schemeのようなマクロを導入して、
そういう拡張は自分で定義してね、とするとか
まあ実際にはあり得ないだろうけど
229 :
デフォルトの名無しさん :2006/06/04(日) 19:02:34
>>228 そういうのを要求する人はjavaの拡張を待つまでもなく、もうm4とかの
マクロプロセッサを使ってるんじゃないのかね。
Java のスレの中では初心者質問スレを除き、このスレが一番伸びている件について。
>>226 別に、普通に0ベースか1ベースのインデックスさえ手に入れば、
n + m * indexで、nまたはn+mからスタートしてステップmの
カウンタが手に入るじゃないの。
>>228 この程度ならマクロなんて必要なくて、レキシカルクロージャが
導入されていれば、簡単につくれるんだよねえ。
JavaSE6も近いからな 関係ないか
中途半端な知識で参加できるからだと思われ
Jakarta Velocityの変数$velocityCountみたいなのがあれば いいんでね?
いらん
普通はいらんね
>>231 レキシカルクロージャがあれば、その程度なら簡単にできる
というのはその通りだが、クロージャだけでは簡単にできない
拡張もある。で、諸々の拡張に対する提案全部を取り入れてたら
きりが無いので、マクロを定義する仕組みだけ用意して、あとは
ユーザが勝手にマクロを作ってねとしたらどうか?というのが228
で言いたかったこと。まあ、マクロは濫用される危険性が大きい
機能でもあるので、Javaのような言語に実際に入ることは無いだろうけど。
Freemarker の変数 $〜_index みたいなのがあれば いいんでね?
イラネーよ、そんな糞機能
SPECJBB2000なんて字樹上にそぐわないベンチ使ってるのが怪しい 2005なんでつかわないのだ 1.2.2でノーマライズとかいてるのもあやしい 1.3.1とかなり違うはずなのだが
>>213 >カウンタ用意したらイテレータパターンの意味ないだろ
>何番目か意識することなく取り出すのが目的なんだから
>
>カウンタ使いたければふつうにfor( ; ; )すればいいだけ
これはちがうだろ。Iteratorは、データ構造に依存せずに繰り返しのためのインターフェースを提供することが目的。
Iteratorが考えだされるまでは、ListやArrayやTreeといったデータ構造ごとに、繰り返しの操作が異なっていたし、それが当たり前だった。
それがIteratorによって、どれでも同じインターフェースで繰り返しが行えるようになった。
Iteratorの目的は「繰り返し」の抽象化であり、そのこととカウンタとはぜんぜん別の問題。
ListやTreeに対してはIteratorとカウンタの両方を使うべきであり、for(int i=0; i<count; i++)とかするのはバカ。
>>243 カウンタ用変数を外側に用意すれば?
もちろん{ }で一段スタック入れてスコープ狭める
>>243 Iterator 大好きなんだな。
別にそこまで無理してデザパタ使わなくてもいいよw
ArrayListから配列取り出して //こっちのほうがわかりやすいから とコメントしてforで回してるソースを見たときは声出してワロタ
デザパタ厨的には、IndexableIteratorというデコレータを作るのかな。
Iterator パターンは内部を意識することなく順次取出しするのが目的であって 何番目とかの処理を意識させるのは必要ないからな あなたは何番目ですか?がロジックで必要なら自前で用意するだけ 今までのfor構文でイテレータ使ってたのと同じでこれはかわってないだろ
>245 ワロシュ
>>248 似たようなもんがJakarta Commons Collectionsになかったか?
Map用のfor文が欲しい for(String key,String value : map) { 文 } みたいな
Entryでいいじゃん for(Map.Entry entry : map.entrySet() )
Iterator → デザインパターンってヤツは誤解しているぞ。 IteratorはCLUで70年代からある。
>>253 MapをIteratorに変換するか
MapとListが一緒になった、Jakarta Commons Collectionsにある
あのクラスを使えば医院ジャマイカ?
>>255 GoFの一つにIteratorパターンがあるからね。
デザインパターンとしてのIteratorは後から出たモノだとおもう
>>254 それだと、Entryからkeyとvalueを取り出さなきゃいけないじゃん。
253だとその手間が省ける。それが大事。
そこまで大事か?
>>259 まあ、あれば便利かもしれんが、そこまで重要な機能ではないわな。
foreachに比べると、使う機会も少ないだろうし。
つうか、
>>253 くらいのことは簡単に実装できるんだから、拡張for文を導入するときに
いっしょに導入してくれればよかったんだよ。
そのくらい、ふつうに気がつくだろ。なんで直接Mapが使えないように限定するのかさっぱりわからん。
>>261 そんなこと言ってると
あれも入れろこれも入れろで収拾付かなくなるから。
Entry回せばいいじゃん、極一部のクラスのためだけにそんな馬鹿な仕様取り入れるかよ Collectionはデータ構造に関するJavaの主要フレームワークの根元だから特別視されるだけだ
try-open-finally-closeも特別扱いしてほしい。
try-finallyデストラクタを強制するためにも
openとcloseは例外を投げる設計にしたほうがいいんだよな
>>264 どんな感じの?
>>262 そのくせプロパティやらXML直書きやらは導入されるんだ。
そっちのほうが収拾つかんわ。
>>266 Map の foreach なんて generics+プロパティ導入で e.key と e.value で済むんだから
わざわざ入れなくてもいいだろ。
クロージャが出来るそうだから、 foreach(aMap, クロージャ); でいいよ。
クロージャは導入必至。 オヤジJavaプログラマの「クロージャは苦労じゃ」のネタは既に あるものとして色々なバリエーションが考えられてるからです。 どんなものでもイイが、上のネタを生かすために簡単なものであっては困る事だけは確かだ。
クロージャの正しい概念ってどんなの? ECMAScriptだとthis参照を遅延生成メソッド内に埋め込むやり方で使ってるよね でもJavaのthisってコンテキスト参照じゃなくてインスタンス参照でしょ?
XMLリテラルがどういう利点があるかわからないんだけど。
>>271 構造を持ったデータを簡単に作れることじゃないの?
今までせこせこ、ListとかMapとか組み合わせてたような奴
アノテーションにxmlリテラルが使えると、外部xmlファイルが必要なくなるのは嬉しいか嬉しくないか微妙。
使い勝手が悪そう
ヒアドキュメントすら否定するのにXMLリテラルは受け入れるJava厨乙
>>276 受け入れてないよ。だからヒアドキュメント否定するんだろ。
とか言いながら、いざ実装されるとマンセーするのがいつものパターン。
ヒアドキュメントはイラン。 ところで、クロージャーって、単なるシンタックスシュガーじゃなくて、スクリプト言語用のバイトコード拡張を利用する構文じゃないのかな。
>>279 それは激しい・・・
ヒアドキュメントと変わらんじゃないですか
スクリプト言語のシンタックスがわからない以上・・・・
>>279 それはまず無い。スクリプト言語用のバイトコード拡張(invokedynamicだったか)は、
クロージャの実装に使えるようなものじゃない。クロージャが単なる匿名クラスの
シンタックスシュガーになるんじゃないだろうというのは同意だが、クロージャは、
別にバイトコードを拡張しなくても、既存のコードの互換性を保った形で追加できるはず。
invokedynamic(JSR292)は、 そもそも動的メソッド呼び出しだけだから、 Funarg問題を解決してくれるようなもんじゃないしね。 # Hotswappingの方向で進んでいるからslot参照も付くんだろうが。> JSR292 どういう実装するかよりも、どういう仕様になるかの方が… たぶん、inner anonymous classの参照しているlocal変数、実引数、 例外処理ハンドラ引数がfinalでなければいけないという制約が closureの場合は外れるかどうか。 Inner anonymous classを使った実装になるのは確実でしょ? 後はsyntax sugerでしょうね。 Closure出来たら、コレクションも新しくしないとねw
283 :
デフォルトの名無しさん :2006/06/07(水) 11:45:10
>>280 三行とも意味がわからん…w
Groovyの文法は既に定義されているし
>>282 281だが、
> たぶん、inner anonymous classの参照しているlocal変数、実引数、
> 例外処理ハンドラ引数がfinalでなければいけないという制約が
> closureの場合は外れるかどうか。
外れると思うなあ。じゃなきゃ、セマンティクスとしては
今までとほとんど変わらないんだから、わざわざクロージャ
を追加するなんて言い方はしないでしょ。あと、細かいが
実引数は仮引数の間違いでは?
> Inner anonymous classを使った実装になるのは確実でしょ?
> 後はsyntax sugerでしょうね。
実装としては、Inner anonymous classを使うのに近いものに
なるだろうが、仕様としては単なるInner anonymous classの
シンタックスシュガーになるってことは無いと思う。
>>261 なにも考えずに下手に導入するとC#やC++の二の舞となるぞ。
どうしてもそういう機能が欲しければ
C++やC#で実装して貰うように頼むか自分で実装するという手もありだな
ああ、実引数の間違いね。 Closureを実装するにあたって、 JVMの仕様を変えるという話は出てきてないから、 ほとんどsyntax sugarみたいなもんなはずだけどね。 というかinner anonymous classがほとんどclosureみたいなもんだし。 finalが外れるとしても、primitive typeの扱いはどうするのか…
>>286 JVMの仕様を変えないでも、「本物の」クロージャは実装できるよ。
あと、キャプチャされる変数がprimitive typeかどうかは、クロージャ
実装するにあたっては、特に関係無いはずだけど、何か問題ある?
outer classのslotは、 closureに埋め込んだouter class instansの thisを介して参照すれば書き換え可能だけど、 引数はちょっと面倒じゃない? > primitive Method内でclosureが使われる時、 first class closureが外に持ち運び出されれて使われる時、 複数のclosureからprimitive typeが参照される時の扱いなど。 まあコンパイラが頑張れない問題ではないけれど。 そういうprimitive typeは、 別のinner anonymous classでwrappingすればいいんだから。
ローカル変数も基本型だとスタックフレームにあるから、 オブジェクトでラップしとかないといけないよね。 外に持ち出して複数のクロージャから参照されるかもしれないから。
>>289 それは、クロージャからouter classのフィールドを参照しているか
outer scopeのローカル変数を参照するかによる違いであって、
primitive typeかどうかは関係無いのでは?クロージャから
outer scopeのローカル変数を参照可能で、かつ、クロージャから
その変数が変更可能なようにする場合、基本型かどうかに関わらず、
オブジェクトでラップする必要が生じると思うんだが。
>>283 あのースクリプト言語ってGroovyだけじゃないんですが・・・
スクリプト言語への対応って言語の定義はされてなくて、APIの定義なんですよ。
おそらくそこを勘違いされていますよね?
今あるスクリプト言語だけじゃなくて将来出てくる言語もこのAPIに沿ってライブラリを
用意すれば使えるっていうフレームワークです。
今までずっとコンパイル言語はデリゲート、スクリプトはクロージャって漠然と思ってたけど もしかしてもっと高尚な概念だったのか?w
スコープがどこにあるかで変わるような気もするが デリゲートっていうのはクロージャーよりもっと大きな範囲を表すことばじゃないか?
>>293 別に高尚というほどのものではないが、ある言語がコンパイル言語かスクリプト言語
かどうかと(この区別の仕方も問題大有りだがそれは置いとく)、その言語がクロージャ
を持っているかどうかは全く関係が無いことは確か。あと、デリゲートってたぶんC#の
デリゲートのことを言ってると思うんだが、あれはMS用語であって、C#のあの機能に
対する用語としては全く一般的じゃない。
D言語もdelegateだろ?そのうち次世代標準になると思うが
>>296 逆に言えばC#,Dしか無いんだと思うが。しかも、時系列からして、D言語で
delegateって呼んでるのは、C#での呼称をまねたんだろう。次世代標準に
なるかは知らないけど、delegateはあまりセンスがいい機能だとは思えん。
delegateといえばそんな名のproxyを思い出すのはもうおじちゃん世代なんでしょうか・・・
>>291 outer scopeのローカル変数を参照している場合、
クロージャオブジェクトとは別のオブジェクトでさらにラップする必要があるでしょ。
複数のクロージャから共有される場合は必ず。
基本型じゃなければ、実はポインタが指しているわけだから、
複数のクロージャオブジェクトから共有するのは自然にできるけれど。
プログラミング言語で、"delegate"を最初に聞いたのは"actor"かな。
>>299 > outer scopeのローカル変数を参照している場合、
> クロージャオブジェクトとは別のオブジェクトでさらにラップする必要があるでしょ。
> 複数のクロージャから共有される場合は必ず。
これは特に異論を言ったつもりは無い。というか、クロージャのセマンティクスを
考えれば、至極当然だわな。
> 基本型じゃなければ、実はポインタが指しているわけだから、
> 複数のクロージャオブジェクトから共有するのは自然にできるけれど。
これはおかしい。クロージャから共有しているのは、ローカル変数その
ものであって、変数の値じゃないのだから、ローカル「変数」に対する
変更をクロージャ間で共有するためには、基本型じゃなくても
クロージャオブジェクトとは別のオブジェクトでラップする必要があるはず。
「これはおかしい」以降が分かりません。 ヒープに浮いているオブジェクトを共有していれば十分かと。
>>302 クロージャによって共有されるのは、参照型変数が指している先の
オブジェクトじゃなくて(もちろんオブジェクトも共有されるけど)、参照型変数
そのものなので、オブジェクトだけが共有されても変数そのものが共有されないと、
クロージャAで参照型変数aの指している先を変更した後(ここで、オブジェクトの
中身を書き換えるのではないことに注意)、別のクロージャBから同じ変数aを
参照したときに、クロージャAによって変更される前のaの参照先を指している、
というようなことになってしまう。
>>302 >>32 の
int sum = 0;
list.each(delegate(int i){
sum += i;
});
で、sum が java.lang.Integer、クロージャの中が
sum = new Integer(sum.intValue() + i);
だった場合に、オブジェクト共有じゃだめでしょ。
Javaなら「クロージャいらね、無名クラスで十分」でお願いします。 そしてクロージャが実装されたあかつきには「やはりクロージャは便利だ、すばらしい」でお願いします。
まぁ、使ってみなきゃわからない便利さってのもあるしな
>>305 さすがにクロージャに関しては、無名クラスで十分というのは
あり得ない気がする。特に無名クラスを制御構造の抽象化
(内部イテレータなど)に使うのは、冗長過ぎる。複数のメソッドを持っている
オブジェクトの場合は、無名クラスの方がいい場合もあるとは思うけど。
>>308 別に分析なんてしてないんじゃない?
Java vs ○○系のスレで何度も起きていることを
そのまま書いただけでしょ。
は? 意味がわかりませんな あんたのいってることは
分からないならレスしなくていいよ。 もうちょっと勉強してからどうぞ。
くだらん煽りだ
★ネタは分かりやすく★
>>305 は
Javaユーザが、Generics導入前には「いらね」と言っていたのに
導入されたら「Genericsネ申」と褒め立てるJavaユーザをクロージャにも当てはめ
シニカルな笑いにしたネタ( ´ー`)y-~~
>>308 は
それをむしろJavaユーザの立場から自嘲的に笑いにしたネタ
もしくは、単に
>>305 の諧謔を理解せず笑ったノ(´д`*) レス
>>309 は
それをJavaユーザに対する真っ向非難と受け止めた
瞬間湯沸かしレスヽ(`Д´)ノ
>>310 もう喧嘩と聞いちゃ黙っちゃいられない江戸っ子レス
(゚∀゚ )三 三( ゚∀゚)
>>311 それに便乗した野次馬
( ´・∀・`)ヤレヤレー
そんな感じですかね。
>>314 つまり、TemplateイラネをGenericsイラネにいまだに脳内変換してるバカってことか。
だれもGenerics神とか言ってねぇし。
スマソ、
>>314 自体が、そういうバカを装ったネタだったか。
>>315 まさにその通りだ。
たまにこのスレにでてくる馬鹿はC#厨とかC言語厨とかの
類だろう
Javaに要望されていたのはC++のtemplateじゃなくて、たんにparameterized typingじゃないの? その意味でいえば、templateもgenericsも同じようなもんだけど。 あれか、templateイラネといっていた手前、genericsが導入されて引っ込みがつかないから 「genericsはtemplateとは違う、tempalteはいらないけどgenericsはマンセー」 といっしょうけんめい言ってるだけか。 大事なのは型引数がつかえることであって、コード生成なのかただのキャストなのかは あんまり関係ないんだけど。
>>318 だから、導入したときにgenericsって名前にしたんだろ
俺の記憶じゃ、入れる前はどんなものか決まってなくて C++のtemplate「みたいなの」が入るってことになってて勝手にワイワイやってたと思い
C++風なのは入れないというのが暗黙の合意だったと思われ あまり型システムは詳しくないけど、 Modula-3とかOberonの流れを汲むんじゃないの? 多重継承やオペレーターオーバーロードなし。特殊化なんてもちろんない。
タイプセーフenumパターンによるenumの実装は俺からしてみれば懸命だったと思うけど ifよりswitchだみたいな風潮がまだあるのか、余り普及して内容に思える
タイプセーフenumの実現も可変長引数の実現も拡張forの実現も みなGenericsのお陰で可能になったことなんだよ。 Genericsを導入するまでこれら三つを導入するわけにはいかなかった。
>>322 どういうこと?
enumはswitchでかけるし
次世代Javaスレなのに5.0で導入された機能の話ばっかりでつまらんので、
投下してみる。
JavaにContinuation(継続)機構は必要か?
http://blogs.sun.com/roller/page/gbracha?entry=will_continuations_continue 俺はあんまり良く知らないんだけど、SchemeとかRubyにはContinuationという
機能がある。これは言うなれば、メソッドを呼び出す時に「おまえ、自分の処理
が終わったらこれを呼べよな」とクロージャを渡してしまう感じだろうか。
もちろんクロージャは(ちょっと前に話題に出てたけど)その時のスタック状態
さえも保持してるので(スコープから外れても、クロージャ内ではまだローカル
変数にアクセスできる、とか)、一種のlongjumpとして働くってことですな。
(というか、そこまでしか分からんかった....)
リターン値を見てから処理を決めて....という処理が不要になって、プログラムは
シーケンシャルにどんどん突き進めるという利点と、呼び出し元じゃなくても一気に
復帰できる上に、その時のスタック状態まで復元してしまうという、いわば「スタック
フレームごとあとで使うから保存しちゃえ」という強力な機能なんだってな。
なんだかContinuation-based Web Serverとかいうものもあるらしい。
で、この機能がJVM(JavaじゃなくてJVMだよ)に必要かどうかという議論。
リンク先ブログの人は、「ウェブアプリはAJAXとかで遷移の少ない方向へ移って
いってる過渡期で、移行が完了したらContinuation-based Web Serverの利点は
過渡期の遺物になっちゃう可能性があるし、JVMの大改造が必要だしセキュリティ
モデルに影響を与えるからイラネ」といってる模様。
いろんなサイト見て、Continuationは便利そうだが、正直分かりにくいし使いどころ
が難しい気がするので、俺もイラネ、という感じだな。
JVMみたいなスタックマシンには継続は辛い。 欲しい新機能は、switchの代替になるようなパターンマッチング。 ラベルにGOTOするんじゃなく、値を返す奴がいい。 int result = match<Integer>(obj) { A : execute(); return 0; B : return -1; default : return 1; } って感じの。
>>325 細かいところだけど、ちょっとツッコミをば。
> これは言うなれば、メソッドを呼び出す時に「おまえ、自分の処理
> が終わったらこれを呼べよな」とクロージャを渡してしまう感じだろうか。
これは、継続渡しスタイル(Continuation Passing Style)と呼ばれるテクニックで、SchemeとかのContinuation
とは違う。SchemeとかRubyにある継続ってのは、call/ccと呼ばれるもので、1引数の関数を引数としてcall/cc
を呼び出してあげると、その関数を「call/ccの呼び出しが終わった地点に制御を移動するような関数」を
引数として呼び出してくれるという感じ。Javaっぽい文法で書くと、大体下のような感じになる。
このプログラムっぽいものを実行すると、ABCBCと表示される。
Continuation process() {
Continuation result = null;
System.out.print("A");
call_cc(new Function(){
public void call(Continuation c){
result = c;
}
});
System.out.print("B");
System.out.print("C");
return result;
}
...
first = true;
Continuation c = process();
if(first){
first = false;
c.jump();
}
System.out.println();
その前にproper tail call optimization可能なVMかな。
>>324 コンパイラがifに展開するんだとさ
int&switchによる高速さはenum&switchにはない
>>329 Enum.ordinal() 使ってint型にして switch するだけなんだけど。
この話も Mustang にも Dolphin にも関係ないね。
ん?実装が変わったのか?
>>329 >>330 俺もifに展開してると思ってた(というか、記憶が正しければ、
1.5のαかβではほんとにifに展開してたはず)のだが、今の実装は
確かにswitchを使うみたいだね。下のコードをコンパイルして、
逆アセンブルしてみたら、確かにEnum.ordinal()を使ってswitchする
コードに展開されてた。
public class TestEnum {
enum AnEnum {A, B, C}
public static void main(String[] args){
AnEnum a = AnEnum.A;
switch(a){
case A: System.out.println("A"); break;
case B: System.out.println("B"); break;
case C: System.out.println("C"); break;
}
}
}
>>332 実際にどう実行されるかは JVM 側のオプションでも変わって来るんじゃなかったっけ?
>>323 >タイプセーフenumの実現も可変長引数の実現も拡張forの実現も
>みなGenericsのお陰で可能になったことなんだよ。
なんで?
for (String str: list) {
...
}
を
for (Iterator $it = list.iterator(); $it.hasNext(); ) {
String str = (String)$it.next();
...
}
に展開するだけだと思うんだけど、Generics関係なくね?
>>324 おまえはtype safeという意味がわからんのか?
>>320 おれの記憶だとparameterised typingが希望されてて、その例としてC++のテンプレートが挙げられていた。
C++のテンプレートそのままが欲しいやつっていたのかな。欲しかったのはあくまで型引数がつかえることじゃない?
でも昔はGenericsとかGeneric Programmingという言葉はあまり浸透してなかったから、
話としては「テンプレートみたいなのが欲しい」という表現がよく使われていた。
つまりC++のテンプレートが欲しいんじゃなくて、型引数が欲しかったということ。
だから
>>172 >いっておくがC++のtemplateとJavaのgenericsとはまったく別もんだよ。
のようなのには、なんというか話がずれてるように思える。
どっちもparameterized typingなんだからおんなじじゃん?実現方法を問題にしてるんじゃないんだよ。
C++のtemplateは否定してJavaのgenericsは肯定してるやつらって。
まあいつものことか。
>>336 templateを否定してgenericsを肯定してるやつらは
template固有の話を問題にしているんだから、
>>336 と話が合うはずがないよ。
とオモタ。
6.0って構文に関するなんかって変わるっけ? 5.0と7の間にあるバージョンだから、印象が薄すぎて・・・
5と7の間だとなぜ薄いのかよく分からない
そらおまえ、GenericsだのXMLリテラルだのキモイ仕様てんこもりじゃないか
>>340 5と7は変更が大きいからね。
6はもともと5.1になる予定だったわけだし。
5.0は言語仕様の変更は大きいけどAPI的に1.4とくらべてたいした進化はない せいぜいコンカレントまわりくらい 6は結構大きい変更が多いので楽しみ 中でもSwingの大規模修正はびっくりなくらいでは?
あのバタ臭い見た目は何とかして欲しいけどな。
デフォルトのLAFはSystemLAFでいいようなきがするな
お前はバタ子さんに恨みでもあるのか
>>344 Swingの大規模修正ってどんなの?
あんまり詳しくないので純粋に聞いてみる。
最近Swingに興味を持ったもので....
>>334 ,335
foreachに関してはともかくtype safe enumは
Genericsのおかげで「簡単になった」。
タイプセーフの実装は、自分で色々書けば出来たよ。
Effective Javaとか読んでみないか?
>>348 えーっと、漏れは
>>344 じゃなくて何が大きいか何とも言えないが、
個人的に助かってるのは
・GroupLayoutの搭載
・WindowsLAFの改善
・サブピクセルAAレンダリング
あたりかな?中では最適化がかなりゴロゴリありそうだけどよくしらない。
>>349 type safe enumを定義するのに、Genericsはほとんど使わないわけだが・・・。
enum A{ ONE, TWO, THREE} のどこでGenericsがいるのだろうか。
>>351 >>352 Java 5.0のAPIドキュメント見ればわかるけど、列挙型の基底クラスである
java.lang.Enumの定義自体にGenericsが使われているよ。
>>353 Effective Javaのtypesafe enumの実装みたことあるのか?
>>350 一番大きいのはAWTスレッドがとまっていてもウインドウが描画されることかと
あとはJava2DでOpenGLパイプラインがLinux系でデフォになるようでクライアント分野も
DirectX使ってるWindowsに速度的に追いつくかなと
ただ、5.0のOpenGLサポート見てると非常に期待が出来ないのだけれども
JOGL使ってるなら大丈夫かな
つーかJOGL標準APIにしてください
>>354 そういうこといってるわけじゃないだろ?たぶん
>>354 そりゃもちろん見たことある。というか、何故Effective Javaのtypesafe enumの
話になる?Java 5.0のtypesafe enumがEffective Javaのそれが元になっている
のは知ってるが、全く同じというわけじゃない。
>>356 そりゃGenericsがなくてもtypesafe enumが作れるからだろ
GenericsがないとJava 5.0と全く同じものはつくれないけど
typesafe enum自体はつくれる
Genericsのおかげで作れたなんて変だって話でしょ
>>357 いや、そりゃtypesafe enum自体はGenericsが無くても作れるけど、
Enum同士のcompareToによる比較などが型安全にできないでしょ?で、
>>349 は
そういうのを指して
> foreachに関してはともかくtype safe enumは
> Genericsのおかげで「簡単になった」。
と言っていると思ったんだが。あ、もちろん
>>323 の言っている
ことは変だと思ってるけど、
>>351 や
>>352 は
>>349 に対する言及
だと思ったので。
いいんじゃないの?ここで。
Generics とかは現行世代の機能だから次世代スレでやるのは筋違いでしょ。
流れってもんも大切だし、極端に筋違いなわけではないし、そもそもこのスレの「次世代」というのは、Mustangスレの次スレをTigerスレでやろうかという意見があったときに、じゃあ次世代Javaというスレをたててまとめてというのがあったわけだし。
それに、enumとかGenericsとかについて意見が食い違うという時点で、次世代ということにしてもいいと思うわけで。
なんか一人genericsが嫌いなやつがいるようだな
>>325 それはWeakest Post Conditionという奴か?
ならば、Template Method パターンまたはアスペクト指向で
実現できまいか?
>>334 展開する前の前処理にGenericsが関与してるに1バイト
>>351-352 EnumクラスのJavadocを見ると
Enum<E extends Enum<E>>
使われて無くはない。
Genericsが使われているかいないかで
Javaのenumの仕様がかなり異なってくる。
C/C++のようなtype unsafeなenumにするわけにはいかないから
Genericsを導入するまでenumを導入するわけには
いかなかった理由がよくわかる。
>>357 Genericsのお陰で作りやすくなった
以前より比較的正しいenum実装ができるように
なった、とでも言うべきだろう。
>>364 equals(), clone(), hashCode(), toString(), valueOf()
>>362 そのMustangの話題ですらないわけだが。
今後はもうベンチマークに期待できなくなってくるのかな Swing周りの改良は今後も進むかもしれないけど、業務では変わらない? JVM統合の流れになっていくのかな
>>372 業務でSwing使えばいいじゃない
すでに社内システムはWEBアプリは衰退していてリッチクライアントが普及してきているよ
不特定多数ならWEBアプリだけど、開発効率が段違いにわるいので
コスト増が問題になってるという感じ
375 :
デフォルトの名無しさん :2006/06/11(日) 20:23:42
今更であれだけど、Genericsっていいの? コンテナに間違ったモノ突っ込むなんてバグはもとから経験無いけどなぁ。
キャストが要らないからそのままメソッド呼べたり、すっきりするってのが一番の恩恵でしょ。
自分だけで作ってるとあまり恩恵はないね 他人の作ったコード呼ぶ部分でListとだけ書かれてると困るので助かる JavaDocとか整備されてないライブラリとかで泣きながらソースよんで苦労することが減った・・・ List<Map<Key,Value>>とか業務系だと頻繁に使うしね 大規模開発こそ結合部のドキュメント系が必要なのに整備されている率が低い傾向にあるのはどういうことだろう ウォーターフォールの出来上がってくる設計書類にそんなものがまったくないという 少人数でライトウェイトな開発していればまずインターフェース作りましょうとかドキュメントは 大事なところだけ書いてあとはJavaDocにガンガン記述していきましょうとかそういうのが多いな とりあえず何も考えなくてもよくなるEnumはかなり恩恵があるのは確かだが
>>370 valueOf はそうだけど、他は関係ないような気がするよ。
>>377 そのList<Map>構造の部分、今度はXMLになるかもね
また構造わかんねwwww
>>375 例えばMapでキーや値の型を仕様変更した場合に、
根っこの一箇所変えれば
コンパイルエラーがどこを直せばいいか教えてくれるのが楽。
ってのもある。
381 :
デフォルトの名無しさん :2006/06/11(日) 21:18:59
-serverオプションが消えるとか
>>375 間違ってダウンキャストしなくて済むし
いちいちドキュメントにこの型にはこれ以外入れるなとか
書かなくて済む。
>>378 Enumの中に入れ子になっているオブジェクトの型が一致しなかったら
あれなのでequals()とか、hashCode()も重要
業務系のソフトウェアでは、Mapの中にMapが入っていて、しかもそのMapの要素は Listが3つ、なんてざらにある。 で、そのListに何が入っているのかはドキュメント化されてないし、うっかりしてると Mapを入れるべきところにListを入れてしまったり....と、orzになる機会は山ほどある。 genericsについていろいろ言われているようだけど、Collectionフレームワークの型 安全性を高めるという点について「イラネ」と言ってたヤツを俺はしらないな。 Goslingタンもそこをとても重視していたみたいだよ。ソースが見つからないがそんな こと言ってた。
genericsいらないって言っていた馬鹿は探せばいるだろ。 どんな馬鹿でもいるもんだから。 そんな馬鹿が手のひらを返してgenerics便利だと言ったところで一体なんだというのだ?
しかし今頃この話題が出てきたということは6が出そうなこの時期に やっと5.0つかった開発がスタートしはじめているということだろうか
>>386 何でもない
いや、それがこの話の結論のはずなんだが
それで納得できない暴れたい盛りのやんちゃ坊主がたくさんいてな・・・
前向きでない議論は無駄。
現行Genericsの不備点を挙げて、こうなればいいのに・・・とかいう話ならまだ広がるんだが・・・
>>387 そろそろドカティもJava5に入り始めるんじゃない?
>>389 ・)ノシ
1.3で開発してるドカティが来ましたよ
こんな太古のアプリ改造するくらいなら新規で作れよそもそも設計からして腐ってんだからさぁとか言いながらコード書いてますよ
5で書きたいよぅ
>>377 が言ってる問題にぶちあたりまくりで元からバグバグなコードいじる度にビクビクしなきゃならんのは嫌だ
>>390 そういうなおいらは去年ようやく1.1から1.4へのUpgradeに成功した
2年ほど前に出した見積がようやく日の目を見たって所だ
保守的な奴らが居るとうんざりするときあるな 1.4.2で作ってるんだが、_??の部分までぴったり合わせるよう指定が来る いやいや、それってバグフィクスのバージョンだろと突っ込みたくでも突っこめない 仮にバグっててもそれのお陰でうまく動いてるのを当てにするんだろうな
>>391 なんか生き残れるのか心配になるようなローペースさだな。
>>389 J2SE5.0使ったシステム2つうけてるけど、ついていける人とついていけない人がやはり現れますな
勉強し理解する人は5.0すごくよくなってるといい、勉強しないで分からないというだけの人は
なんでこんなバージョンにしたの?といってくる
知的労働者なんだからまったくついていけないようだったら首を切るのを勧めたほうがいいだろうね
そういうのはだいたいCOBOLメンテしてきてVBやってる人に多いかと思えばそんなことはなく
COBOLもしってCもやれてJavaもきっちりしってる人も割と多い
言語の得て不得手をしっかりと理解できているかどうかはが大事
逆にJavaやCでずっとWEBアプリ業務でやってきましたという人種でもかなり危険なやつらが多い
1メソッド数百行をスコープ範囲狭めることなく平気で書くのが特徴だから分かりやすいといえばそうなのだが
>>392 涙が出るほど共感を覚えるが、スレ違いではあるまいか
雑談スレだし、いいんでないの?
いったいいつから雑談スレに.....orz
398 :
デフォルトの名無しさん :2006/06/12(月) 03:55:55
_XXを気にするなんて、まともな所なら常識だろ。 _XX変えたらテストやり直し。保守的とかじゃなくてブロの常識。
まともなところとかまともじゃないところとかは関係ないと思うな。 常識かどうかも。 そこまでの信頼性が求められるかどうかだと思われ。 信頼性もとめるなら、まだJava2SE5.0は使えないんじゃないかな。
ただ、障害が出たときのサポートと、サポート期間考えると最新使わないわけにもいかない 5年単位の利用期間に対して、それ以前にSUNのサポートが切れるJVM使うのもできないし・・・ 1.4.1のGCのバグで散々な目にあったよ・・・orz しかし、Tigerはそろそろ使えるようになってると思うんだが・・・ Mustangが出るってのに2世代前しか信頼できないって状況はないんじゃない? というか、信頼性なんて自分たちで確かめるもんだし。
ハイエンドのサポートはSunだけじゃないからな。 自分達で確かめれる程度の信頼性なら、自分達で確かめればいいと思う。
使う範囲で信頼できれば十分だからね。
>>398 それにかかるコストを誰が払っていると思っているんだ。
誰も払わなければやるだけ無駄でSunに踊らされているだけだろ。
ちょっとバージョンアップしたくらいでまたそのバージョンに
遭わせて無駄に過剰テストして無駄に管理を厳しくするのは
コストの無駄。テストの自動化もできない奴がそういうことをしたがる。
自分の常識が世の中全体の常識と思ってるヤツがいるな。
>>403 問題が出てからの対処で良いならその考え方もあるが
何でか知らないが開発会社に全てのコストを押し付ける顧客が多すぎるよな
やって欲しいならそれに見合う金を払えってんだ
>>403 おまいは、安かろう(品質)悪かろうのシステムしか経験がないのかも知らんが、
それを一般化するなよ。
>>399 の言う通り、どこまで品質が求められるかどうかがポイント。
自分の基準で過剰テストだの無駄だの、安物PGにしか見えないからあまり言わない方がいいよ。
だいたい、テスト自動化となんの関係があるんだか…。
>>406 ひとこと言わせて貰うと、お前は考え方が古い。
20年くらい前のCOBOLerが大好きながむしゃら管理手法で
やっている。
Java5でないとうごかない製品ももうすでにかなり出ている。
すでにJava5は実績としてはかなりのものだ。
もはや Generics の話題ですらないな。 説教したい/されたいならマ板でどーぞ。
409 :
デフォルトの名無しさん :2006/06/12(月) 13:45:06
おれはJavaSE5が使えんとは書いてないが…。 運用トラブルリスクはそっちのけで安価・短期が最優先という考え方もアリだろう。 だが、システムの必要品質を確保するのに、古いも新しいもない。全然理屈になってないよ。 そんな事言ってると、底辺PGとバレるから気を付けた方がいいぞ。 というか、テスト自動化されてんなら、テストやり直しに何でファビョってんの?
商用アプリサーバのSE5のサポートって 最近じゃない? やっとベンダにとって、サポートコストがぺイするレベルに枯れてきたって事か。
どっちがファビョってるんだか。 たまにJavaすれにVBあがりのドトネト厨が 割り込んで来ることがあるけどそれ系の厨かなw
>>410 商用じゃなきゃ信用できない
なんていったらLinuxがアップデートされるたびに
過剰テストにものすごく無駄に時間をかける羽目になるんだが。
Java5の枝番号が変わっただけでその都度細かいテストするのも
まさに効率悪い。
全員スレタイ見直してくれ・・・頼む・・・orz
414 :
デフォルトの名無しさん :2006/06/12(月) 17:28:41
まあ、この手の素人PGが次世代Javaのバグ出しをしてくれて、 堅いシステムにも使える様にしてくれる、と言うことで。
素人PGがまともにBugParade登録出来るとも思えないけど。 Genericsの現実的な使いどころって、 コンテナ(ぽい)オブジェクトの中身の明示以外どんなのがある?
>>412 おまえ、ハイエンドの品質の厳しさわかってる?
>>415 type safe enumだろ (以下ループ
>>415 Observer/Observableを型安全に使えるようにするとか。
残念ながらJava5のそれは、Generics対応になってないが。
あとは、コンテナと無関係ではないが、型に依存しないアルゴリズム
のライブラリ化とか。C++のtemplateみたいに、今までできなかったことが
できるわけじゃないので、今まで型安全にできなかったこと(Object型で代用して
いたこと)を型安全に行えるようにする、というのが主な使い道じゃないかなあ。
仮定のない品質など議論する意味はない。
>>419 俺もそう思う。
Objectを突っ込みまくっていた部分を見直して
綺麗なロジックが書きやすくなるという部分かな、と。
アスペクトとまでは行かないけれど、ロジックだけを切り出して
実装できるのも、何という機能というわけじゃないけど面白い。
言ってみれば、Map,ListなどGenericsの恩恵を直に受けたライブラリは
そのMap,Listという振る舞いを型に依存しないで実装できたいい例だったということだから。
で、ながれを戻そうとしてもなぜ現世代Javaの動向に戻るんだ? 次世代はどうした。
んじゃ次世代らいく・・・ お馬さんのJava2Dレンダリングどーなってるの? Windows版はデフォはDirectXのまま? あいかわらずほとんどの描画がアクセラレーションきかないの?
そもそもJavaプログラマの定義なんて曖昧。 煽ってる奴やJavaが嫌いな奴はJavaプログラマ=Javaしかできないプログラマと 脳内変換して話を進めたがるから話が当然噛み合わないわけだし。 実際に、Javaの仕事をするときにJavaしか知らないでは、まったく 仕事ができないものだが。
>>424 実際にJavaしか知らないって奴がいっぱい居るじゃん
まあそういう奴はJavaすら知らないって事が多いけど
だから Javaしか知らない奴 という表現は論理的に矛盾していると
続きはマ板で。 本当に底辺野郎じゃなければ もっと融通が利いているはず。
なんだが、Genericsを否定したい奴がいちゃもんつけてるようにしか見えないな。 彼の主張は「C++Templateはいらないと言ってい他奴がGenericsは欲しいと言いだした」 ということらしいがな。 彼の脳内ではC++Template == Generics でないと気が済まないようだ。
>>429 > PowerPCのJITはまだらしい。
というかMacはもう…
えーと、CocoaにはJavaAPIの新規追加はもうない、って話かしら?
PowerPC終了でしょう?
>>428 どうしてもtemplate!=genericsにしたいようだが
parameterized typeという点ではどっちも同じ
仕組みが違うのはあたりまえ
Javaから見たらgenerics≒templateで良いじゃないか
>>433 いや、違いすぎるだろ。
C++ templateはかなり独特だから。
ところで、
>>1 のマルチタスクの実現ってのはどうなったんだ?
既に実装済み?
>>436 template<genericsとtemplate>genericsとtemplate>>>genericsじゃ論争になるだろ
template<genericとtemplate> generics と区切ってしまい、何のことかわからんくなってた。
それぞれどういう意図で発言しているかがつかみずらいが、 もし、templateとgenericsが実現の仕組みが**多少**違うくらい で、同じようなものだと思っている人がいるとしたら、もうちょっと (C++の)templateのことを勉強した方がいいと思った。実際、 templateとgenericsはある程度までは同じ目的で使えるが、 かなり違うセマンティクスを持っている。優劣をここで述べる つもりは無いが、それだけは確かだ。
>>439 おまえまだgenericsに慣れてないな。
「genericsとtemplate」を扱えるtemplate<?>型のgenericsという変数を宣言しているのだよ。
お前ら、頼みがある。Genericsに関しては既に実装された機能だから、他のところでやってくれないか。 せっかく新ネタ持ってきてくれてる人がいるのに、いつまでも粘着しないでおくれ。
>>442 劣勢だな。
流れだし、いいんでねぇの?
>>443 マ板的なネタで盛り上がるぐらいなら閑散としてたほうがマシ。
そうかなぁ
>>438 templateクラスがgenericsとtemplate型をパラメータに持って
と思ったらなんだその文法わ
6のSwingはWindowsOSにも恩恵はありますか?
恩恵ってなんですか
トレイが使えるようになる。 Desktop#browse, mail, edit, open, printなどができた。
レンダリングに関しては別にって感じですか。 まあそれらの機能だけでも十分かもしれませんね。
>>447 フォントのAAがヒントに従ってかかるようになった。
5のswing.aatext=trueのように、UI Gothicにまでかかることはなく、tahomaなんかには
なにもしなくてもAAがかかる。
( ゚д゚)、AAだと!
>>453 ビットマップ情報使えるサイズの場合はアンチエイリアスかからないだけなんでは?
個人的にはAAはどうでもいいかな。 browseとトレイはありがたいね
>>452 スレ違いを文句いいながら、板違いのスレ建てるわけか。
無駄に重複してるだけに見えるがな
一時的なスレ違いのために、永続的な重複スレを建てるヤツ
たいてい重複スレのほうが長生きするんだよね。レスがないから。
Mustang beta2
ttp://java.sun.com/developer/technicalArticles/J2SE/Desktop/mustang/beta2.html Top 10 Things You Need to Know
1. Web Services
簡単にWebService書けるようになってな、アノテーションで簡単やねん
2. Scripting
PythonとかRubyとか使えるし、みんな使えよ
3. Database
JDKにApacheDerby入るで。@Query(sql="select * from user")とかのアノテーションでSQL埋め込めるし。
4. More Desktop APIs
沢山デスクトップ用改良入ったから期待しとけよ。
JTableとかソートとかフィルタとかできんねよ、すごいやろ?
5. Monitoring and Management
何も考えんでもモニタとかできるようになったで。
Jhatっちゅうヒープ分析ツールも入れといたさかいにあんじょう使うてや。
6. Compiler Access
JSPとかPHP作る人には便利になったやろうなぁ。うごいとる時にコードの
コンパイル動的してJavaCodeにできるんや。
7. Pluggable Annotations
アノテーション自分で付けれるようになってみんなニコニコだお( ^ω^)
8. Desktop Deployment
GUI綺麗に簡単になったで。まぁそれはそのゴニョゴニョや。
9. Security
XML署名とか入ったり、セキュリティの管理簡単になったの。
10. The -ilities: Quality, Compatibility, Stability
まぁ、なんや、みんな、これまで通りよろしゅうな
VMで動いてるんだからVMwareみたいにSuspend/Resumeできればいいのに
>JDKにApacheDerby入るで。 うわぁマジで?俺も使ってるけど標準はやりすぎだろ… HSQLのが速いし組み込む目的ならこっち
HSQLDBは、通らないSQLが多いからなぁ。 まあ、IBMの政治力の勝利ってことでしょう。 DB2互換だし。
Apache Derbyじゃなくて「Java DB」が組み込まれるということになってるけどね。 NetBeans5.5のメニューが「Derby DB」から「Java DB」に変わったときから気になってた。
DerbyといえどSQL92に完全準拠してるわけではないよな JVMのベンダー互換が崩れるきっかけになりそうでやだな JDOQLだかに準拠させる規格でもあるのかな
JDOはもう死んでるでしょ。 それを言うならJPQL(旧EJB-QL)かな。 IBMの意図はわかるけど、Sunの意図がわからない。
PersistenceAPIのためだろ
OJB&Derbyで標準化して、実際使うときはHibernate&HSQLにするということだね
HSQLDBはスタンドアロン用だからな まったくターゲットが違うしJDBCドライバサポートが1.0レベルだったようなきが HSQLDBの後継のやつはシンプルさが失われてるらしいのがちと心配 スタンドアロンアプリで付属DBとしてならHSQLDBのほうが楽かと Windowsの業務系スタンドアロンパッケージのほとんどがMSDE使ってるのと同じような感じで あちらは将来MSSQL鯖にかえるのが目的にもなってるが
>>471 俺は、
> 6382711JComboBox incorrectly rendered with alternate WinXP theme
がうれしい。
>>461 > 1. Web Services
> 簡単にWebService書けるようになってな、アノテーションで簡単やねん
Java EE絡みのものがなぜかJava SEでできると?
> 3. Database
> JDKにApacheDerby入るで。@Query(sql="select * from user")とかのアノテーションでSQL埋め込めるし。
これは凄い。なんでHSQLDBじゃなかったんだろう。
機能性の高さからかな? 採用されたのは背後でIBMの関与でもあったのかな?
Appletからメモリ上にテーブルを作成してクエリ呼び出すようなことできるのかな?
> 9. Security
> XML署名とか入ったり、セキュリティの管理簡単になったの。
簡単になるのか。Javaのポリシーファイルはなんだかイマイチだったのか
嬉しいかも。
署名がXMLってどういうこと? genkeyで作るものはバイナリでは?
ポリシーファイルがXMLになるだけ?
>>466 > DerbyといえどSQL92に完全準拠してるわけではないよな
> JVMのベンダー互換が崩れるきっかけになりそうでやだな
そのうちSQL92互換になってゆくのではないかと。
SQL99互換になればいいんだけどねえ
Mustanggが出たとき、 HSQLDBを搭載しているJBossはどのような動きを 示すのか? HSQLDBをJBossから外してゆくのかな?
BEAは面白くないだろうなJava6シリーズは。
>>473 SEでWEBサービスが、というのはクライアントの話だろ?
JDBCやRMI、クライアントのソケットと同じでは?
XMLパージングとJavaオブジェクトマッピングを、 アノテーションを使って簡単に。ってことみたいだな。 今時クライアントサイドでも色々やりたいしな。
480 :
デフォルトの名無しさん :2006/07/02(日) 18:41:14
Bata2 に ApacheDerby って入ってるの? インストールしてみたけど、 どこにあってどう使うのかがわからん。
>>480 さぁ?アレ適当に訳したから。
原文は、
final Mustang development kit(JDKだね) will(だからまだかも) co-bundle....
ってなってるからまだ入ってないかもよ。
482 :
デフォルトの名無しさん :2006/07/02(日) 20:00:33
484 :
デフォルトの名無しさん :2006/07/03(月) 01:10:44
せっかくweekly buildされてんだから、β2にこだわらず、最新build使うってのがいーんじゃない?
b90 のインストールに失敗するんだよね 「変換するときにエラーが発生しました。 指定された変換のパスが有効であることを確認してください」とかいわれる。 jdk-6-rc-bin-b90-windows-i586-30_jun_2006.exe って奴を 3回落としてきてるんだけど、3回とも同じメッセージが出て駄目だった。 b89 だったらインストールできるんだけど。
>>485 漏れも出る。
インストーラのアイコンも変わってるし、
何か派手な事またしてんのかなーっと思って、b89入れ直しました
b90でRhino削除されてないか?
488 :
デフォルトの名無しさん :2006/07/04(火) 20:51:34
時給1000円でJava教えてくださるかたを募集します 場所 所沢(池袋・高田馬場から直通) よろしくおねがいします i−want−to−study−java@hotmail.co.jp
コンビニのバイトより安いですが、よろしくお願いします。
この時給って事は、その分、生徒が夏帆みたいな子なんだよな?
b90でコケて(?)以来、snapshotがとまったな。
>>492 いや、forumではannualだからビルドねーよ、とのこと
SUNWは7月から会計年度始まるからな
>>492 > There won't be a promoted build on July 6th because of 4th-of-July holidays. [July 3, 2006]
495 :
デフォルトの名無しさん :2006/07/12(水) 08:41:36
>>490 所沢に行くとチーマーに拉致監禁されて
出会い系サイト作らされてry
>>488-489 なんだその安すぎる時給は。なめとんのかゴルァ!
時給5000円以上じゃないと絶対に引き受けない。
>>496 毎回手作りケーキと紅茶が付くとしても?
>>497 だれの手作りかによる
まずは写真とプロフィール(略
>>497 割に合わんな。毎日同じもん食っても飽きる。
毎日中華丼やキムチ食わされたらさすがにキレる。
そんな子供だましなことに乗せられる騙される奴は餓鬼や新人や新卒くらい。
そんな給料で結婚子育て生活ができるとでも思っているのか!!!!!!!!!!!!
二人の子どもを大学院に行かせる金も用意できないだろがゴルァ!
授業料がいくらかかると思っているのか貴様!
ケーキが100円、紅茶が150円だとして、時給1000円
だとしても、
一日8時間勤務だとしたら、日給8250円相当にしかならない。
>>499 ケーキが欲しいんじゃない、人はケーキの向こう側に夢を見るんだよ
>>499 > ケーキが100円
「手作り」ということを忘れている。Priceless
そうか・・・・
>>499 は今が幸せなんだな・・・・
手作りケーキがタダのケーキとして扱える位に・・・ちくしょう・・・orz
こんな小さな幸せでも拾いたいのは不幸せということか・・・
小さなことを幸せに感じることができるのは幸せなことだと思うぞ。
うーん、jdk-6-rc-bin-b91-windows-i586-13_jul_2006.exe もインストール失敗する。 いろいろ弄って、 C:\Documents and Settings\username\Application Data\Sun\Java\jdk1.6.0\jdk1.6.0.msi を使うと英語版のインストーラが起動して、インストールできるっぽい。 っても、無理やり動かしてるからちゃんとインストールできてるかちょっと不安だけど。 ちなみに、エラーメッセージ出た直後に OK 押してインストーラ終了させちゃうと、 ファイルが揃ってない事があった。そのまま OK 押さずに放置して 〜\Application Data\Sun\Java\jdk1.6.0 に 12個 52M のファイルが 出来るのを待つのがコツっぽい。12個 52Mってのは b91 の場合ね。他は知らん。 b91 とか b90 とか普通に exe でインストールできてる人いるんだろうか?
>>500-502 相手が男だったら夢も潰れるよ。
それだったら高い給料から
差し引いて自分の金でケーキを買って食べるよ。
ついでに彼女にケーキをプレゼントする。
ケーキもらって喜ぶのは男より
女の子のほうだからな。
男はケーキより金のほうがいいに決まってる。
ケーキの上や中に不味いものや嫌いなものや
むさ苦しい男の手垢によって付着した黄色ブドウ球菌が
入っていたらそれだけで嫌な気分になるどころか
食中毒を起こして治療費負担が増大するからな。
それだったら自分でケーキを買った方がマシ。
>>497 はせいぜい女を騙して働かせるんだな。
>>504 線香花火のように長続きしない幸せだ。
そんなことで幸せを感じるのは貧乏人や女だけ。
馬鹿な経営者に洗脳されて長時間労働させられて
幻覚を見ているだけだ。
幸せを感じる力は一種の才能 埋もれるほどの財を得ても他人を呪い明日の裏切りに怯える悲惨な人生もある
>>508 カーネギーやナポレオンヒルやロックフェラーはそんなに悲惨かね。
堀江被告みたいなバカじゃあるまいし。
>>509 うーむ、そうやって人を見た目で判断しちゃ逝けないなー
>>506 何かいやな事があったんだな・・・強く生きていこうぜ・・・
で、俺もb90,b91のインストール状況は気になる。
b90で、
Eliminate installshield dependency for JDK offline msi installer
って言ってる変更が気になるんだよな・・・
会社で給与交渉や重労働のことで 都合が悪くなると昇給する代わりに 飯を奢って食わせてどうにか凌ぐ社長って奴じゃね? 半年に一回5000円の飯奢って貰うんだったら 昇給として月収5万アップして貰って自分の金で 伊勢海老なりフランス料理なり食った方がましってことだろう。
Rhinoの質問していいでしょうか。 JDK6にむけてRhinoの勉強をしているんですが、int値がかってにdouble値になって困ってます。 具体的には、int値をもつ変数に対して演算をすると、int + int => double になります。 import org.mozilla.javascript.*; public class RhinoTest { public static void main(String[] args) { Context context = Context.enter(); Scriptable scope = context.initStandardObjects(); String code = "var x = 3;¥n" + "var y = 3 + 2;¥n" + "var z = x + 2;¥n"; // int + int が double になる context.evaluateString(scope, code, "(filename)", 1, null); String[] varnames = { "x", "y", "z" }; for (int i = 0; i < varnames.length; i++) { String var = varnames[i]; Object value = scope.get(var, scope); String cname = value.getClass().getName(); System.out.println(var + ": class=" + cname + ", value=" + value); } } } 実行結果: x: class=java.lang.Integer, value=3 y: class=java.lang.Integer, value=5 z: class=java.lang.Double, value=5.0 # ← doubleになってる どなたか、解決方法を教えていただけないでしょうか。よろしくお願いします。
ECMAScriptの数値型って浮動小数点型しかないから、 むしろxとyがint型なのがおかしい気がする……
>>515 ありがとうございます。
>ECMAScriptの数値型って浮動小数点型しかないから、
そうなんですか。初めて知りました。
それだとすごく困りました。どうしよう。
Excelも浮動小数点しかないから誤差だしまくりだし イコールでの数値判定は危険 だが、Excelは使われてる もちろんそれが困る用途もあるが 要は用途による割り切りかたかと
>>517 誤差がどうとかではなくて、型が勝手に変わってしまうのを問題にしています。
JavaScriptを設定ファイルがわりに使おうと思ってたんですけど、型が勝手に変わるとなんぎします。
x = 1;
y = x + x;
で y が double になってしまうなんて。
for (i = 0; i < n; i++) {
...
}
で i がdoubleだなんて。
どうしたものやら。
519 :
デフォルトの名無しさん :2006/07/17(月) 20:55:17
時給1000円でJava教えてくださるかたを募集します 場所 所沢(池袋・高田馬場から直通) よろしくおねがいします i−want−to−study−java@hotmail.co.jp 教える対象は超初心者です。 専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
==使わない限りDoubleでさほど問題ないのでは?
>JDK6にむけてRhinoの勉強をしているんですが なんかRhinoがJava6から脱落したみたいなレスがどっかにあったような…。
>>519 夏帆クラスの女の子の手作りケーキは付くのか付かないのか、
それが問題だと(ry
b91 だと Rhino あるよ。rt.jar の中っぽいけど。
>>520 JavaScript側で設定した変数の値を、Java側にとってこようとしています。
そのため、JavaScript側でintを設定したつもりなのに、Java側に渡るとDoubleになっているのは困る訳です。
scriptでは常にDouble 精度速度保障のために値が変更されなければintのまま扱ってるだけだろうな 定数だけという感じで だからJavaではDoubleをすべてvalueofで拾うのが正しそうだが
>>525 ウチで試したら、代入したときからDoubleみたい。
というか、何か呼び出し方が違うなぁ・・・・Binding使ってるから変換されてる?
この挙動から推察すると、JavaとのインターフェースではDoubleになるのが仕様なのでは?
/*ソースはインデントの為、半角→全角変換しています*/
package script;
import javax.script.*;
public class TypeTest {
public static void main(String[] args) {
try {
ScriptEngine se = new ScriptEngineManager().getEngineByName("js");
Bindings bdg = se.createBindings();
bdg.put("x", null);
se.setBindings(bdg, ScriptContext.ENGINE_SCOPE);
Object res;
res = se.eval("var x = 1;");
System.out.println("JS Binding:"
+ bdg.get("x").getClass().getName() + ":"
+ bdg.get("x"));
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
結果:
JS Binding:java.lang.Double:1.0
529 :
デフォルトの名無しさん :2006/07/22(土) 23:13:33
Java5のGenericsなクラス、Genericsによって 型指定されたクラス(たとえばList<String>とか)を クラス図で記述できるUMLモデリングツールがほしい。 Jude3.0では対応していなかった。
Judeはいまだに5.0未対応か 1.4系のSystemLAFはぜんぜん似てないからちとな
>>528 b94の変更点一覧によると、インストーラの不具合は予定通り修正されたようだな。
>>531 いっぺん、アンインストールのときにエラーがでるかもしれんけど
気にせず2回目実行すれば大丈夫だな
そーいや、7月に Dolphin プロジェクト始まるとか言ってなかったっけ?
>>534 追記:
ベースになってるのがb90-b93らしいので
>>528 の回避策を使わないとインストールできませんので。
536 :
デフォルトの名無しさん :2006/08/20(日) 17:29:10
Javaは引数の参照渡しができない とんでもない駄作
536は引数の参照渡しができないとスワップもできない駄プログラマ
Javaは参照の値渡しをしているだけだ。 参照そのものは渡せない。だからライブラリが作りやすいのに。
> 536 問題なし。 void hoge(int[] a){ a[0]=a[0] * 2; } void main(){ int[] lap = {2} hoge(lap); int v = lap[0]; System.out.println(v); }
C言語風だな。
>>539 Arrayでラップか、でもその場合つづりはwrapじゃないか?
543 :
デフォルトの名無しさん :2006/08/21(月) 18:51:32
>>542 こんなかわいい女の子がプログラミングに興味持つのだろうか?
周りを見回すと、数少ない女はみんな…ry
誰かかわいい女の子がいる職場知ってる?
可愛いってのはそれだけで才能だからな。それを活かせるのは プログラムするところじゃないだろう。本人が好きなら分らんけど、 そうなる可能性は奇跡のように小さいだろうね。
peter ahe のブログみてたら クロージャの文法っぽいpdf が落ちてた。
http://blogs.sun.com/roller/resources/ahe/closures.pdf クロージャ変換というのが提案されてて、
java.lang.Runnable みたいに 1つしかメソッドを持たない interface と
同じシグニチャを持つ クロージャは変換可能になるみたい。
(void() 型のクロージャは Runnable にも変換できるらしい?)
ただこれ、java.uril.concurrent.Executor executor = ...;
execurot.execute( (){ System.out.println("test"); } ); は
コンパイラが暗黙に Runnable の匿名クラス作ればOKっぽいけど
例えば Runnable と似たようなインターフェイス
interface MyInterface{ void method(); } があったときに
void() closure = (){ System.out.println("test");
Runnable r = closure;
MyInterface m = closure;
とかされた時どーすんのかな? とか思った。
あと、null が正式に型に昇格する事も検討されてるらしい。
null.class とかできるようになるとか?
546 :
デフォルトの名無しさん :2006/08/21(月) 22:30:15
nullがクラスになったらどういう事が出来るようになるの?
reflection とか型推論とか通常は値を返さない関数のように動くクロージャに必要って書いてあるけど、 よくわからん。
あ、判った。匿名クロージャは引数型は必要だけど戻り値型を書かなくていいらしい。 で匿名クロージャで return 文を書かずに、その匿名クロージャが中途完了する場合 (必ず例外投げる場合とか?)は戻り値型が null になるって事らしい。 正常完了する場合とか、引数無しの return がある場合は戻り値型 が void になるって書いてあった。
それって、戻り値が「必ず」nullになるんなら、nullじゃなくてvoidにしたらなんで駄目なんだろうか。
戻り値が必ず null になる場合に void にしたら拙いじゃん。 Object closure() ってのがあって、 そのつもりで (){ return null; } って匿名クロージャ書いて 戻り値型を void にされたら適わん。
あれ? nullが型になるってことは、そういう場合は Null closure() って書かないといけないってことなのかと思ったんだけど。
よーするに、中途完了する匿名クロージャは、 値を返すクロージャと型の互換性が無いと拙いって事では無いかと。 値を返すメソッドを持った interface を書いて、 実際には必ず例外投げる匿名クラスを作りたいとする。 匿名クラスの場合は戻り値型があるから良いけど、 匿名クロージャは明示的に戻り値型を書けないっぽいので。 戻り値型を null にしておけば、どんな戻り値型のクロージャとも 互換性ができるのでは無いかと思う。たぶん。 仮にそーだとすると、null は void の上位クラスって感じになるのかな?
void の上位クラスっつーか、null は void と Object の上位クラスって感じか……
>>545 には、そんな難しい事書いてない。
値nullが存在する限り、値nullには型が必要ってだけ。
closureの文法では陽に書く場合があるので、これを機会に導入。
もともと型推論的には必要だったもの。
>>553 その辺はSubtypingのところに書いてあるな。
> A function type T is a subtype of function type U iff all of the following hold:
> ・Either
> ・The return type of T is either the same as the return type of U or
> ・Both return types are reference types and the return type of T is a subtype of the return type of
U, or
> ・the return type of U is void.
(以下、引数型や例外に関しての条件が続く)
以下の条件の全てをみたすなら関数型Tは関数型Uの下位型である。
・以下の何れか
・Tの戻り型がUの戻り型と同じ
・二つの戻り型が共に参照型であり、Tの戻り型がUの戻り型の下位型である
・Uの戻り型がvoidである
(以下、引数型や例外に関しての条件が続く)
Referencing names from the enclosing scope のところ見ると、 匿名クラスの時みたいに final 付けろって書いてあるね。
>>556 逆、逆。
匿名クラスのように、finalを*付けなくていい*と書いてある
テキトーに訳してみると
>> We do not propose a rule that requires referenced variables be final,
>> as is currently required for anonymous class instances.
現在、匿名クラスのインスタンスに対して要求されているような、参照される
変数がfinalでなければならないという制約は提案しない
>> The constraint on anonymous class instances is also relaxed to allow
>> them to reference any local variable in scope.
また、匿名クラスに対する制約も緩和され、スコープ内のどんなローカル変数も
参照できるようになる
>>545 > 例えば Runnable と似たようなインターフェイス
> interface MyInterface{ void method(); } があったときに
> void() closure = (){ System.out.println("test");
> Runnable r = closure;
> MyInterface m = closure;
> とかされた時どーすんのかな? とか思った。
closureをラップするクラスをそれぞれの代入に対して、自動生成すればいいんでない?
Runnable r = new Runnable_closure_bridge(closure);
MyInterface m = new MyInterface_closure_bridge(closure);
みたいな感じで
>>557 あ、本当だ。嘘ついてすまん。
このスレの
>>12 とかでも話題になってる変数の扱いとか、
どーなるんだろね? 後は VM に変更なしで実装できるんか?とか。
>>559 基本的には、ほとんどの機能はVMに変更なしで、コンパイラのみで
実装できると思う(ただし、クラスファイルフォーマットの変更は必要か?)
ただ、クロージャの中からそれを囲む関数をreturnする機能
(Non-local transferの部分)はVM変更なしでやるのはつらそう
簡単に実装するには、例外を使えばいいだろうけど、それだと性能出ないだろうし
>>560 自己レス
> クロージャの中からそれを囲む関数をreturnする機能
クロージャの中からそれを囲む関数の外側へreturnする機能、の間違いだ
Non-local transferは、p.5-6に記述がある。
その中でも
>>560 が心配しているケースはUnmatchedNonlocalTranser例外になる。
上を見てみろ
('A`)
苦労じゃ
くだらん
で、結局このクロージャ内からローカル変数は参照できるの? それとも引数渡し?
馬も出てないのになぜjdk7の仕様を気にするのか・・
570 :
569 :2006/08/23(水) 22:23:10
あ、ごめんここ次世代スレだった スレ間違った
ん?なんでスレ違い?Java6はもうすぐ出るしここでもいいような・・・
Java6は、メンテナンスリリース色が高いからな。 今後も、偶数バージョンは小変更、奇数バージョンは大変更という感じになるみたい
だが、あいかわらず5.0update8でエンバグとかやらかしてるからなんとも・・・ Java2DのOpenGLがWin環境でもちゃんと動作するようになってるかが見もの
Java7でクロージャの導入か。 いまいちクロージャって理解できていないのだが、 「外側のメソッドのローカル変数にfinal がついていなくてもアクセス可能な匿名クラス」 が仮に認められたら、これはクロージャ?
>>574 ちょっと違うとおもう。
それよりもマルチスレッド下でローカル変数束縛するとスタック上の実体をコピーで解決するつもりだったらアウトだし
ローカル環境を生かしておくとGCでメモリ断片化激しくなりそうとか厭な考えがよぎっちゃうんだけど、どういう風にするつもりなんだろう?
HotSpotがSelf由来だと考えればなにか考慮されているのだろうけど、関連論文とか乗っかっている書き込みとか見かけた人いる?
スコープを変数化するのがクロージャって感じかな。 ECMAScript触ってると特にそう思う。
クロージャからのローカル変数のアクセスは暗黙的に排他すんじゃないの? それよりスレッドにクロージャを渡すような使い方は俺はしたくねーな
スタックを保存してヒープにもってくとかそんな感じ?よーわからんなぁ。 スクリプトだとthisの扱いがいつでもmixinって感じで使いにくいから クロージャ使わないとデリゲートにならないんだよな
文書読んでみたが、並行性については特に何もやる気ないみたいだね 必要なら今まで同様プログラマが対処しろって感じ
Java in the BoxさんとこにJava 6では 「Server VM と Client VM の動的な変更」がサポートされるとあるんだけど これってSwingとかで文字列置換メソッドは Server VMでJITコンパイルできるとかそんなん?
クロージャはifやforの{}が引数と戻り値持った感じだと思う
>>577 Rubyやってると割と普通な気がするんだが、どの辺がいやなの?
匿名クラスでコンストラクタ定義できればそれだけでいいんだけどな。
そんなことより、Genericsの仕様、 さらなる変化は無いのか? パラメタライズドクラスを作るのが大変なんだが。 タイプセーフなため、配列と違って、List<Integer>はList<Number>のサブクラスにはできんし。 <>の中にさらに<>を入れ子に書いてとクラス設計が難しい。 パラメタライズされたクラスの継承でのパラメータの扱いといい、 慣れるのが大変。
解ってないんだけど、ローカル変数ってもともとスレッド毎でしょ? マルチスレッドで、何の問題があるの? スコープ抜けたときにスタックからヒープにコピーすればいいだけじゃん?
クロージャってC++にも追加されるんでしょ? 流行ってるね
>>584 そのスレッドで、Runnableなオブジェクトを作って
クロージャを引き渡したらどうなると思う?
そういうこと。
また、今のListener系のような使い方をした場合、
マルチスレッドになるのは目に見えてる。
ただ、先の文書ではそこらへんは保証しないみたい。
主張を読むと、そういう場合は、今まで通り匿名クラスを使うか、
Javaで既に用意されてる並行性の仕組みを使えってこと。
なぜなら、そんなのを必要としない大多数の開発者には
パフォーマンスが落ちるだけで有り難迷惑だから。
>>583 つワイルドカード
List<Integer> ints = new ArrayList<Integer>();
...
List<? extends Number> nums = ints; //OK
>>587 List<T extends Number> nums = ints;
はだめなのか
>>588 public <T> void aMethod() {
List<T extends Number> nums;
//
}
とかならTが型パラメータと分かるので可能だが、そうでなく唐突に
Tが出ても未定義シンボルになる。
と思ったら出来なかったorz
インスタンスイニシャライザではダメなんですたぶん
>>589 うーむ。Tの定義ってメソッドの頭かクラス宣言の後だったんだね。
継承使うとき、どうりで変だと思った
class A<T> implements SuperA {}
という表記はうまくいっても
class A implements SuperA<T> {}
はうまくいかず未定義といわれる。
当然、
class A implements SuperA<T extends Number> {
は怒られる
class A implements SuperA<?> {
も怒られる。
変なのはおまいの頭だと思うよ…
595 :
デフォルトの名無しさん :2006/08/25(金) 23:21:55
いきなりむかつくこといいやがったなおめえ。 確かにgenericsにはまだまだ慣れていないが、 情報が少なすぎていつもGenericsで悪戦苦闘して こっちは大変なんだよ。 しかし、Genericsでパラメタライズされたクラスを 作ってる奴は少ないんだな。 2chでも稀なほうか。 C++Templateとは似てるようで違うためか、 使いこなせない奴も多いもんだな。
>>595 情報とか言う以前に仕様書を読めよ。
あと
class A implements SuperA<T> {}
なんか A を使うときにどうやって T が型パラメタか
普通のクラスか見分けるんだよ。少なくとも
class A<T> implements SuperA<T> {}
とやらないとパラメタ指定できないだろ。
597 :
しろうと :2006/08/25(金) 23:59:55
ちょっと質問なんですが、クロージャが実現できると、何がウレシイのでしょうか? 実行時評価するわけじゃなくて匿名インナークラスのSyntaxSugar+α程度のもの でしかないのなら、別にどっちでもいいんじゃねえのとおもうんだが。 ここのところ、大々的に言語仕様かえるといっといて、結局やってることは プリコンパイラにどっちでもいいだろという機能を追加してる程度のケース が多いようなのだけど、どういう圧力からそういう結論になるのでしょうか。 後方互換を保つために妙な妥協して、あるべき論と掛け離れた中途半端な仕様 を差し込むくらいなら、何もしないほうがいいと思うのは私だけデスカ?
598 :
しろうと :2006/08/26(土) 00:09:24
>>595 別に無理に使わなくても、ちょっと頑張れば同じことができてたから
じゃないの。
おいらの場合、コードがコンパイラ依存になるのが嫌なので、当分セ
コセコデリゲートクラスとか自作して頑張ってくつもりです。
関数型のメリットは多いよ ・delegateの実装が楽(クロージャ) ・スクリプトフレームワークの拡張がしやすくなる ・継承では補いきれない差分プログラミングが可能(保守性向上)
>>597 > どういう圧力からそういう結論になるのでしょうか
VMにでかい機能を追加すると遅くなるだろ。
しかしGenericsの仕様はいくらなんでもあれだが。
>>598 Javaは私企業のプロダクトだから結局C#対抗な訳よ
マイクロソフトに負けたくないっていうSunの言語オタの意地とオナニー
.classみたいな感じで.methodってできるようになったら良くない? ってとっくに議論され、破棄されたんだろうが。。。 いまでもリフレクションでできるけど面倒なんだよね。 メソッドにアノテーションつけた時に参照するのも obj.getClass().getMethod("method1").getAnnotation(anno); とかだぜ。タイプセーフの意味がない。 これが method1.method.getAnnotation(anno); となりすっきり。。。
>>601 Javaもめでたくオプソになるらしいし、そのうちC#コンパイラとか
出るんでねえのかなとか思う毎日。…って、APIのサポートがむずいかな。
ECMA標準のC#なら余裕だろ SUNもJava VMを.NET化させるつもりだし
Sunっていつも後手後手だよね
夏休みもそろそろ終わりなのになぁ。。。
もうJavaもおわりだなと感じる今日この頃
JavaOneの聴講者数は年々増加の一途なのだが
>>609 それに比例して、馬鹿がますます増えてきたな。
Java人口の増加と先進性は反比例
>>602 Hoge.classがClass.forName("Hoge")の言語糖衣だと知った時はショックでした。
>>597 の感想はもっともだよな
後方互換を気にしながらC#の後追いしてるくらいなら
新たな言語環境を提案してくれないかな
もっともSunにもIBMにも無理そうだな
>>613 ちがくないか?
Class<Hoge> c = Hoge.class;
と
Class<?> c = Class.forName("Hoge");
でしょ?オレが間違って覚えてるのか。。。?
> 新たな言語環境を提案してくれないかな 100%ぽしゃるから。今の時代はライブラリ>言語仕様
Javaの欠点はGUIライブラリの貧弱さ
>>619 Swingの実装感は.NETのライブラリとたいして変わらんと思うが。
問題は性能なのか?
>>618 そういえばそうか
でも.classリテラルはforName()とは使用場面が異なると思うんだが
それでも糖衣っていうのか。
>>621 Hoge.classはコンパイラ通すとClass.forName("Hoge")に
コンパイルされるってこったよ。
>>620 クライアントアプリを作るにはまだまだ
たとえるならXToolkitレベル
標準のFontChooserとかGridControllerとかなんで出てこないんだろ
>>623 目指すはVBなわけですな…かくてまた馬鹿が増えるのかorz
バッドノウハウとグッドラッパーの話だなこりゃ
目指すはVBてか、GUIはある程度統一されるべきな訳よ GnomeやKDEのようにね あるアプリで選択した色やフォントは、別なアプリでも使いたい そのためにはJavaももうVMだけじゃなくて バックグランドで常駐するサービスレイヤーが必要だと思うのね
>>626 >バックグランドで常駐するサービスレイヤー
Java6ってそれじゃなかったっけ。
>>622 syntax sugar ではあるが Class.forName("Hoge") にコンパイルされるわけではない。
>>623 Swing って SWT/JFace の対応で言う SWT の方 (基本機能) であって
高機能なコンポーネントは自作するorどっかからライブラリを探してくるor買う
もんだと思うんだが。
ブラウザがAPIいっぱつでデフォルトをぽんって出すから そのうちメーラーとかコンパネとかフォントダイアログとか そういうのもネイティブで出るんじゃないか
>>622 しつこいようだが、なんでジェネリックスだけ違うのかわからん。
Class<Hoge> c = Class.forName("Hoge");
がコンパイルしないのは何故?.classだとokなのに。
eraserとかってやつ関係かな?
>>623 それだといつまでたっても統一環境ができない
アプリは自作でいいが、サービス層はもっと充実させるべき
>>630 そういう場合こんな感じじゃなかったっけ
Class<Hoge> c = Class.<Hoge>forName("Hoge");
>>629 ブラウザが基盤だという発想には違和感感じっぱなしの私。
あれは明らかにアプリでしょうに…
>>632 よくわかんないけど
forName使う意味なくない?
forNameはコンパイル時にはclassが見えない時につかうんじゃね?
Hogeが手元に無い時とかさ。
>>634 そこは一応名前と実際のクラスは別もんということで、、、
クラスローダによってはほんとに別にできると思うけど
正直どうでもいいんだけど Class hoge = Hoge.class を含むクラスをSunJDKのjavacでコンパイルして、javap -c してみると、 invokestatic Method java/lang/Class.forName:(Ljava/lang/String;)Ljava/lang/Class; になるわけなんだが、俺なんか勘違いしてる?
まあGUIについてはJavaは約20年遅れてる ってことでおやすみ
>>636 バージョンは?
確かにどーでもよいが。
>>638 手元のJDKは1.4.2_10。5.0は持ってないのでどうなるかシラン。
>>639 1.4までは.classは.forNameと同等
1.5からは扱いが変わったってことかな?
なんでかえる必要があったのか、というのは考えない事にします。
どうでもいいことだが、 1.5 からはクラスリテラルではクラスが初期化されない。
>>599 自分も、スクリプトフレームワーク側からの要請が
結構でかいんじゃないかと思う。
.NETなIronPythonは結構速いみたいだし、JythonとRhinoも速くなって欲しいな。
>>601 というけど、C#のようにはならんと思う。
C#とくらべかなりTypesafeだと思われ。
それだけにGenericsではパラメタライズされたクラスを
実装するのが難しいが。そのかわりタイプセーフが保証されるので
パラメタライズドクラスを便利に、かつ安心して使うことができる。
マイクロソフトに負けたくないってのとはちょっと違う。
っていうかJavaはもうSun私企業のプロダクトじゃなくなってるよ
Java Community ProcessによってだれでもJavaの変更について参加できる。
実際に変更するかどうかはゴスリングあたりが決めるが。
それも、JavaがC++の二の舞にならないようにするためさ。
>>604 > ECMA標準のC#なら余裕だろ
> SUNもJava VMを.NET化させるつもりだし
それは初耳。ソースはどこにある?
.NET化というのは.NETと共用するの間違いではないかと予想する。
>>614 ? ゴスリングが新しい言語を作りたいとかいってなかったけか?
>>611 JavaOne聴講者に馬鹿が増えたと?
去年JavaOneTokyo2005に行ったときはそうでもなかったが。
綺麗な設備に恵まれた東京国際フォーラムを全部貸し切って、
金のかかったイベントだなって気がしたけど。
>>624 ちょっと違うな。
Java Studio CreatorがVB屋向けっていうけど
あれはなんだか、Dreamweaverに似てる。
デザイナにJavaを憶えさせたいという無謀な考えがSunに
あったのだろうか。
それでもCreatorの完成度は高いけどね。
しかしメモリ食うしかなり重たい・・・
なんか開発環境と実行環境がごっちゃになってる香具師がいるようだが?
>>648 では聞くけど新しい時代のSwingって何?
>>651 Java5とかJava6のSwingじゃね?
もしかしたらJava1.4.2かも知れんが。
少なくともJava1.2やJava1.3のSwingでないことは確か。
Java SE 6 は、SwingにもJOGLの3Dレンダリングが使えるようになるんだろ。
今までは3Dを使う場合はAWTにする必要があった。 そのためSwingで使う場合AWTで作られたリソースをバイト配列にして再構築していた。 あとLinuxとかならSwingは高速化するんと違うかな
>>650 にしても、VBなんて開発環境と言語がわんせっとになった言語だよな
>>651 タスクトレイが追加されたりタブのスクロールや移動ができて
かつSWTよりも高速になった時代のSwingだよ。
C++で作られたGUIと比べてもパフォーマンスのほうは大差なくなってきたって事だね
>>614 別に後追いばかりってわけじゃないぞ
プリミティブ型のboxing/unboxing、拡張for文、アノテーションあたりは後追い感が強いが
Genericsの仕様はC#のGenericsの仕様が決定するだいぶ前から検討されてたし、
今回の関数型およびクロージャの仕様はC#のデリゲートに比べるとかなり良い仕様に
なっていると思う
Java 7のはっちゃけぶりを見るとJVMを残してJavaを捨てる気まんまんだな
>>658 後追いといっても、C#とは仕様が異なる感じだな。
アノテーションもboxingも。
後追いのようになってしまったのは、
Java Community ProcessでC#のことをよく知ってる人が
Javaにもこういう機能つけてくれよって提案したからじゃないかな。
>>659 Javaの何をすてるんかな。
JVMがどう進化するのか楽しみではあるが
>>661 Javaの構文だけを整理したものが残ると思う
>>662 何がいいたいのかよくわからないが、
構文を整理したものって一体どういうものを想像している?
気になるので挙げてみておくれ
getter, setterとか、addListenerのデリゲート化とか。 あとはjava.ioとjava.nioの関係みたいに 互換性のために統合を避けた部分も整理して欲しいし StackとかPropertiesみたいに設計に失敗した部分も直す。 Javaの資産はD言語みたいに別言語構文を解釈する制御を入れればいい。
それより何より、配列まわりの型の腐りっぷりをさっさとどうにかして欲しい。
>>664 > getter, setterとか、addListenerのデリゲート化とか。
たまにJavaスレに紛れ込むドトネト厨だかVB厨かよ。
getter,setterはどうでもいい。その程度ならdelegate化もどうでもいい。
どうせクロージャが追加されるならなおさらどうでもいい。
> あとはjava.ioとjava.nioの関係みたいに
> 互換性のために統合を避けた部分も整理して欲しいし
認識が甘い。そんなとこを統合してどうする。
それとも、整理する必要がどこにあるのか具体的に説明できるか?
> StackとかPropertiesみたいに設計に失敗した部分も直す。
初心者Java質問スレ見てた奴だな?
どう見直すというのか。放置か@Depricatedでいいだろ。
> Javaの資産はD言語みたいに別言語構文を解釈する制御を入れればいい。
Java6ではスクリプト言語を解釈するAPIがあるぞ。
>>665 それも、Collectionがあれはどうでもいい。
多次元ジャグ配列なんて滅多に使わないし。
無闇に使う奴は設計能力センスが甘いやつだね。
>>666 > getter,setterはどうでもいい。その程度ならdelegate化もどうでもいい。
おまえの主観だろ?多言語出身者は口をそろえて汚い仕様という
> それとも、整理する必要がどこにあるのか具体的に説明できるか?
現状でBufferを使いこなせる技術者は極端に少ない。
ファイルマップすら知らない奴ばっか。
> どう見直すというのか。放置か@Depricatedでいいだろ。
depricatedなクラスがシステムローダにロードされる時点でおかしい
> Java6ではスクリプト言語を解釈するAPIがあるぞ。
根本的な部分でアイタタタ
>>668 > 現状でBufferを使いこなせる技術者は極端に少ない。
他は言語環境の改善要求っぽいのに、これは完全な愚痴だな。
あちこちでdeprecated のスペル間違えているやつがいるな。 同一人物か
>>669 コンセプト違いの重複した機能があちこちにある時点で要改善だろ
>>668 >
>>666 > > getter,setterはどうでもいい。その程度ならdelegate化もどうでもいい。
> おまえの主観だろ?多言語出身者は口をそろえて汚い仕様という
他言語出身者って、どうせC#やVB, Delphi言語出身者かドトネト厨である
おめえの主観だろw 綺麗な仕様とやらはC#やDelphiのget/set程度の仕様かw
あの程度で綺麗なら、演算子オーバーローディングやunsafeでソースコードが汚くなるのを
どうにかしようとは思わないのか。
> > それとも、整理する必要がどこにあるのか具体的に説明できるか?
> 現状でBufferを使いこなせる技術者は極端に少ない。
> ファイルマップすら知らない奴ばっか。
Bufferはまた別の話だろ。Bufferを使いこなせる奴が少ないのと
配列の型がどうだこうだと一体どう関係があるのか。
Bufferが何のためにあるのかわかって言ってるのか?
> > どう見直すというのか。放置か@Depricatedでいいだろ。
> depricatedなクラスがシステムローダにロードされる時点でおかしい
なにがどうおかしく、どう不具合が出るのか説明できるか?
> > Java6ではスクリプト言語を解釈するAPIがあるぞ。
> 根本的な部分でアイタタタ
お前が痛い。
>>670 レス元コピって使っただけだ。単語をひらで書けないのは確かだがw
>>671 >
>>669 > コンセプト違いの重複した機能があちこちにある
たとえばどのあたりが?
>>672 お前が.NET中心でしかものを考えられないことは良く分かった。
そのほかの点についてもお前が無知なだけ。調べろ。
desktopアプリではflash player >>> JREなのになんでJREはあんなに巨大でなければいけないのか Java DEとか駄目?1Mくらいのサイズ希望
flash って desktopアプリ? webアプリじゃなくて?
>>675 でた厨房にありがちな最後の負け惜しみ逃げ台詞
はいはいドトネト厨乙
説明の説明の説明を求められなきゃ分からん位の素人にJavaを擁護されてもな
意味が分からんよそこ
>>677 ブラウザーなくても動くし、おおよそのことはできると思うんだけど。
描画は早いし、ビデオやオーディオも強い
ソケットも使えるから、やろうと思えばDBにも直接接続できなくもない。
Java3dみたいのはないが。。。まだ。
自分の理解が足りないことを棚に上げて.NET厨扱いかよw
どどんとねっとじゃんぬねっと
ここはゲイツが悪いということで収めてくれ
できればスティーブ・バルマーにしてくれないか?
>>683 FlashはAS3で化けたが、描画が早いとかそんなことはない
Javaのほうがはるかに早い
機能が段違いすぎ
少なくともFlashでは単純なものしかロジックは書く気にはならないだろ
もう、ゲイツには力は無いよ。 そしてマイクロソフトもGoogleに推されている。 いつかマイクロソフトがGoogleの力によって陥落するのも時間の問題。
力がなくなろうがなにしようが悪いのがゲイツ
691 :
デフォルトの名無しさん :2006/08/28(月) 01:50:37
ウィリアムさまの悪口を言うなんて なんて罰当たりな!w
何でいきなりクソスレ化するんだよ
必要な機能なら誰かが外部ライブラリで作ってくれるさ 本当に標準に必要なのは何かもうすぐコアライブラリのシュリンクが 入ってもいいんじゃないかと思う SEが肥大化しすぎていると感じる今日この頃 Jakartaでいいじゃん、っていう機能がコアに 取り込まれてる気がしてなぁ・・・・ まぁ使う側からいえば、ライブラリ追加しなくて楽なんだが それよりむしろ外部ライブラリを簡単に利用できる 仕組みの方が欲しいかな、JWSのライブラリ取得の仕組みを もっと積極的に活用してもいいような気がする
言語仕様で縛って遅くする+ライブラリを肥大化させて互換環境を作りにくくする、 ってのがお日様の戦略なんだろ
特定の言語が腐ってるとかAPIが腐ってるとか言う奴がよくいるが、 お前が言うところのその程度の腐れが、仕事上でダメージを与えるシーンが あったのか?そういうことが影響を与えるほど、センシティブな職場で働い てみたいよw 今まで困ったことの例: ・馬鹿なプログラマが意図不明な長大コードを混入させ、そこにバグが あったため解析と修正を任された… ・頭の悪い上司から仕様不明目的不明イミフメイの処理の実装を指示された… ・自社の自称エリート技術者ドモが、利用者側の要求と全く合致しない フレームワークの利用を押し付けてきた… ・どこぞの営業が経歴詐称して素人をプロジェクトに押し込んできた… 問題は全部、人依存でした…orz
問題は人なんだとしたら、Javaだと開発効率が良くバグも少ないというのは妄想。
>>694 そこまで斜めに見なくてもいいんじゃない?
じゃ、ばっさり互換性切り捨てるのがいいってわけでもないと思うが
バージョン変わったら名前は同じだが、まったく違う言語になるよりいいかと。。。
>>697 何でもかんでもコアに入れたがるのは、
俺たちにコントロールさせろ、って宣言だ。
SWT見たいな外圧がないと、
まともな高速化をしようともしないくせに、
ベンチマークのでっち上げだけはうまいんだから。
次世代のDesktop javaに必要なのは、SWT並みのLAFと、 Swing並みのプログラムしやすさを持ったツールキット。 Windows FormsをJavaから使えるようにできんもんか。
>>691 ゲイツはウィリアムテルでもなければ
フランスからイギリスを征服したウィリアム獅子親王でもリチャード王の十字軍でもない。
>>694 そりゃお前の脳内で描かれた陳腐な戦略。
702 :
デフォルトの名無しさん :2006/08/28(月) 18:49:34
>>699 やっぱりJavaスレにたまに現れるドトネト忠だ。
っていうか、逆にドトネト関連スレにもこういう
イチャモンつけてくるアホって
湧いてこないよね。
まるでドトネト忠は日本にイチャモンつける韓国人や中国人みたいだ。
>>703 お前はたから見ててひたすら痛いんだけど気づかない?
誰でもどっぷり浸かると周りが見えなくなるということなのかなぁ
救いようが無いなw
>>688 デスクトップでGUI以外そんなにロジックを組む事もないんじゃないか?
逆にswingでこったGUIを作る気になるか?(例えばOS Xのexposeとか)
swingはHTMLのFormの代わりくらいが限度じゃないか?
速度ではアニメーションや透明度を使う場合、圧倒的にFlash > swingだとおもうけど。
いつか実証してみよう。
709 :
デフォルトの名無しさん :2006/08/28(月) 23:32:37
同じ穴の狢(むじな)
「〜だと思う」で勝手な持論を展開する人は、何処にでもいるもんだな
711 :
708 :2006/08/29(火) 00:48:08
でもあれだ、eclipseとかは到底無理だなflashじゃ。 iTunesくらいだったらflashでもいけるかな。
Javaじゃ60fpsは無理だしな。16.6秒の世界でsleepの分解能が15msて。
>>702 どっかのスレで散々議論されてたんじゃないか。
・JITが効果的に利くオブジェクトをほとんど生成しない
ベンチマークでC/C++と同等のパフォーマンスであると主張。
・Java[Runtime]は低レベルのアクセスしまくりでパフォーマンスを改善。
・上記2つをもって、Java[言語]で書かれたコードはC/C++と同等の
パフォーマンスであると主張。
それを信じて(?)Pure Javaでがりがり書かれたEJBのパフォーマンスときたら
しかしEJBのパフォーマンス問題はJavaだからというよりも シリアライズが噛むからではあるまいか?
716 :
903 :2006/08/29(火) 03:00:52
>>716 PC は知らないが少なくともケータイだと一番分解能があるのは Object#wait だよ
>>714 話途中から変わってない?
JDKのパッケージングの問題(
>>698 )が、
JavaコンパイラのSunの自慢話に変わって、
そのSunの自慢を原因としてEJBの実装を叩いている。
でっちあげじゃなくて、JavaがC/C++より速い領域は結構あるよ。
>>714 言っていることが意味不明
> ・JITが効果的に利くオブジェクトをほとんど生成しない
> ベンチマークでC/C++と同等のパフォーマンスであると主張。
JITが効果的に効くオブジェクトをほとんど生成しないなら、
パフォーマンスはむしろ劣化するはずだが、それをもってベンチマーク
でC/C++と同等のパフォーマンスであるとは、どういうこと?
> ・Java[Runtime]は低レベルのアクセスしまくりでパフォーマンスを改善
何の話?ネットワーク、IO、GUIなどの箇所は、確かにネイティブコード(C言語)で書いてあるが、
それ以外のライブラリはほとんどPure Javaのはずだが。あと、そもそも低レベルアクセス
(OSのAPIを直接叩くことか?)すれば、パフォーマンスが改善するってもん
でもない。何故ならJavaからネイティブコードを呼び出すのは、かなりのオーバーヘッドが
かかるから。
>>718 > でっちあげじゃなくて、JavaがC/C++より速い領域は結構あるよ。
具体例をどうぞ。
Javaの方がパフォーマンスがいいなんて妄想もいいところ。
JVMがCでできてるんだから、CでJVM(もしくはサブセット)を実装して
その上で実行すればJavaより遅くなるわけが無い。
>>716 Timer関係+wait関係でおけ
ポーリングしたいのならナノ秒取得するやつ使え
Winだとちゃんと高精度タイマで実装されているぞ
Linuxだとミリ秒の1000*1000倍が返されてたきがした
このへんの制度はVM依存だが、まったく動かないわけではないのでおけ
アクションゲーム関係で60fpsだしたいのなら垂直同期使うわけだし問題なし
>>710 アメリカにいけば著名人ですらそうだぞ。
I thinkI thinkI thinkI thinkI thinkI thinkI think
ア イ シ ン ク ッ !
だ。
論文でもそうだ。さもないと他人の意見をパクった韓国人や中国人
と同等に扱われる。
>>711 Flashは4まではJavaのほうが圧倒的に早かった。
今はしらない。
Javaと違い、Flashでできることは限られている。
あれは時系列で開発してゆくからな。
Javaとは畑も開発スタイルも違う。
Flashは簡単なアニメーションなら高速で処理できる。
だが、三角関数や対数関数、指数関数などを徹底的に
駆使した幾何学模様の描画はどうだろう。
是非とも検証してみてくれ。
ActionScriptを使ってちゃんと三角関数などを使って計算してな。
>>714 そのEJBのバージョン、
それからプログラムのソースコードや
マシンのスペック、測定データをここに公開する気はないのかね。
まさか古いバージョンのJavaで作られたPetStoreを
例に挙げるわけではあるまい。
もう古くて参考にはならんぞ。
EJBを使ってるところは本当に少ないがな。
多くはEJBの変わりにPOJOを使ってるところばかりだし。
Seasar2とかSping Frameworkとかな。もしくはStruts + Tomcatオンリーとか。
StrtusやJSFすら使わないところも未だにあるが。
> Javaの方がパフォーマンスがいいなんて妄想もいいところ。 > JVMがCでできてるんだから、CでJVM(もしくはサブセット)を実装して > その上で実行すればJavaより遅くなるわけが無い。 こういいきる奴は何度も見てきたが。浅はかで何も解って無いというか、 騙されているというか。Javaの進化に乗り遅れて古い知識しか持っていない オッサンに多いんだな。
>>722 ナノ秒なら
Java5からも実装されたぞ。
System.nanoTime()
>>727 そういう小僧は盗んだコードで走る馬鹿だろう?
なんでもおっさん扱いしないでくれよ
730 :
デフォルトの名無しさん :2006/08/29(火) 11:38:05
みんな自分の信ずる言語・環境を支持すればいいだろ どうしてJavaスレには他の奴らが荒らしにくるんだ? 他の言語・環境がどんなに素晴らしいのかしらんがスレ違いだ 巣に帰れ!
731 :
デフォルトの名無しさん :2006/08/29(火) 12:23:15
次世代を語るところだから、どうしても他の言語と比べた改善点とか要望が出るんじゃない?
>>728 言葉が足りなかったかな
すでに実装されている話なんだし次世代の話題じゃないだろうということ
>>716 は細かい制御したいのに5.0のコンカレントAPIすらさわってないんだろうなーとかおもっちまう
733 :
デフォルトの名無しさん :2006/08/29(火) 13:53:56
>>731 お前はネイディブコンパイラとのパフォーマンス比較を改善点や要望とでも言うのか?
だたの攻撃だろ?違うのか?
>>730 昔懐かしい「C#って死滅しちゃうの?」シリーズスレで
大暴れしていた例のM$厨では?
735 :
716 :2006/08/29(火) 14:10:20
>>732 nanoTimeだけじゃアニメーションできなくない?
nanoTimeはsleepの分解能チェックや誤差の補正に使うものかと
結局sleep使わなきゃだめなんじゃないか?
それかObject.waitか。
J2SE6ではDoubleBuffer関係で何らかの改良があると聞いたかが。
そうそうConcurrentは使ってないな。まだ。そんなに必要性も感じてないが。
>>727 > > JVMがCでできてるんだから、CでJVM(もしくはサブセット)を実装して
> > その上で実行すればJavaより遅くなるわけが無い。
> こういいきる奴は何度も見てきたが。浅はかで何も解って無いというか、
> 騙されているというか。Javaの進化に乗り遅れて古い知識しか持っていない
?
進化とか古いとか関係ないだろう。CでJavaコンパイラを実装してclassコードを実行するという話をしているのだから
「Javaの方が速い」とならないことは自明なのだが。
恐らく「Javaは実行中にコードの最適化するから速い」とか言いたいんだろうが、
その実装自体はCでできているんだから、どんなにがんばっても「Javaの方が速い」という事態には絶対にならない。
ただ、CでわざわざJVMを再実装するのはコストがかかるから現実的ではないというだけ。
別にそこを認めてもJavaの優位性は変わらないと思うんだけどね。
いつものことだが、JavaしかできないやつはJavaを否定されると自分自身も否定されたような被害妄想を抱くよな。
どっかの宗教団体みたいで嫌だ。いろんな言語触れよ。次世代Javaの議論にも役立つぞ。
とんでもない勘違いをしている奴がいるぞw
痛い子が居るなぁ。
>その実装自体はCでできているんだから、どんなにがんばっても「Javaの方が速い」という事態には絶対にならない。 この意味が分からない。絶対と言い切れる根拠はなんなんだろ?
Javaで作ってスーパーコンピュータで動かせば速い。
>>740 > その実装自体はCでできているんだから、どんなにがんばっても「Javaの方が速い」という事態には絶対にならない。
> この意味が分からない。絶対と言い切れる根拠はなんなんだろ?
極論を言えば、
int main(){JavaVM *jvm;JNI_CreateJavaVM(&jvm);jvm->DestroyJavaVM();}
と書けば少なくとも速度は同じになるというだけのこと。
そんなにややこしいことは言ってない。
「JVMがCで書かれている」というのをもうちょっと考えろよ。
>>741 JVMの役割を知っていれば、わざわざスーパーコンピューターでJavaを使おうなんて考えないよ。
>743の続き で、JVMのソースコード中から、実行に不要な部分を削除していけば、 JVMをいじれないJavaよりも、Cの方が速くなる。誰でも分かる話だと思うんだがな。 実際にはそんなところに開発コストをかけるのは無駄だから現実的ではないと言ってるだけ。 頭が悪いのか、それとも宗教にはまってるからなのか。。。
>>735 nanotimeはポーリング用
定期実行にはTimer方面つかえといっておろう
> JVMをいじれないJavaよりも、Cの方が速くなる。誰でも分かる話だと思うんだがな。 JVMはCのライブラリィではないよ(笑)
749 :
716 :2006/08/29(火) 17:51:39
>>746 アニメーションとかの20msecとかそういう間隔の話をしているつもりだったんだけど、
Timer? ありえなくないか?
747はとても親切だ。 暴れてるやつは声を出して読むように。
>>749 どういう動きかわかってないんじゃない?
基本から勉強したほうがいいよ
753 :
716 :2006/08/29(火) 18:07:25
>>752 教えてくれ。
Timerも結局waitを使っているとドキュメントされているが、
waitは正確性を欠く、それをnanoTimeとかで確認してスケジュールを補正するのが教科書とおりなのだが、
Timerを使ってしまうと補正ができなくないのではないか?
次世代になってもwaitとかの精度はそんなに変わらないんだろうな
そこまでわかってるなら問題あるまい 垂直同期にこだわらなければ60fpsにする必要もあるまい 垂直同期にしたら自動的にリフレッシュレートであわせられる Win32ネイティブでやってるのと状況はかわらんよ
Windowsのマルチメディアタイマーは1msで寝れたと思うが
malloc/freeはどうした?>最速厨 JVMは都合のいいタイミングまでガベコレを遅延できる。 これをやると、特にSMPで差が開く。
蒸し返すな
>>756 性能を重視するならmalloc/freeをそのまま使ったりなんてせず、
普通は独自アロケータを定義するでしょ。
Javaがなんでもかんでも速いというつもりは全然無いんだが、Cで組んだっ て結局実装の仕方次第だろ。malloc/freeを何度も繰り返すような素のCの 組み方したら、JVMの「そもそもメモリ解放自体めったにしないで確保してる メモリを使い回す」ような実装より遅くてあたりまえ。 例えばObjective-CはCのサブセットで、コンパイルすれば完全なバイナリに なるわけだが、メソッド呼び出し速度とメモリ取得・解放速度でJavaのほうが上回る。 これはオブジェクト周りの実装の仕方の差だろ。 そこを意識して力技なパフォーマンスチューニングを組み込んでCでゼロから 作れば、速くなるのも当たり前。 JavaがCより速いとかいう話は、「Cで普通に組んだものより、Javaで普通に 組んだものの方が速いことがある。なぜなら、JVM自体にすでにパフォーマン ス・チューニングがされているから」という意味だってことがわからないのだろうか。 普通に組んだ時のパフォーマンスの差には意味があると思うけどねえ。
>>736 C言語原理主義者の言い訳ごくろう。
また「Javaしかできない奴」とステレオタイプ貼り付けとは。
Javaで飯食ってきたかったらJavaしかできないなんてありえんからね。
>>758 その独自アロケータとやらは、Javaの世代別GCを超えられるのか?
ヒープアロケーションやデアロケーションに、凝った戦略(実行は超高速)
とってるよ、あれ。フリーリスト管理独自実装とか、ショボイことしてい
る間は越えられんでしょ。
コンパイラやVMの性能次第で、幾らでも早い言語・遅い言語になるわけだが。 言語の特性とコンパイラ最適化技術辺りは最低限踏まえて議論しような。
マイクロベンチしにくい言語だなぁと思うことはよくある。 例えばN秒間の実行回数が4400〜5200とか異常な数値を出すこともしばしば。 ヒープサイズは-Xms -Xmxともに同じサイズにしても起こすから原因がつかめない
結局、学生とかによくある卓上理論ってやつじゃないのか?
机上だと思う。
767 :
758 :2006/08/29(火) 23:46:35
> その独自アロケータとやらは、Javaの世代別GCを超えられるのか? 越えられるよ。 つーか、JavaのGCとかboehmGCとか、そういう汎用的なメモリ管理実装に 満足できないから独自実装するわけで。 > ヒープアロケーションやデアロケーションに、凝った戦略(実行は超高速) > とってるよ それは独自アロケータでも同じ。 そもそも、あるサブシステムでは特定のサイズのメモリを大量にアロケートするとか、 そういうプログラム固有の事情も考慮した上で最適なアロケータを設計するんだよ。 一般道から高速道までいろいろな状況でもそれなりに速く燃費の良いエンジンを作るのと、 サーキット上での速さの極限を目指したエンジン作りとを比較するようなもの。 そもそも設計方針から全く違う。
いずれにしても現実にあるjavaのOOなプログラムは速度の最適化は難しいんじゃないか? javaだからっていうか、OOだから。 例えば、java3dとか、hibernateとか、
じゃあ、比較すんなよ。
>>767 はなんかすごそうな職人さんのようですね。
必要に迫られて独自にそういうすごいのを作ったのでしょうが、
凡人・汎用ではjava vmぐらいでいいです。ruby gc thread とか遅くても
ちゃんと答えを出してくれればいいです。
>> その独自アロケータとやらは、Javaの世代別GCを超えられるのか? >越えられるよ。 >つーか、JavaのGCとかboehmGCとか、そういう汎用的なメモリ管理実装に >満足できないから独自実装するわけで。 このように、独自実装厨はチューニングが重ねられた汎用アルゴリズムに 劣る糞コードを生成するわけだ。乙
Javaの利点はCPUにあわせた動的コンパイルなんじゃないのかねえ。 Cだとターゲットにあわせて自分でコンパイルオプションを指定しないといけないけど Javaならある意味JVMが勝手にチューニングしてくれるし。
生産性を意識すりゃなんだって「それなり」の速度だっての。 うざいから他所でやってくれ、マ板でやることじゃないだろ。
>>768-774 みんなから一斉にツッコミのあらし。なんか知らないけど、笑いが止まらねー
次世代Javaに速度は強くもとめないということで。 おもいらそれよりSE 6のどこが素敵なのかまとめてくれんか?
ヒープ共有とタスクトレイはツール促進に繋がると思う。
Java 5.0 で既に十分高速なので議論しても仕方が無い。 それより、Java 6.0 Java 7.0 に予定されている言語拡張・ライブラリについて語ろうぜ。
>>11 の
>プロパティのサポート
>メソッドリファレンスのレポート
>クロージャのサポート
>言語レベルでのXMLのサポート
>JVM上で動作する動的言語のサポート
>スクリプト言語サポートの拡張
>モジュール化のサポート
>Swingアプリケーション開発のためのツールの充実
のうち、今回出てきたのは「メソッドリファレンス(たぶんローカル・ファンクションのこと
だろう)」と「クロージャのサポート」なわけだが、
「プロパティのサポート」はまだ具体例が出てきてないね。
最後のSwingアプリケーション開発のためのツールって
のは、たしかSwingをベースにしたアプリケーション・フレー
ムワークを作るとかだったっけ。
最後のはただのNetBeansプラットフォームだったりしてな
# クラスパスのワイルドカード指定 これなw これが一番重要な更新だったりしてw
Swing Application Frameworkって具体的にはどんなの?
784 :
デフォルトの名無しさん :2006/08/30(水) 03:25:08
>>758 ,
>>767 その経験は選ばし者のみ体験できることぞよ。そこから習得した業をこれからも存分に発揮するが良い。わははははは
まずJavaをCたらしめているcloseメソッドをなんとかしろよ まず名前をdeleteに変えてバカに気づかせろ
>>781 ktkr
いったいここまでたどり着くのに何年かけてんだ?
こんなのNEXTSTEPをSolarisにポートした連中なら最初に気が付いてるだろ
いやー、これなかなかいい設計だぞ? 今の基準でみると糞みたいなNEXTSTEPのフレームワークと違ってw
>>756 > malloc/freeはどうした?>最速厨
> JVMは都合のいいタイミングまでガベコレを遅延できる。
分からん奴だな。そのガベコレをCで実装すればいい。
>>759 >
>>720 は、ぐぐってみたところ、
> Javaの方が実行速度が速い例がたくさん見つかったので、
Javaの方が速いっていうのは、C側ベンチでJavaと同じ事をしていないだけのこと。
Javaの挙動全てをCで実装すればJavaと同じ速度になるのは当たり前だと言ってるだけだ。
>>772 > Javaの利点はCPUにあわせた動的コンパイルなんじゃないのかねえ。
> Cだとターゲットにあわせて自分でコンパイルオプションを指定しないといけないけど
そんなもの不要。CPUにあわせた動的コンパイルをCで書けばいいだけ。
.classファイルを読み込んでJVM上で実行(もちろんJIT付き)するようなCプログラムを書けば、
Javaの方が速くなるなんてことは無いと言ってるだけなのに何で分からんかな。
必死だな。
こんなに頭悪い奴だとは思わなかった。
>>788 いいたいことはなんとなく分かったが、それを言うことで
あんたが何をしたいのかがさっぱり分からん。
自分の無知の隠蔽
痛い子が粘着してるな 明日までの辛抱かの
>>775 しかし、バージョンアップするたびに高速化してるみたいなんだけど。
次期バージョンJava6もPreJITによってかなり高速化が期待できるんでない?
二回目以降のアクセスからはCのネイティブと同じ扱いになってかなり高速化する、みたいな。
>>792 面白すぎる。
マ板で必死にJava叩きしてるおっさんどもを思い出すw
>>791 >
>>788 > いいたいことはなんとなく分かったが、それを言うことで
このスレで頭がいいのはあんただけのようだな。
> あんたが何をしたいのかがさっぱり分からん。
>>720 を理解できない奴が多かったから説明しただけ。
あんたみたいに理解力のある奴ばかりだったらいいんだがな。
>>736 に書いた通り、Javaをけなそうとしているわけではないし、Cが素晴らしいなんて言うつもりも全く無い。
JVMはCで実装しなきゃいけない決まりでもあるの? Javaチップ上でベンチ比較する場合についてはどう考えてるの? この場合Cの処理系をまず用意しないとダメだけど…
>>796 どっかの宗教団体みたいなのはお前のほう。
お前の主張がいったい何になるのか説明できんだろ。
お前の意見が何もプラスにもならないならどっかの宗教団体と変わらない。
わかったから、アセンブラで書くと最強! Cはその次! で良いだろ 実の無い議論しても無駄だろ
こいつら一体何なんだ・・・
> JVMはCで実装しなきゃいけない決まりでもあるの? > Javaチップ上でベンチ比較する場合についてはどう考えてるの? はいはい、机上の仮説はどうでもいいから、 まずはC,C++で実装された現行のJVMにも性能面でひけを取らない Javaチップを開発してからまた来てね。
>>800 Cで1からjvmもどきを書くと現行のJITより高性能をたたき出せる天才プログラマ様らしいよ
もうお前等来なくていいよ!
> > Javaの利点はCPUにあわせた動的コンパイルなんじゃないのかねえ。 > > Cだとターゲットにあわせて自分でコンパイルオプションを指定しないといけないけど > そんなもの不要。CPUにあわせた動的コンパイルをCで書けばいいだけ。 まあ、CPUのサポートする命令セットに合わせて実行時に自己書換する、なんて テクニックは大昔からあるよね。 今だって、多くの動画コーデックはSSE等の拡張命令の有無を実行時に調べて 動的に実行コードを生成したりしてるし。 そういう古くからあるテクニックの一部がJVM実装にも取り込まれるように なってきた、ってだけの話。
俺よー、JVMの仕組みよく知らないんだけどJavaって実行時に 何度も実行される箇所はコンパイルしてネイティブコード生成するんだよな? だから コンパイル時間 + (CPU最適化コード実行時間 * n) > 386バイナリ実行時間 この式が成り立つ可能性は十分あると思ってる。( n が増加するほどJava有利) なんかJavaはCを越えられないと言ってる奴はどうも ネイティブコード生成後もJVMで解釈して実行してると思ってそうなんだが…? CでもIntelMacのユニバーサルバイナリみたいに全CPUに最適されたコードを含んだ バイナリを持てばJavaを上回るのは明らかだけど、そんな事してる奴いないよね。
> コンパイル時間 + (CPU最適化コード実行時間 * n) > 386バイナリ実行時間 > > この式が成り立つ可能性は十分あると思ってる。( n が増加するほどJava有利) だから、nが大きくて、CPU毎に最適化したコードによる恩恵が十分得られる場合は、 >805のような動的実行コード生成をC, C++でもやればいいだけの話。 で、こういう手法は机上の空論じゃなく、多くの動画コーデックや OSカーネル(ページクリアに使うmovntiとか)など、多くの場所で用いられているんだよ。
>>807 >> >805のような動的実行コード生成をC, C++でもやればいいだけの話。
必ず同じ事ができるとは限らない。
「JavaがCより速い場合がある」ってのは、同じようなアルゴリズムでコードを書いた場合ってことだろ。 そりゃ、最適化したコードで比べればどんな場合でもCの方が速くなるだろうよ。 でも、その最適化したコードをCで書くのは、コストや能力を考えると現実的に不可能だ。
> >> >805のような動的実行コード生成をC, C++でもやればいいだけの話。 > > 必ず同じ事ができるとは限らない。 その理由は? Cで書かれたJVMにできて、Cで直接書かれたプログラムにできないことって何? それともJavaチップのことでも言ってるの?(笑
>>806 コンパイル時間 << ε
ならば、誤差の範囲内として無視できる。
すると、JavaとCとでは速度はさほど変わらなくなる。
また、
Java実行速度 - C実行速度 << ε
なら、ますます無視できる。
ここでεとは非常に小さな値を表し、 <<は<よりもうんと大きな差があることを意味する。
つまりうんと小さくなるという意味。
で、Cでできるからなんだよ?
>>810 実例を出すと、ベクトル型スパコン。
Cで書かれたプログラムより、FORTRANプログラムの方が速いとされる。
コンパイラはどちらもCで作られている。
これは、ソースレベルでは同じアルゴリズムであっても、FORTRANで記述
されたプログラムの方が、Cよりも最適なベクトル化できるからである。
コンパイラを同じCで作っても、どこまで最適化できるかは、各言語仕様も
関係してくる。
あれ、いつの間にここはFORTRANスレになったのかな?
>>813 だから、{Cで書かれたFORTRANコンパイラ+.Fのソースファイル}を合わせて、
一つのCで書かれたソフトウェアと見なすって話が延々と続いているわけだ。
論理的には正しいが、実効的な意味はない。
ってのが
>>736 の最後のパラグラフの意味だと思われ。
816 :
602 :2006/08/30(水) 16:04:51
>>778 メソッドリファレンスって俺待望の
>>602 で書いたようなことじゃないのかね?
だとしたら、あと5年はjavaを使おうかと思うな
でもSE7からなのか。。。
>>788 >
>>756 > > malloc/freeはどうした?>最速厨
> > JVMは都合のいいタイミングまでガベコレを遅延できる。
> 分からん奴だな。そのガベコレをCで実装すればいい。
不可能。メモリ関数の使用を禁止せず、ガベコレを実装できない。
メモリ関数の使用を禁止すれば、ソースを書き直さなければならず、
もはやCのプログラムではなくなる。だから、JavaやC#のような新しい
言語ができたことを理解しろ。
>>817 へー、Boehm GCを使ったCプログラムはCのプログラムではないんだ。
>>818 ベタベタなコードにコンサバなGCで体裁繕ったらパフォーマンスでないぞ
いい加減みっともないまね続けるなよな
>>817 > 不可能。メモリ関数の使用を禁止せず、ガベコレを実装できない。
JVMはどうやってガベコレを実装してるの?
>>807 つまり、普通の人はそんなの作らない&作れないから、
凡人が高速なプログラムを作ろうとしたらJavaで書いて実装した方がいいって事だよね。
理論的にCオンリーの方が早くなるっていうのは別に、誰も否定しないと思うけど
現実的にJavaの方が早くなる【場合がある】っていうのを認められないのは厨房だと思うな。
>>820 メモリ関数使ってるに決まってるだろ。馬鹿じゃねぇの?
823 :
デフォルトの名無しさん :2006/08/30(水) 17:38:48
Javaの人は、Cはほどほどに教養程度なんじゃない? 詳しかったらJavaの環境に居ないで、Cの環境(Win32やUnix)に行ってるでしょ。 せいぜい jni 程度でゴニョゴニョで、gc 実装とかそんなディープ話題は 次世代Java環境が気になるJava使いの人はついて来れないと思う。
>>823 つまり冷やかしもほどほど程度にしとけってことかな?
言語仕様も関係するが、それよりも実行形式の抽象度の違いによるんだよ。
>>823 当然、おまいはGCの実装経験がある or 実装できるのだな。
各種GCアルゴリズムについて語らないか?
>>822 は叩かれてる人?泣きそうになってるみたいだけど
828 :
デフォルトの名無しさん :2006/08/30(水) 18:09:04
>>807 >だから、nが大きくて、CPU毎に最適化したコードによる恩恵が十分得られる場合は、
>>805 のような動的実行コード生成をC, C++でもやればいいだけの話。
>で、こういう手法は机上の空論じゃなく、多くの動画コーデックや
>OSカーネル(ページクリアに使うmovntiとか)など、多くの場所で用いられているんだよ。
if(SSE2命令が利用可能か?) {
// SSE2命令を利用したインラインアセンブラによるコード
}
else {
// SSE2命令を利用しないインラインアセンブラによるコード
}
これのどの辺りが動的実行コード生成になるのか説明してくれんか?
無知は怖いね。
高速化高速化いうてるけど 1.4.2のが5.0より速いらしいぞ SUNのベンチ鵜呑みにするなや
>>823 いまどきそうやってCはJavaよりも凄く、
「Cを知っていればJavaを知らなくても偉いんだ!」
と勘違いしてCしか知らず、Javaのことろくに勉強しないのも、恥ずかしいことなのだが。
いまどきそうやってJavaはCよりも凄く、 「Javaを知っていればCを知らなくても偉いんだ!」 と勘違いしてJavaしか知らず、Cのことろくに勉強しないのも、恥ずかしいことなのだが。
834 :
デフォルトの名無しさん :2006/08/30(水) 20:04:14
いまどきそうやって技術は一般常識よりも凄く、 「技術を知っていれば一般常識を知らなくても偉いんだ!」 と勘違いして技術しか知らず、一般常識のことろくに勉強しないのも、恥ずかしいことなのだが。
>>833 お前よ、餓鬼みたいに
>>832 のコピペしてるのどっかで見たことがあるぞ。
C#死滅スレのVBとC#を崇拝する、継承嫌いの餓鬼だろw
いつまでたっても馬鹿が釣られまくっとるな ガキが相手するから正常化せんのだが能無しには分からんか
嵐が過ぎた後は誰もいなくなっている悪寒。 お前らCがJavaより早くJavaはCより早いのは分かったから メソッドリファレンスが何なのか情報提供してくれ。
>>837 奴はVBとC#に詳しいアホだよ。
昔、語尾に「嘲笑激藁」「ププ」「ゲラ」「ワラ」「大爆笑」
をつけてた奴、ハンドルが「255」とかつけてた奴に
非常にそっくり。
結局あそこまでC#を持ち上げても、全然はやらなかったな。
どうせ奴は鬱憤晴らしにスレを荒らしてるだけだろう。
>>807 つーか、動的生成云々うるさいけど、それってモジュール切り替えでええんじゃないん?
実行時生成なんてしなくても、コンパイルしたモジュールも含めればいいだけの話。
C使いでもめったに使わない技術を得意げに語るのは哀れですらある。
Java厨だってバイトコードの自力生成なんて滅多にしない。
レスすんなカス どこまで脳みそゆるいんだ
>>787 いやー盛り上がってるとこ悪いが、20年経ってその台詞恥ずかしくないかw
ところでJavaCardって何に使うの? Java OneとSUNのシンクライアントでつかうくらいしか聞いたこと無い。 Edyのがすごいよ、コンビニ清算最速ってすごくね?
845 :
デフォルトの名無しさん :2006/08/30(水) 21:15:41
ココの住人には
>>823 は図星なのか?
みんなずいぶん喰らったみたいけど大丈夫か?
>>813 C言語にポインタがあるために、ベクトル化による十分な最適化ができないが、
FORTRAN言語にはそのポインタがないので、十分にベクトル化できると聞いた
ことがある。
Java言語が出たとき、JavaもポインタがないのでFORTRAN並に最適化できる
のではないかという極端な記事が、Cマガジンに載っていたような覚えがある。
今となってはJavaの仕様では、FORTRAN並に最適化は無理なのは自明だが・・。
847 :
デフォルトの名無しさん :2006/08/30(水) 21:17:28
>>841 バイトコードの自力生成ってできたの?しらなkった。
ところで、どうやってやるの
図星ってのもあるが正直どうでもいい 特定環境に最適化されたGCなんて興味ないなって感じ
>>830 オイオイ、必死に何か探してきたと思ったらコレだ。
自己書き換えと動的実行コード生成は似て非なるものなんだが。
>>847 適当なバイト列を作ってClassLoader#defineClass()を呼ぶだけだ。
そのバイト列はJavaVM仕様に合わせて作ればいい。
BCELやasmなどのバイトコード作成用ライブラリもある。
Java5からはClassLoader側で細工しなくてもバイトコード変換ができるように
java.lang.instrumentパッケージ以下のクラスが追加された。
851 :
デフォルトの名無しさん :2006/08/30(水) 21:54:51
>>850 しらなかった、あんがと。Jakarta BCELを読んでみる。
>>851 正直言って、BCELは設計が古いというか微妙に使いにくいので、
新規ならASMかJavassist使った方が良いかと
他言語 -> Javaバイトコードのコンパイラ作るなら、Javassistはちょっと使いにくいが
853 :
デフォルトの名無しさん :2006/08/30(水) 22:09:50
今BCEL読んでる最中だけど、これってすげーな。 この技術と言うか概念というか、次のリリースでスクリプト言語を java vmに取り込むとか言うのより、さらに高次元の話じゃん。
854 :
デフォルトの名無しさん :2006/08/30(水) 22:32:11
大体概要は分かったけど、すごかった。こういうツールが整備されて
徐々に万人向けに使いやすくなっていくと、これからも OSに依存しな
い Java の環境がより強固なものになっていく予感がする。
昔Sunが目指していたNetworkがどうのというやつなのかな。
> 他言語 -> Javaバイトコードのコンパイラ作るなら
>>852 さんはこういう系の人なのでしょうか?
そうとは知らずに、言葉遣いが足らず失礼しました。
>>854 852だけど、一応そういう系の人です。Java VM上で動作する
とあるスクリプト言語開発してます。超マイナーな言語ですが
一応どんな言語かというと、Javaに似たセマンティクスに
スクリプト言語っぽいシンタックスシュガーをふりかけました
みたいな言語です
> 言葉遣いが足らず失礼しました
?別に特に
>>854 さんが失礼な言動をしたとは思わなかったけど
857 :
デフォルトの名無しさん :2006/08/30(水) 23:31:46
いや〜、やっぱりここにはいろんな人が来てるね〜 \_____ _______________ ∨ | | まいど、まいど!繁盛、繁盛!! \_ ___________ __ ∨ / /| ∧_∧ | ̄ ̄|/| (・∀・ ) ( | ̄ ̄| | ̄ ̄ ̄|\_(_ )_ (・∀・: )Java は さいきょう じゃ | ̄ ̄| |___| ∧_∧  ̄ ̄ ̄ ////| | ̄ ̄| |___|( )____| ̄ ̄ ̄|/| | ̄ ̄ ( ○ )  ̄ ̄ ̄| | | | | | | | | (_(_) |/
ここで思ったんだが、JVM用のC言語を書くってのはどう?
>>858 JVMしか作成できない言語を作るの?
どんなメリットがあるの?
860 :
デフォルトの名無しさん :2006/08/30(水) 23:53:53
ちょっとだけスレを読んでみたけど、 ガベコレ実装しそうな職人とか、 サーバー用ツールと次世代Javaの関係が気になる人とか、 クライアント用(携帯アプリ)の開発者とか、 コンパイラ作る人とか、 CマンセーなのにJavaが気になる人とか、 JVM上で動作するスクリプト開発者とか、 いっぱい居て楽しそうだね〜♪
>>859 ごめん言葉足らずだったね
JVM上で動くバイナリを吐くC言語だ
>>861 > JVM上で動くバイナリを吐くC言語だ
Cのソースからクラスファイルを作るということ?
>>855 ちょいと質問なんだが、JRubyやJPyton、GroovyやJavaScriptじゃだめだったの?
独自スクリプト言語を新規開発するに至る動機はナンデスカ?
「独自スクリプト言語を新規開発する」どころか、 「独自スクリプト言語を新規開発するためのフレームワーク」が出て来ているのに、 そんな質問するに至る動機はナンデスカ? せめてどんな特徴があるんですか?くらいにしてくれよ
>>862 そんな感じ
それなら単純にJava言語とC言語の比較が出来るだろ
>>861 そんな無意味なものを誰が使うんでしょうか。
性能上の要求が高くて、高級アセンブラを使うリスクを拾わなきゃいかん場合に、
仕方なくCを使うのであって、要求が低くてJavaなり何なり使って手抜きできるな
ら、手抜き言語使うんじゃないの。
> それなら単純にJava言語とC言語の比較が出来るだろ 言語仕様そのものを比較するわけじゃないから、意味なくない?
>>863 私の野生の勘ですが、javascript かjrubyの開発関係の人ですよ、きっと。もしくは学者先生。だからそそうのないように・・
869 :
sage :2006/08/31(木) 01:18:44
>>868 なんで2chで書きこみのリアル人生に気を使う必要があるんだと小一時間(ry
大体、そんなエライ人がこんなところでクダまくかいな。
>>855 JVM系のスクリプト言語は多くが動的型で、パフォーマンスがJavaに比べて劣るから、
静的型でJavaと同等のパフォーマンスを保ちつつ、手軽に書ける言語が欲しかった
というところ
実際、簡単なベンチマークとってみたら、Javaとほとんど同等の速度が出てた
まあ、セマンティクスがJavaに極めて近いから、速度出るのは当たり前なんだが
とはいえ、予定していた言語仕様はそれなりに実装できたものの、ライブラリをまだ
全然作ってないので、Javaのライブラリを使うしかないという情けない状態になってるが
>>870 よくわかりませんが、それって、例えばGroovyみたいな言語
→JVMバイトコードのコンパイラ作ったってことですか?
>>858 ,
>>861-862 ,
>>865-867 現時点での実用性で考えると、いらない、意味無いというのは当たり前だと思う。
現状の、Java VMが各OS上のの単なる1サービスや1アプリケーションと考えると
無意味だけど、これとは逆に各OSはJava VM上の1アプリ・1コンテンツと考えると、
状況は変わってくるんじゃないかな?
よく言うところの、ネットワークをでかいプラットホーム見立てて各OSはJavaの環境
で統一って言うやつ。
ちなみに私は
>>858 じゃないよ。
>>869 855だけど
> 大体、そんなエライ人がこんなところでクダまくかいな。
まあ、そりゃそうだわなw
リアルではただの大学院生です
ただ、エライ人でも興味ある分野のスレ見てる人は結構居るみたいですが
>>871 そういうことです
しかし、自分が言えたセリフじゃないが書き込みのペースが早いなw
>>867 だって、JavaとCの比較ならおかしくないだろ
JITとAOTのどっちが早いってだけの話なのか?
なんか知ってるかもと思ったので質問。 Java6のHotSpotコンパイラでエスケープ解析が入るのが売りの一つらしい けど、スタックにオブジェクトが積めるようになるとそんなに性能上がるの? 世代別GCならヒープへのオブジェクトの確保解放はたいしたコストじ ゃないし、どうせ短寿命なら初回MinorGCでedenからさようなら〜なので、 なんかイメージつかないんだけど、ナニがどう軽くなるんでしょう?
ところで、JVMで動作するC言語の処理系だけど、既にあるよ JVMで動作するっていうか、C言語 -> Java言語のプログラムへの トランスレータだけど。C2Jでぐぐってみるといいと思う
>>875 静的コンパイルとHotSpotでどっちが早いというのがテーマなのかねえ…
「HotSpotコンパイル」の中身がどんな最適かなのかわからないことには、
なんともかんとも。
879 :
デフォルトの名無しさん :2006/08/31(木) 01:49:48
もしスクリプト言語作るなら、 個人的には数式処理・代数処理程度で、 それをevelする程度で十分なんですけど。 複素数や行列の独自表記ができたり、(a+b)^2と書けたり 多項式展開や因数分解できたりとかです。 Java VMで動くバイトコードコンパイラ、スクリプトコンパイ ラ?を作る意義・動機と言うのは、そういう特定用途に特化し た言語を作るのでもありということだと思うんですけど・・
C言語厨である
>>841 はなぜJava似のC++も使いこなせ
なかったんでしょう
>>844 Javaカードは、
住民基本台帳カード、
大日本印刷が作ったカード、
海外の国民健康保険カードに使われているよ
>>876 そりゃヒープに取らないで済めば、その分処理が軽くなるでしょう。
ヒープはGC含めてなんだかんだで競合が多いので、
C10Kな時なんかには効いてくる。object poolもしないで済む。
>>877 そのトランスレータ使える? たった一行のCのプログラムもとんでもない量のJavaになるし、
ポインタ演算している所なんか、酷すぎる。
>>828 >
>>807 > >だから、nが大きくて、CPU毎に最適化したコードによる恩恵が十分得られる場合は、
>
>>805 のような動的実行コード生成をC, C++でもやればいいだけの話。
> >で、こういう手法は机上の空論じゃなく、多くの動画コーデックや
> >OSカーネル(ページクリアに使うmovntiとか)など、多くの場所で用いられているんだよ。
> if(SSE2命令が利用可能か?) {
> // SSE2命令を利用したインラインアセンブラによるコード
> }
> else {
> // SSE2命令を利用しないインラインアセンブラによるコード
> }
> これのどの辺りが動的実行コード生成になるのか説明してくれんか?
> 無知は怖いね。
無知晒し上げ
最近、各種OSは、 securityがらみでdata領域を実行出来なくする方向だけど、 JIT/HotSpotはそれじゃ困るやね。
>>883 .いや、たぶん実用にはならないだろうなあとは試してみて俺も思ったけど
まだそういう処理系は無いという前提で話が進んでいるように見えたので、
一応そういうものはあるということが言いたかっただけ
>>884 なんかcocoaとかで見る名前だね。
あたりまえか。
何でこれがSunにおいてあんだ?
>>886 デフォルトが実行不可になるってだけで、
別途実行可能な領域を確保する方法は用意されている。
たとえばUNIX系ではmmap()にPROT_EXECフラグを付けて領域を確保すればいい。
というか、IA32アーキテクチャではNXビットがサポートされるようになったごく最近まで
PROT_EXECフラグの有無にかかわらず常に実行可能になっていたってだけで、
他のアーキテクチャでプログラムしていた連中にとっては今更って話だろうね。
Java6.0っていつリリースされるの?
>>888 これSunがSolarisにポートした幻のOPENSTEPのやつだな
俺リアルで使ってたけど、、
>>1 の「分離」とかSockets Direct Protocol
はMustangで実現してなくないか?
dolphinで?
896 :
デフォルトの名無しさん :2006/08/31(木) 20:45:38
That house?
次のjavaではインライン・アセンブラが出来るようなる らしい・・・
>>892 Java6.0はリリースされない
リリースされるのはJava6
>>897 ネタだろうけど、あえて反応してみる。こんな感じか?
public class HelloWorld {
public static void main(String[] args){
asm("getstatic java/lang/System.out:Ljava/io/PrintStream;");
asm("ldc \"Hello, World\"");
asm("invokevirtual java/io/PrintStream.println:(Ljava/lang/String;)V");
}
}
しかし、もし仮に本当にJavaにインラインアセンブラが搭載されたとしても、goto
使えるくらいしか利点が無さそう…
バイトコードレベルでは、大した最適化もできんし、JITコンパイラの最適化を阻害する危険もあるしな
>>899 >>897 はネタの匂いがするけど
それだったらJava標準でなくてもすでに誰かが
作ってそうだ。
Java 6ではそれと似たような方式でスクリプト言語をサポートしていたし。
結局、Jakarata OROと同じように文字列のエスケープは避けられないというわけで。
外部ファイルに置いた場合だけエスケープしなくて済むってほうが言語としてまともだね。
コンパイラサポートすんだから普通にやるんじゃないか。
902 :
デフォルトの名無しさん :2006/09/01(金) 00:06:39
この秋といってたけど、11月以降が濃厚だな。
Java6の魅力はGUIまわりの強化くらいかね。 アノテーションが増えたって言うけど、どんなもんが増えた? 新たにGenerics対応したクラスも出る?
906 :
デフォルトの名無しさん :2006/09/01(金) 14:30:24
> JVMはどうやってガベコレを実装してるの? JVMにはJava言語用に作られたGCがあるだけで、C言語には使えないよ。
907 :
デフォルトの名無しさん :2006/09/01(金) 14:41:41
908 :
デフォルトの名無しさん :2006/09/01(金) 15:37:41
いつになったら.NET並の速度になるん?
909 :
デフォルトの名無しさん :2006/09/01(金) 16:00:38
javaと.netは目指しているものが違うから同じように比べてもねぇ
910 :
デフォルトの名無しさん :2006/09/01(金) 18:50:50
>>908 CLR の仮想関数呼び出しは遅すぎで使い物にならないわけだが。
Pure Java と Pure C# なライブラリを比較すると
明らかに JVM >>>>>>>>>>>> CLR であることがわかる。
>>908 ドトネト並みっていってるが、
ドトネトだってJavaより遅いのは遅いぞ。
どっちもVM上で動いているんだから。
どっちも遅いんだし。
比べるならC/C++とのほうが重みがある。
ドトネトだとVMの性質がJavaと異なるし
得意分野、得意分野が微妙にことなる。
Java6 mustang = null; Java5 tiger = new Java5(); tiger.swing++; tiger+=derby; tiger+=webServer; Java6 mustang = (Java6) tiger; こんな感じかな?
913 :
912 :2006/09/01(金) 19:40:07
最初の一行いらないね。失礼。
>>912 Java5型はオブジェクトの型なのか文字列型なのか数値なのか
どっちみちString型の猿まねはできないし++や+=を使えるのは
Stringオブジェクトか数値型だけなのでエラーになるわな。
>>915 オペレータオーバロードキタ━━━━━━(゚∀゚)━━━━━━�!!!!
918 :
デフォルトの名無しさん :2006/09/01(金) 21:51:25
>>911 わからないでもないが、同じバーチャル・マシンという環境で比べた方が公平だと思うぞ
Cはネイティブ・マシンだろ
またガベコレがどうしたこうしたとかなのか?
ネイティブ・マシン……
そういや、Stringには++使えないんだった。 つーかJavaに演算子オーバーロードなんて期待すべきでないし 勧めるべきじゃない。 C++の二の舞になったC#と同じ道を歩む。 あれは大失敗だった。
>>918 同じVMといってもな、VMは各種ベンダによって速度が異なるし。
IBMが作ったのとSunが作ったのとではJVMの速度やライブラリによる速度も変わってくる。
その辺りも厳密に考えないと逝けない。
そう考えると、面倒だし議論するだけ無駄だと思うんだが。
そういう比較は、こだわると、FFとドラクエとを比較するくらい実にくだらない議論になると思うよ。
922 :
デフォルトの名無しさん :2006/09/01(金) 22:20:11
>>905 1.2〜1.4のようにデスクトップアプリが大幅にパワーアップするようなのはあんまりなさそうだ
5.0以降デスクトップに力入れてますといってるけど、小粒なのが多くて
むしろ力入れてないのではと思いたくなる
public class Java6 extends Java5{ Swing swing = getSwing().add(new AntiAlias()); DB db = new Derby(); public Java6() throws NotReleasedException{ try{ openSource(); }catch(Exception e){ log.error("やっぱり無理だった"); } throw new NotReleasedException("もうちょっとまって"); } }
しかし.NETのCLRが「速い」というのは初めて聞く意見なんだが、 なんか速くなったのか? ずっと「遅い遅い」と言われ続けてたと 思うんだが。
>>920 演算子のオーバーロードは便利だよ。演算子オーバーロードじゃなくても、
クラスごとに演算子の動作を定義できるのは便利。
C++のはいけてないけど、pythonのように、演算子ごとに対応するメソッドを
用意する方法ならわかりやすいし、実装も簡単(コンパイラに手を入れるだけで済む)。
Javaユーザは、Javaにない機能はすぐに「あんなものイラネ」とかいいだすから嫌い。
>>926 > Javaユーザは、Javaにない機能はすぐに「あんなものイラネ」とかいいだすから嫌い。
激同
で、いらないっていいながらJavaに実装されるといきなりマンセーし始めるからもっと嫌い。
Javaは好きだがJavaをまともに使えるのはほんの一握り。大抵は基礎の無い阿呆ばっかだ。厨の割合が高過ぎる。
少なくともBigなんちゃらや日付時間関係は演算子使いたいよな 文字列だけ砂糖付きはずるいぞ
929 :
デフォルトの名無しさん :2006/09/02(土) 11:06:01
> 厨の割合が高過ぎる。 そういう業界だろw
>>928 BigDecimalが対応されたらクライアント用でも業務系での地位は確定するな
>>926 >>927 そんなもの別にJavaユーザに限った話じゃないでしょ。なんですぐにそういう話になるかなあ
C++ユーザだってよく、Javaに対して、GCなんてイラネとか言っているのは耳にする
ある程度普及した言語には、厨や信者が一定割合でつくというだけの話だと思う
>>926 演算子っつーと、[] も演算子だよな。
数値計算しないから + や - のオーバーライドはできなくても個人的には困らんけど
MapやListで list.get(0) や map.get("key”) が list[0] や map["key"] と書けるようになるとうれしいなあ。
listのほうは難しい気がするがmapのほうは現行の構文とかさならないからできそうな気がするんだけどね とおもったけどキーがIntegerとかでintわたしてオートボクシングとかされると配列とみわけがつかんか
934 :
デフォルトの名無しさん :2006/09/02(土) 13:41:26
>>926-927 大丈夫か?MSや.Netマンセーなのか?
例えば、そんなのオレは面倒とかを除けば、
やってる事は同じなんだけど、そういうの気がつかないのかな。
プロパティとかインデグザとか。
delegate, eventはいいね。なんともMSらしい。
935 :
デフォルトの名無しさん :2006/09/02(土) 13:45:56
コンパイラをいじれば、 いつでもできるんじゃないの。 ただ実質同じことだし、 そういう要求をかなえてまで、 面倒くさいぞー系の蛆が溢れると、 Javaの品質が下がるからまだ今もやらないってこと。
>>926 Genericsは、「あんなものイラネ」と言われたことないよ。
>>933 なんでlistだと難しいのかくわしく。
JavaもtoStringは演算子オーバーロードできるしな 例えばインタフェースベースの演算子オーバーロードなら interface Calculateableみたいなのを用意して Numberと同じメソッド定義しておけば、目的を見失うことも無いだろう。
個人的には言語仕様の拡張はしなくてもいいから VMの性能とデスクトップ周りの強化をしてほしいな・・・
>>941 区別はつくよ。むしろなんで区別がつかないと思うのか聞きたいところだ
945 :
デフォルトの名無しさん :2006/09/02(土) 20:26:27
128bit Java
>>926 おまえは何も解ってない。
ストラウストラップが警告した事項を
>>944 もちろんコード全体を見りゃ区別はつくさ
objs[i]と書いてあるときにobjsは配列かListか
すぐには判断できない場面があるわけだ
両者が共通の性質やAPIを持つなら区別できなくても問題ないけどな
実際には配列は固定長だし、APIもlengthでサイズを知るなど異なるわけ
配列を廃止するならともかく両立させるのは混乱の元
>>932 []は単項演算子みたいなもんだからいいんだよ
+や-となると2項演算子なので
演算子の優先順位を意識するのが大変になるんだよ。
それに他人が作った奴の演算子が混ざったらどうなると
思ってるのか。
>>932 > MapやListで list.get(0) や map.get("key”) が list[0] や map["key"] と書けるようになるとうれしいなあ。
その程度のことのためだけにそんな演算子を付加するのか。
C#のget/setと変わらないくだらん機能だな
>>940 のやり方なら間違った演算子定義は出来ないからいい。
問題があるとすれば右辺値の一番左の値がプリミティブじゃなかったときくらい。
>>942 俺的には、Java3Dの強化をなんとかして欲しいな。
>>947 に激しく同意できる。
C++の二の舞になったら終わりだ
統合アーカイバプロジェクト並みの圧縮ファイル対応とか デスクトップ周りでやらなきゃいけないことは、まだまだ沢山あると思う デスクトップ周り専門のApacheみたいなグループが登場しないと無理だが
BigDecimalで演算子を使えるようにしてくれって要望は、 BigDecimalクラスをラッパークラスとするプリミティブなbigdecimal型を 用意するっていうC#のdecimal型でどうにかするって手もあるが、 あれは、128bits限定だからな。 BigDecimalのコンストラクタにMathContext.DECIMAL128を設定した 精度しか得られないしな。
>>954 圧縮ファイルで一体何をしたいんだ?
つか、Jakarta Commonsにそれっぽいのないか?
もしくはSourceForgeにありそうだが
何がしたいって聞くようなことか?
Commons Compressだったかがβすら出ずに存在したような気がする
>C#のget/setと変わらないくだらん機能だな Java7の拡張の候補にプロパティが入っているのだけどな。
入ってたとしても、C#と全く同じってことはなかろうと予測
>>959 がデマだったりすることはよくある。
あの文体は、いつものJavaスレを荒らしてるドトネト厨だから。
3年も4年も前からJavaスレや死滅スレで大暴れしてる変態。
963 :
デフォルトの名無しさん :2006/09/03(日) 00:35:56
やっぱりドトネト棒ってハズレだったんだね。 コーヒーの方が大人だね。
>>965 その、アノテーションっぽい気がした。
@Propertyならいいねえ。
get/setはねえちょっと。
getter.setterに相当するメソッドに
@Propertyアノテーションをつけるのが妥当って感じだね。
>>967 それも棒の先には「おまえらは、ハズレ」って書いてあるんだろうだしwww
>>946 「ストラウストラップが警告した事項」って具体的に何?
>>947 おいおい、Javaは静的な型があるんだから、別にコード全体を見るまでもなく、変数の宣言部分をみれば配列かListかはすぐに判断できるし、別に混乱なんかしないだろ。
この程度で混乱なんかしないでくれよ。
>>949 []は単項演算子じゃなくて、+や-と同じ2項演算子だよ。
それに演算子の動作を自分で定義できることと、演算子の優先順位は関係ないよ。
PythonもRubyも演算子の動作を自分で変えられるけど、優先順位は変えられない。だから別に混乱しない。
>>950 でもELでは[]でアクセスできるようになってるよね。「その程度」のことであれば、
ELでも[]でなくてgetter/setter使えばいいはずだし、もっといえばEL自体必要ない。
Javaユーザは「[]なんてイラネ」といっておきながら、ELの[]は便利とかぬかすから嫌い。
>>970 言っている事自体はだいたいまともだが
> Javaユーザは「[]なんてイラネ」といっておきながら、ELの[]は便利とかぬかすから嫌い。
とJavaユーザを一緒くたにして煽るのはやめてくれ。ELの[]が便利と言っている層とJavaには[]は
イラネと言っている層がどれくらい重なっているのか調べたわけでもないだろう?
そもそもJSP上でaddなんてしないんだから[]で何の問題も無いだろ 粘着にレスすんなよ
>>970 いっとくが、JavaとELとは全く別の言語だ。
Javaユーザが[]はイラネといってるのはJavaの文法にいらねといってるだけで
ELの文法に[]がいらねといっとるわけではなかろう。
そんなこともわからないでJavaエンタープライズアーキテクトを侮辱するとは
身の程知らずもいいところだ。
JavaとELとが別言語なんてのはだれだってわかってる。 だからなんでわざわざELなんて用意されたかを考えろや。 Javaそのままだと書きにくいからELが用意されたんじゃないの。 Javaの書きにくさのひとつとして list.get(1) や map.get("key") があり、 これが list[1] や map["key"] とかけたらいいなといってるだけ。 ほんとうにlist.get(1)やmap.get("key")が書きやすい/読みやすいなら ELでもそれをつかえばいいだけ(ELにはメソッド呼び出しないけど)。 「JavaとELとが別言語」なんて話がずれるだけじゃん。
>>971 > とJavaユーザを一緒くたにして煽るのはやめてくれ。
一緒くたにしている馬鹿には馬の耳に念仏では?
>>970 ストラウとラップは演算子のオーバーロードを
誤った使い方をするとろくなことがないぞってことを言ってるんだよ。
誤った使い方をしなければいいといっても
誤った使い方をする奴は腐るほどいるし。
それで複数の会社組織が独自に演算子を定義して
デスマって酷いことになるわけだ。
>>974 じゃあさ、お前にはなんでJakarta Velocityみたいなのが
用意されたのかわかるの?
プリプロセッサではなくVelocityが用意された理由を。
[]のオーバーロードは欲しいな。
ListだったらどうせIterator経由でアクセスしない? List.getなんて滅多に使わなくないか?
んだな
しかもIteratorにはfor(:)の砂糖が既に入ってるしな
うむ、そうだ
次世代は無糖でw
985 :
デフォルトの名無しさん :2006/09/03(日) 20:23:27
new ArrayList=("あああ","いいい","ううう"); みたいに出来んかな。 public ArrayList(String... varArgs); こんな感じのコンストラクタで。
986 :
デフォルトの名無しさん :2006/09/03(日) 21:05:54
>>985 それもだけど、
ArrayList#addAll(Collection<? extends E> c);も、
c.toArray();で配列に直してから使ってる。
ArrayList#addAll(E[] c);がないのはもったいない。
>985 Arrays.asListでいいんでないの?
あーたしかにコレクションをパっとつくりたいと思ったことはあるな。 とくにテストコードで。 今だと List strList = Arrays.asList( new String[]{"test1", "test2"}); とかやっててくどいとは思う。 一方で、Javaの、文法はシンプルに、機能はクラスライブラリで、という スタンスは嫌いじゃない。文法拡張するときは「そんな砂糖いらね」という 抵抗があったほうがちょうどいいと思うぞ。やたら拡張するよりはね。
>>987 確かに5.0のArrays.asListは
public static <T> List<T> asList(T... a)
だからまあ悪くないんだが、返ってくるのが変更不能リストなのがイマイチ
変更可能リストを返すメソッドが欲しいな。コードはこんな感じで
public class ListUtil {
public static <T> List<T> list(T... a){
List<T> newList = new ArrayList<T>();
for(T t : a) newList.add(t);
return newList;
}
}
使うときはstatic import使えば、
list("A", "B", "C", "D")
のようにするだけで変更可能なリストが作れるので便利
>>991 意味不明。PHPで、array(...)などとして配列が作れることを言っているつもり?
そんなもん別にPHP(やPerl)独特のものでもなんでも無い。
なんで厨はすぐに自分の知っている(好きな)言語の機能のパクリかのように言いたがるかなあ
なになに、どっちにしろ型の概念が曖昧な スクリプト言語に共通する書き方だよな
>>980 for( : )使うことが多いけど速度の差も結構あるし
何番目かを意識したりループの中で挿入とか削除とかもある
for( : ) 使うのが80%くらいかな
O'Camlなみに型推論しる!
あのー・・・
>>989 Arrays.asListってlistの様に振る舞うけど、
結局は配列のままのwrapper返すんじゃないの?
>>997 確かそう。
これをArrayListに追加するときは、
>>986 のようにまた配列にもどして使うのでもったいない。
>>989 new LinkedList(asList(a, b, c, d))
でいいやん。
asXxxはビュー(実態は変わらず見方を変えたもの)を返す、ってことだな。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。