[Java SE 7] 次世代Javaの動向 5 [dolphin]
1 :
デフォルトの名無しさん :
2007/05/12(土) 08:25:15
まだ5も消化しきれてないのに7なんて・・・・
Java FXはFlashみたいな、 瞬間起動→アプリごとの独自スプラッシュだしてnow loading→実行 ができないときついと思う。実際に動くまでが同じぐらいでも、 スプラッシュなしだと体感が長い。
乙
5 :
デフォルトの名無しさん :2007/05/12(土) 15:26:03
アプレットって何でいつまで経ってもブラウザ止めちゃうんだろう。 Flashみたいに瞬間起動できるようにならんもんかね。
>>5 > アプレットって何でいつまで経ってもブラウザ止めちゃうんだろう。
> Flashみたいに瞬間起動できるようにならんもんかね。
企業サイトでFlash使ったページがあると、必ずskipを押す。
どうせろくな情報がないんだし。
勝手に起動するまえに、起動させるかどうかを必ず聞いて欲しい。
そういう構造だったら、多少遅くても許せる。
7 :
デフォルトの名無しさん :2007/05/12(土) 17:08:43
>>6 そんな個人の好みの話じゃなくてさ。
> 多少遅くても許せる。
↑こう思ってない人の方が圧倒的に多いんだから。
ふーん どんな割合なの?
>>7 だからこそFlashにもJavaアプレットも、
瞬間起動できて
(かつ|または)
起動前に起動させるかどうか聞く
というようになってほしい気もする。
>>5 >>6 >>7 のいずれとも別人の横レスすまそ。
11 :
デフォルトの名無しさん :2007/05/12(土) 17:14:28
>>8 FlashとAppletの普及率通りなんじゃね?
具体的には?
>>8 daemon だよもん
stdio.h スタジオエッチ
>>1 スレタイの右側、Dolphinは止めて、JavaFXにすればよかったのに・・・
>>16 Java SE と Java PG の割合。
>>17 JavaFXはコケる可能性高いと思ったんじゃね?
とりあえず、dolphinで良いと思うけど。
>>19 いやいずれにせよdolphinは止めた方がいいだろ?dev.javaのプロジェクト名もjdk7に変えられて
sunがdolphinというコードネームを捨てようとしているのに
書いてたら混乱するだけでしょ
>>20 誰も混乱しないと思うけど。
仮にJavaFX のコードネームが dolphin になってて紛らわしいとか、
仮にMicrosoft が dolphin ってコードネームの製品作り始めてて混乱するとか、
そーゆーのがあれば変えた方が良いかも知れんけど。
次世代Javaの動向の前に今発生してるバグを解決しろ
コード名dolphinが使われなくなっていっても そのへんは旧称dolphinで通じるだろうし、 とりたてて混乱はないんじゃないの。 関係ないがTEIKADEを思いだした。
>>23 うむ
言葉が足りんかった
正しくは↓
おまいら次世代Javaの動向の前に今発生してるバグを解決しろ
>>26 だ〜か〜ら〜。「事件は現場で起こってるんじゃない!会議室でアッーー
会議室でのグダグダがデスマを招いている事実
FX Scriptの format as 文はほしいと思ったJavaPG特有だろうなw 現状、インタプリタのコンパイルがとてつもなく遅いから早く、javaバイトコード吐いて欲しいけど
>>25 具体的にどれが問題か挙げないと話にならないだろ。
バグ報告見てこいって言うのかい?
>>30 「おまいら次世代Javaの動向の前におまいらが書いた糞プログラムにあるバグを解決しろ」
だろ?
Silverlightより先に発表したかった
お願いですから、Windows LaFをまじめに作って下さい。>SUN WindowsだけでClassic、XP、Vistaと3つもあって、面倒なのはわかるけど。 いくらサードパーティのLaFがあるとかいっても、ファーストパーティ標準添付のLaFが ショボかったら初見でアウトなのよ。
>>33 どこが違うってのをスクリーンショット取って送ってあげるとか、
どこを直せば良いってのをパッチ書いて送ってあげるとかした方が建設的じゃね?
ってか、ここで愚痴っても改善されないと思うよ。
それいったら2chなりたたんがま
直接相手に苦情を言えないヘタレの巣窟=2ch
>>39 愚痴ならマ板行ってやれ。あっちはそーゆー板だし。
>>41 そいつは前にもいた嫌われ者だからほっとけ。
Javaも終わりだな 次は何だ?
マシン丸ごとJava仮想化ブームでむしろ鉄板化してるんだが・・・
次はRuby RubyやるとJavaが古臭く感じる
まぁそりゃ 今まで使ってたJavaとは違うからなぁ
47 :
デフォルトの名無しさん :2007/05/15(火) 22:38:15
クロージャー登場で少しは変わるんじゃない?
48 :
デフォルトの名無しさん :2007/05/15(火) 23:08:45
クロージャーでどんな風に変わるの?
クロージャーって何?
>>44 OS抜きで直接JavaVMを動かす方が速くて当たり前なんだけど、JRockitって流行?
まぁ、携帯&固い系のサーバーサイド&Blu-rayと既に確固たる地位を築いたのでどうでも良いけど。
携帯もBlu-rayもMEだろ。鯖側ってEEの事か? そういや前にプロパティで騒いだがアノテーションじゃだめ? int prop; @set(prop) public void setProp(int x){ prop=x; } @get(prop) public int getProp(){ return prop; } これで問題無くない?
>>55 なにがよくわからんのかがよくわからん。
get、setの書き方、ローカルキーワードとか、C#のプロパティと同じですね。
それに、boundと#演算子でのリフレクション情報取得か。
>>55 boundプロパティなら setter が呼ばれた時に、
プロパティ変更される前に java.beans.PropertyChangeListener にイベントを送る。
bean には対になる vetoableプロパティってのがあって、
こっちはプロパティが変更された後に
java.beans.VetoableChangeListener にイベントを送る。
>>57 おいおい、逆だよ。逆。
vetoable はプロパティが変更される前に
登録された java.beans.VetoableChangeListener を呼ぶ。
VetoableChangeListener がプロパティの変更を
拒否したい場合は PropertyVetoException を投げる。
boundプロパティはプロパティを変更した後に
java.beans.PropertyChangeListener を呼ぶ。
で、
>>55 のプロパティ案には、前者に対応する機能はない。
何々? やっとゲッターセッターから解放されるって まだ開放されてなかったんかYO────!!!
# 演算子か・・・・ ↑って、書いたらなんかコメントアウトされてる気分ヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノ
オートボクシングがあるじゃん
例えば java.beans.XMLEncoderで既存(int&gettrer)のbeanを出力した java.beans.XMLDecoderで新しい(Integer&Property)beanに復元するときとか 型変わっちゃうしさ。
setXxxやらgetXxxを自動で作るわけじゃないみたいだね。 とすると、property対応フレームワーク以外で使うときには依然としてsetXxx/getXxx作る必要がありそう。
自動で作られるメソッドの名前は "プロパティ名$set" "プロパティ名$get" らしいね。.
なんて中途半端なんだ・・・
synth lafって全然流行んないね。JDKにsunのデモすら無い。 1.4時代のwinXP/GTK+ system lafがsynthなんだからあれ公開すれば良いのに・・・。
71 :
デフォルトの名無しさん :2007/05/20(日) 16:35:22
MOPが仕様に入らないかなwkwk
>>70 synth以外のLaFが流行ってるかのような書き方だな。
勉強のために作ってみました、程度の物を除外すると、まともなLaFなんて、
10程度だと思うけど。とても流行ってるとはいえない。
deviantartとかにカテゴリができるぐらいになればいいんだけど。無理か。
synthのxml吐くGUIツールはdev.java.netに3つくらいホストされてるけど、 やっぱカスタムlafはsynth以外が多い。てかXULフレームワークがあったよ。 海外製のSwingアプリケーションはlaf自前ってのが多い。(javaとシステムと独自の選択式だが)
75 :
デフォルトの名無しさん :2007/05/27(日) 12:51:27
MVMってどうなってんだ? 研究中?
76 :
デフォルトの名無しさん :2007/05/28(月) 20:56:05
また1.4かよ・・・・・orz
82 :
デフォルトの名無しさん :2007/06/26(火) 02:18:28
>>82 RSSで何をみる?新しく登録されたもの?
joinしたらvoteもできるぞ。
84 :
82 :2007/06/29(金) 02:47:38
>>83 RSS で、新しく登録されたバグ、登録されたバグについての変更
が見れたらいいなぁと思います。
86 :
デフォルトの名無しさん :2007/07/12(木) 01:38:18
最近ネタないね
そーいや、invokedynamic ってもう実装されたの?
88 :
デフォルトの名無しさん :2007/07/12(木) 15:43:33
マルチタスク対応って7で実装されるのか?
たしか使用策定は済んでるんじゃなかったけ? Java Cardならすでに実装されててMIDP3.0が対応中(MIDP3.0自体策定中)。 jdk7はJAMに期待。Libletみたいな使い方をするんだろうね。
ODFとか対応しないのかな?
7っていつ頃リリースを予定しているの?
>>92 JDKのメジャーバージョンのリリースが 18〜24ヶ月毎って話からすれば
JDK6のリリースが2006年 12月第一週だから、
JDK7のリリースは2008年 6月〜12月ぐらいになる。
個人的には、JDK7は機能てんこもりだから遅れ気味になるんじゃないかと予想。
確かに。 JAMだってまだ乗ってないし。
>>91 何かさ・・・・コンパネが・・・・びろーんって・・・縦に・・・伸びてない・・・(;・∀・)?
96 :
デフォルトの名無しさん :2007/07/24(火) 21:40:33
来年秋って話だったから、再来年の春くらいになるんじゃね〜の?
来年以降か。機能がたくさん追加されるから楽しみだな。
俺はどれだけ構文が汚されるのか気になって仕方が無い。 これだけ、getter,setterの糞規約が定着したところでpropertyが普及するのかどうか…。
Javaのクロージャは期待できるけどなぁ… delegateを無理に拡張している冗長構文のクロージャより大分改善されている。
>>100 Collectionライブラリもクロージャ対応されてくるかなぁ?
Streamとか、JDBCもクロージャ対応になったら、今のソースとガラッと変りそう。
java.util.Collections にクロージャ対応な staticメソッドが追加される予感……
これから6勉強しようかって思ってるのに・・・
別に覚えた内容が損になるわけじゃないぜ
>>101 with(InputStream s: new FileInputStream("c:/test.txt")){
System.out.println(s.read());
}
みたいなことが書けたり
List<Integer> list = Arrays.asList(1, 2, 3, 4);
int sum = Collections.reduce(
list, {Integer x, Integer y => x + y});
とすると10が得られたり
Lock lock = ....;
withLock(lock){
//いろいろロックされる処理
}
と書けたりする予定らしい。
こういうのって結局Cのプリプロセス処理と同じなんだよね。
>>107 Cのプリプロセッサみたいにコンテキスト考えずに
ただ置換するだけのものとは全然違うよ
違いを見せたいのは分かるが、たいした差はない。
ようするにシンタックスシュガーっていいたいんだろ。 それをCのプリプロセス処理と同じというのは問題あるがな。
単なる置き換え。マクロと同じってことがいいたいんだろう。 そういわれると辛いところだが…
プリプロセッサは別の言語仕様として存在してるのが問題なんだろ。 D言語とかはC++のカオスさをうまく言語仕様に馴染ませてて感心した。
まあ、でもそれはCore2Duoって8086と同じだよね、っていう感じで、だから何?ってなるんだよね。 仕組み的に同じ系統だからって、便利さは全く違ったりするわけだ。
自分で実装するわけにもいかないからね。 便利なのは使わせてもらおっと
Genericsの話?
どこからその話が・・・
クロージャーがC#にしかないと思ってんのか。
scriptは何が追加されるんだろう。
script乱立しすぎでわけわかんね
jdk6ではjavascriptが使えるけど、javaファイルも同じようにスクリプトとして使えるのかな。
標準添付はされていない
標準ではないのか。次バージョンに期待するよ。
>>124 いまのところ、標準添付される雰囲気はないね。
標準添付できるような質のJavaスクリプトエンジンってあるのかな?
標準添付のスクリプトエンジンの方が 野良スクリプトエンジンより品質悪かったりするけど……
スクリプトだし、質とか速さとかどうでもいいよ。 とりあえず、Javaが動くスクリプトエンジンを実装してくれ。
言語としてのJavaならスクリプトエンジン作るよりも コンパイラAPIの拡充の方が良い。 メソッド宣言時のシグネチャだけみたいな細かい単位で 構文解析&名前解決してくれればそれで良い。 ツール作る時とか、そっちの方が都合良いし。
そんなこといってちゃ、いつまでたってもjavax.scriptでJavaはサポートされないよ。 自分の都合だけで考えるのもいいけどね。
俺は両方欲しいぜ、ベイベ わがままな、俺の願いを聴いてくれよ イエー
何につかうんだよそんなもの
>>130 標準添付されないというだけで、javax.scriptでJavaはサポートされてるわけだが。
>>132 具体的にはって標準添付されてんのRhinoしかないじゃないか。
標準で入ってないと意味ないし、無駄な努力なのだが。
SPI使えるんだから、クラスパスに含めるだけで新しいスクリプト言語使えるようにできるんだが……
138 :
デフォルトの名無しさん :2007/08/01(水) 22:42:38
おれは、C言語をスクリプトで実装して欲しいぜ! それもC99を!
まあ実際無知なんだろうな。
>>135 いや、オレもRhinoしか添付されてないと思ってたのだが、それだと野良スクリプトエンジンの方が品質がいいってのがひっかかる。
Rhinoよりいいスクリプトエンジンって何だ?
145 :
デフォルトの名無しさん :2007/08/03(金) 00:08:05
たしかSunがFortressっての開発中だったと思う。 並列計算に特化したJavaとFortranを参考にしたスクリプトっての。
>>144 pnutsそんなにいい?
まだこなれてない感じバリバリなんだけど。
yieldの挙動とか。
あんま関係ない話で恐縮なんだけど、javax.script バブルの火付け役が php だって噂は本当なん?
msのcliに対抗するため
150 :
デフォルトの名無しさん :2007/08/03(金) 06:16:58
C言語やC#にある値型の struct はいつサポートされるの?
>>148 script言語の共通基盤になるチャンスを見逃すわけがない。
javascript, php, python, ruby実装環境をごっそり頂きかも知れない。
コンパイラ基盤もちらほら出てきているし。
>>150 なぜそんなものが必要なのか?理由を明確に
リンゲージがその関数内であるオブジェクトに対して、イチイチnewしないで済むことが言語として保障されることになる。
>>153 コンパイル時に最適化情報がバイトコードに埋め込めればいいんだよね〜
そしたら、ガンガンエスケープ解析できる
>>151 いや、知り合いから
「php を java vm 上で動かそうって話が最初で、そのあと他の軽量言語が追従した」
って話を聞いたんだけど、本当なのかなって。
>>154 そういう小手先解析よりも、普通に言語としてサポートしろってこと。
struct Point {
double a,b
};
どう考えても需要あるだろ。
>>155 それだけ需要があるなら、PHPがまずサポートされるはずじゃないか?
VMで他の言語が動けばいいのであって、どうでもいいけど。
>>156 その程度なら不要。
値型の利点は、newが必要とかより、
代入が必ずコピーになることによって、
同一オブジェクトに対応する変数が一つであることを保障できることだと思うんだが。
>>158 需要の論点ではPointで示したが、利点としては例えが悪かった。
では必ずコピーになる利点のために導入するのではどうだ?ほしいだろ?
いや別に
値型が導入されたら、今度はポインタ演算を欲しがるに違いない
C#はstructの導入に失敗したからNullableが出来たんでしょ 恥ずかしい実装まで追従する必要ないから、別に要らないなぁ どうしてもってのならByteBufferをラップすりゃいいし
値型ってメモリ効率に関する利点のために導入するもんだろ。
それが理由ならエスケープ解析が導入されたから今後は不要でしょ
>>164 複雑じゃなくていいから、普通にCと同じのでいいよ。
メソッドもCの関数ポインタみたいに、staticのみでいい。
エスケーポ解析よりも言語に導入のほうが楽だと思うけど、そうでもないのか
まあ、そのうちちゃっかり導入されるんだろうけど。
いまさら導入されても、C の register 変数と同じ運命をたどる予感。
register にも、一応アドレスを取れないという効果はあるんだぞ!
>>157 PHPみたいなどうでもいい言語をまずサポートする必要性がみあたらない。
structのメモリー効率のよさってのは、オブジェクト廃棄時のコスト云々じゃなくて、 newに頼ってオブジェクト生成するときのコストがまったくないってことだろ。 関数呼び出しでスタックに自動生成されるのであって、newによるオーバーヘッドは かからないいってこと。
オブジェクトがほかのメソッドに伝播される可能性を考えると、エスケープ解析で自動的にやってくれるのが一番効率がよさそうだな。
structは、コピーによって、ここのオブジェクトの同一性の確保も そのとおり利点ではあるが、エスケープ解析の小手先技なんぞに頼らないで 優先的に言語でサポートするのが妥当だろ。 assert, enumとかよりも先にさ。 Javaの文法は、結局Cの文法を真似てるだけってことを忘れて、 「エスケープ解析もできる俺ってすごいだろ」っていい気になってるだろ?
エスケープ解析ってのはそれをやるんだよ。 C#のstructと同じような最適化がされることになり、 逆にC#2.0で対応するはめになったNullableのようなstructの欠点も無い
>>171 まあ、メリットはあっても、それが"大きく"効いてくるのはかなり特殊なケースで、
そういうのが大量にある応用の時は、ハイバネでいい、ってのが今の流れなんじゃないの?
JavaのenumはCのenumとは違うぞ。 定数そのものに振る舞いを持たせることが出来るし、 なおかつタイプセーフだ。
メモリーの効率とかじゃなくて、 structを使いたいプログラマーの切実な要望には答えられないのかね? そういうエスケーポ解析の新技術はどうでもいいからさ。
>>173 で、エスケープ解析に比べたstructの利点ってなんなの?
structの欠点の無いむしろメリットとなるようなカラクリがあれば導入されるかもな。
ちなみに、structなど値型を使いたい場面は、 forや関数呼び出しで100万回以上まわす。 そういう小型オブジェクトの短期生成は、newでは向いてないし、役不足だろ。 またエプケール解析とかいうのか? GCの新技術はJava以外のVM使うスクリプトにもメリットあるだろうが、 そういうのは使うほうからみてどうでもいいから、まずはJava言語で導入しろ。
>>177 メモリーの効率とかじゃないなら、structを使いたいっていう切実な要望っていうのは、新技術以上にどうでもいいんじゃないかと思う。
>>180 使う方から見てどうでもいいのがstructだと結論づいてるのに何を・・・
>>176 使うほうからすれば、C,Javaどちらのenumも同じ。
いつ使えるようになったかといえば、Javaはサポート遅すぎ。
>>180 エスケープ解析で十分です。どうもありがとうございました。
>>183 全然違うっての。お前のいう「使う人」って誰だよ。お前限定じゃねーか。
お前はCだけ使ってろ。
>>181 きみ、structとclassは実質同じってことを知ってるのか?
>>186 C++のデフォルトアクセスレベルの話で言ってる?
同じものなら要らないだろ
structを否定するってことは、classつまり、構造体型(集合型)を否定しているようなものだけど・・ 君の理解じゃ、ポインタがどうとかってあたりで止まってるんだろうな。
>>186 だから、なに?メモリ効率以外に、structの利点ってあるの?
>>188 なんで?
きみ、エスケープ解析の意味ちゃんとぐぐってる?
なんか、エスケープ解析をわかってないやつがいるみたいなんで書いておくけど for(int i = 0; i < 10; i++){ Point p = new Point(); p.x = i * 2: p.y = i * 4; System.out.println(p.x + ":" + p.y); } が for(int i = 0; i < 10; i++){ int px = i * 2: int py = i * 4; System.out.println(px + ":" + py); } に最適化される技術な。
まとめると、「エスケープ解析の意味がわかんないやつが暴れてましたとさ」でいいの?
>>180 エプケール解析て…これは釣りだろ。
それから値型もnewされることに変りはないぞ。
Java版のaptみたいなのがそろそろ出てきてもいい頃合だね。 各種IDEやmavenの資産、そしてJAMの登場によって下地は十分のはず。 JDKに同梱されれば、環境構築のコストが激減しそう。
またエスケープ解析が得意の彼か 彼の言い分も一理あるが、単純に彼は自分の技術を自慢したいだけだから、ほっとけ
>>193 そもそも struct とか言う奴は大抵釣り。
JOGLやjinputとかをJDKから簡単に取り寄せられたら便利だね
下手にやると複数バージョンのjarが入り混じってカオスになるけどね
>>196 そういう話は、的確な議論してから言ったほうがいいと思う。
struct : スタックに値を割り付ける エスケープ解析 : スタックにオブジェクトを割り付ける最適化手法 オブジェクトが対象のエスケープ解析の勝ちでおk structは時代遅れの産物
>>196 自分の視点でしか判断できないのが彼のような技術者ってもんだし、
他人の要望とかまったく無視で自分の技術一点張りだな、こいつは。
つまりは、一人でコソコソとエスケーポ解析してろってこったな。
あー、ねくら、ねくら
>>201 おまえはばかか?勝手にしこってろ。嫌ならCをべんこうしなおせな。
>>202 C C++ アセンブラのときでも、小手先技使って最適化大好きって輩がいるけど、こういう根っからの技術者って人の話聞かないしね。こういうねくらは、あんまり表にしゃしゃり出てこないで中にこもって解析していて欲しいよ。
205 :
デフォルトの名無しさん :2007/08/04(土) 14:31:59
有能な学生をいじめたらだめれす!
>>201 おまえのその論理だと、Java標準のlong doubleなどプリミティブ型は時代遅れなのか?
そして解析手法を駆使する方が今風なのか?
おまえ、そんなことしてるよりコンパイラ作ってみろ。そうすれば分かる。
>>206 暇ならコンパイラとVMに struct実装して OpenJDKあたりにパッチ送ってみれば?
どれぐらいメモリ効率が良くなるかみたいなデータも示せば採用されるかもよ?
>>206 に コンパイラやVMを書き換えるだけのスキルがあるとは思えないが
ひさびさに高品質の夏厨があらわれたな。
>>173 >「エスケープ解析もできる俺ってすごいだろ」
惚れました
211 :
デフォルトの名無しさん :2007/08/05(日) 00:44:29
>>191 みたいな馬鹿に突っ込める奴は、
ここにはいないのかwww
エスケープ解析とは、ソースコードを解析してバイトコードの最適化を行う話じゃない。
Javaのコンパイラはソースコードとバイトコードの対応付けが規定されているので、
そもそもバイトコードの最適化はありえない。
メソッド内で生成されたインスタンスが、
メソッドの外へ「逃げるか逃げないか」を判断する技術だ。
returnや引数やフィールドに参照が渡されるコードがあれば、
「メソッドの外に逃げる」と判断されて、
インスタンスはヒープに確保される。
逆に「メソッドの外に逃げない」と判断されたら
インスタンスはスタックに確保される。
わかったかいwww?
>>191
212 :
デフォルトの名無しさん :2007/08/05(日) 00:44:39
くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
>>211 引数に渡すだけでもエスケープと判断されるのか。
オブジェクトの生存期間がスタックのそれに制限されているだけじゃだめなのね。
渡したメソッドがインライン展開されてれば大丈夫 渡した先でそのオブジェクトがどこに保持されて生き延びるかわからんからね
215 :
デフォルトの名無しさん :2007/08/05(日) 01:32:40
>>213 引数がListで、そのListに生成したインスタンスを追加したりとか。
>>214 それってつまり実行して見るまで分からんってこと?
217 :
デフォルトの名無しさん :2007/08/05(日) 01:35:41
エスケープ解析の間違ったネタが書き込まれているし・・・ それに誰も突っ込まないし・・・ そもそもエスケープ解析は次世代ネタじゃないし・・・ 終わってね?
当時の流れて下手に突っこんだら粘着に餌与えるだけだけどな
>>216 HotspotVMは実行時にコンパイルするんだから大丈夫
221 :
デフォルトの名無しさん :2007/08/05(日) 10:18:29
>>220 おまえ191だろwww
そんな記事は知ってるわ。
そもそもインライン化とエスケープ解析は違う。
>>211 > Javaのコンパイラはソースコードとバイトコードの対応付けが規定されているので、
> そもそもバイトコードの最適化はありえない。
( ゚д゚)ポカーン
>>221 そうだね、エスケープ解析した結果として、スタックアロケーションしたりインライン化したりするんだね。
違う階層の言葉だったね。
if(true)が無視されてバイトコードに埋め込まれないのは、バイトコードの最適化といわないのかな。
メソッドに仮実装がある場合で、その処理を通さずメソッドの先頭で値だけ返したい場合とか if (true) を未到達エラー回避にたまに使うな。C#はboolを変数化しなきゃいけなくて面倒だ。 ああ、まるで脱線した話題だけどね。
インライン化はエスケープ解析の結果じゃないけど、まぁいいや。 もうちょっとスレタイトルにふさわしい話題ないの
ならクロージャとJAM以外で見所のある機能があれば紹介して。
template萌えな私を叱ってください。
229 :
デフォルトの名無しさん :2007/08/05(日) 16:24:56
JITは標準のコンパイル結果に対して最適化するように動くので、 バイトコードへコンパイルするときは、 明らかな最適化が可能なもの意外は何もしないよ。 バイトコードへコンパイルする時に、 Javacが生成しない最適化されたバイトコードを生成すると、 JITは最適化の対象外になるからかえって遅くなる。 Javacを無視してバイトコード生成するのはJikesぐらい
ん?javacって最適化方針まで規格化されてるの?
規格化なんかされてないでしょ。 特定の実装の話じゃないの?
javacが生成しない最適化されたバイトコードって話がどこからでてきたのかがわからん
そもそも今のjavaの動的コンパイル技術はJITじゃなくてHotSpotだろ。
>>141 jdkのRhinoはMozillaのRhinoコードが実行できないほどの超絶劣化品。
あれらのエンジン間に互換性はないよ?
Rhinoの実装ライブラリがsun.*パッケージに移動されてるから
Rhinoに含まれるセキュリティーライブラリがどの常に利用できるとも限らんし、
バイトコード吐かないから常にインタプリタモードで動いて遅いし。
E4Xないし。上げ出したら切りがない。
>>233 HotSpotは、実行時間食ってる箇所を見つけてJITコンパイルする。
もしくは、あんまし実行されない箇所のJITコンパイルを抑制する。
大雑把な議論をする場合はJITでもHotSpotでもどっちでも良い。
変な拘り持ってる奴を相手にするんでなければ。
3回動くとコンパイルが走ると感覚的に判断してるから、 ベンチマーク前は、10回は回してからやってる。 server vmってのは何時間も動かすと更に最適化されたりするんだろうか
>>234 でもそれって最適化方法が同じ実装の場合に限られない?
サーバー向けVM製品とかの中にはHotSpotと同じ適応型最適化コンパイルするけどVM実装の都合で
あえて変わったタイミングでコンパイルしたりする奴居るよ。
>変な拘り持ってる奴を相手にするんでなければ。
てのはこいつらのこと?
>>235 感覚に頼んじゃなくて -XX:+PrintCompilation とか -Xbatch とか使ったほうがいいと思うけど
>>236 一切JITコンパイルしない最適化方法の事をJITって言ってたら
話が通じなくなるから問題だけど、タイミングが変わるぐらいなら問題ないでしょ。
>>236 > あえて変わったタイミング
kwsk
>>239 たまたま見つけたんで製品名は知らんが
アプリケーションが1度走り出したら負荷のかかるGC/動的コンパイルを
徹底的に発生させないために実行初期にとっとと見切りプロファイルしてマシン語吐いちゃってシステムの稼働を優先させるタイプのVMをどっかで見た。
でも、実行初期段階からボトルネック見つけたりパフォーマンスを平均化する技術を使ってるらしくAOTじゃないみたい。
民生用じゃないVMなんかはそういう変わった実装見るよ。
>JITコンパイルしない最適化方法の事をJITって言ってたら
MEベンダの中にはただのインタプリタ最適化を"独自の"JIT技術と呼んでるところもあるんだなw
漁ると結構変なVMっていっぱい。
あと、JITをただの動的コンパイル(OR最適化)のことだと思ってる奴とか。
語義的には Just In Timeで何かしてたら、なんでもJITになるわな。
JITコンパイラと名乗ってなければ、 > ただのインタプリタ最適化を"独自の"JIT技術と呼んでる なんの問題もないだろ。
JSR-308に関してこんなん見つけた。
http://pag.csail.mit.edu/jsr308/ 正式リリースからは削除予定だけど、JDK7の開発期間中は暫定的に、
/*@Readonly*/ Object x;
みたいのがあると、アノテーションとして認められるらしいんだけど、
これJDK6以前とJDK7以降で共用のライブラリ書くとき便利だから
言語仕様として残して欲しかったり……
JMLみたいな既存のツールが既に/*@...... */ ってタイプのコメント使ってるので
言語仕様に組み込むのはダメって話らしいんだけど。
コメントに書くのは邪道。
>>243 そーゆー事やりたいんだったら、JDK7以降用にソースを書いておいて、
Tree API とか使ってアノテーション落とした方が良いかもね。
エスケープ解析って、*.javaを解析するのか、*.classを解析するのかどっちなの?
>>246 .javaはまず無い。バイトコードにスタックにオブジェクトアロケーション
する命令なんか無いんだから。おそらくバイトコードをJITコンパイルする
段階でエスケープ解析していると思われる。
>>243 > @Readonly Object x;
> if (x instanceof Date) { ... } // error: incompatible annotations
> if (x instanceof @Readonly Date) { ... } // OK
> Object y;
> if (y instanceof Date) { ... } // OK
> if (y instanceof @NonNull Date) { ... } // error: incompatible annotations
これ必要なんだろか? 型アノテーションってインスタンス毎に
ついてるわけじゃなくてerasureなgenericsと同じような扱いでしょ。
こんなん付けても無駄に長くなるだけなんじゃ……
エスケープ解析って、 >バイトコードをJITコンパイルする 段階 の技術だったのか。よくわかった。 ただ、「思われるとか」憶測で語っているのはどうかと。
思われなくても、JITコンパイル時の処理です。
>>248 if (list instanceof ArrayList<String>) { ... }
とかはコンパイルエラーになるのにな。
一貫性がないっつーか……
>>243 なんつーか互換性重視だった 1.5 までと、
どっちかっつーと互換性軽視 機能追加重視の最近の風潮で
ねじれが出てるような気もする。
こんぐらい無節操に機能追加される(予定だ)とプリプロセッサ使いたくなるよな。
>>245 のも発想的にはプリプロセッサだし……
アノテーション使わなければ、互換性あるんだからいいんじゃね?
どの互換性を軽視だって?
>>255 write once compile any version が出来ない、
もしくは無理にやろうとすると、新機能使えなくて不便になるって話。
内部でクロージャが使えない、とかは我慢すれば良いとしても 古いバージョンもサポート対象に入ってて JSR-308みたいのが使えないと 新バージョンで使う時に型情報が減るからな。
>>256 まぁ、言語として複数バージョンに対応するための配慮なんかは一切無いな。
#ifdef 使えばソース汚くても複数バージョンに対応できるみたいな救済策もないし。
相手に合わせようとするのは、JAVAらしくないな。 逆に、相手がJAVA(JVM)に合わせろってところにJAVAの互換性がある。
>>257 まず型ありきの言語で型情報減るのは痛いよな。
263 :
261 :2007/08/09(木) 16:02:17
javac -source 1.5 -target 1.4 Test.java javac: リリース 1.5 のソースにはリリース 1.5 のターゲットが必要です。 と言われてしまった。偽情報スマソ。 一応、Retroweaverを使えば可能なようだが... Retroweaver supports most 1.5 features while running on 1.4. * generics * extended for loops * static imports * autoboxing/unboxing * varargs * enumerations * annotations JDK1.4でコンパイルされたライブラリを、 JDK1.5 以降でGenericsなライブラリとして利用するのは可能だよな... というかこれが無理なら何のためのerasure方式採用なんだよって感じだが。
>>261 -target jsr14 だっけ? 文書化されてないんだよね、これ。
>>263 > JDK1.4でコンパイルされたライブラリを、
> JDK1.5 以降でGenericsなライブラリとして利用するのは可能だよな...
可能っちゃ可能だけど、パラメタ型の情報無いよ
>>266 JDK5以降のライブラリや、メソッドを使うときに注意。
Autoboxingなどはちゃんと処理される。
268 :
デフォルトの名無しさん :2007/08/10(金) 01:25:21
win32 apiとか触るの面倒だし、だれかjvm上で.netが動くの作ってくれないかな C#をインタプリタ実行するのでもいいからさ
>>268 それはそれで凄まじいな
……考えてみるか。
C# を Java バイトコードにコンパイルする方が楽じゃない?
エスケープ解析は、*.javaに対して行っておくほうが実行効率がいいけど、その情報を*.classに残す手段がないので、実行時の最適化でしか使われていない
>>249 >>247 だが、実際にソースまで追って確認したわけじゃないので
そういう表現になっただけで、JITコンパイル段階でやってるのは
ほぼ間違いないよ。まあ、厳密に言えばインタープリタモードでも
やってる可能性もあるけど、メリットが考えられない。
手段がないわけじゃないと思うけど。 stackmapっぽい新しい属性をクラスファイルに追加すればいいんだし。 ただ、静的に解析しても効果が弱いと思う。 メソッドの非仮想化やインライン展開を終えた後にやる方がいい。
>>273 それは、メソッドの非仮想化とインライン展開がエスケープ解析に与える影響がすごく大きいってこと?
そうは思えないんだけど。
>stackmapっぽい新しい属性をクラスファイルに追加すればいいんだし。 これは上で出てきたstructをJava言語でサポートするんじゃなくて、 JVMでサポートするってのに実質的に近いんじゃないか?
>>274 例えばさ、
public Object[] foo()
{
Vector v = makeVector();
v.add("bar");
v.add("hoge");
return v.toArray();
}
public Vector makeVector()
{
return new Vector();
}
みたいなコードがあったとするじゃない。 (例がやや作為的だけど、そこは目を瞑っていただきたい。)
いっけん v は foo の外にエスケープしてないように見えるけど、add とか toArray とかの中で this をどこかの static 変数に保存しているかもしれない。
誰も Vector クラスのソースを見たことあるわけじゃないし (あるかもしれないが)、 Vector がそういう変な実装になってないとは断言できまい?
そういうわけで、この時点では v をスタック上にアロケートしてしまうわけにはいかない。
(this をどこかの static 変数に保存したりできなくなってしまう。スタックは foo を抜けたら消滅するんだし。)
でも add とか toArray とか makeVector とか Vector コンストラクタを全部インライン展開できれば、v が foo の外にエスケープしてないかどうかがはっきりする。
エスケープしてないと判れば、もう別に Vector を new する必要なんかなくなって、 Vector の全フィールドをみんなスタック上に展開してしまえる。
makeVector は final じゃないから実はオーバーライドされてて他のクラスを返してるかもしれないが、これも非仮想化されてればインライン展開できる。
・・・って思ってるんだけど、現実のJVMがどこまでやってるかは知らない (´・ω・`)
>win32 apiとか触るの面倒だし ここらへんあるから実質C#はマルチプラットフォームじゃないよね。
>win32 apiとか触るの面倒だし それだけだったら、win32 api を触らなくて済むようなGUIフレームワークとかを使えばいいだけと違うん?
>>273 > ただ、静的に解析しても効果が弱いと思う。
> メソッドの非仮想化やインライン展開を終えた後にやる方がいい。
二行目は静的/動的と関係ないじゃん。
280 :
278 :2007/08/10(金) 09:57:41
って、.C# か・・・ じゃあ GTK# とか・・・ びみょかな・・・
>>279 静的に=.javaのコンパイル時にって意味で書きました
.javaコンパイル時に非仮想化・インライン展開とかできないでしょ
わかりにくくてごめんなさいね
この暑さでちょっと疲れてるんだ
出来ないことないじゃん。もうInner classあるんだから。
Inner class って、なんか関係が?
インナー・クラスの非仮想化・インライン展開はソース・コンパイル時に出来る。
--- Outer.java --- public class Outer { class Inner { int foo( ) { return 1; } } void bar( Inner inner ) { System.out.println( inner.foo( ) ); } } インナークラスってこういうのでしょ。 inner.foo( ) をインライン展開するつもり? --- Main.java --- public class Main { public static void main( String[] args ) { Outer outer = new Outer( ); Outer.Inner inner = outer.new Inner( ) { int foo( ) { return 2; } }; outer.bar( inner ); // → 2 を出力する } }
そもそもprivate:ならインライン展開し放題じゃない。
それはまぁね。
288 :
デフォルトの名無しさん :2007/08/10(金) 17:18:14
で、実際デフォルトで(知らないところで)インライン展開はされているのか? それも、メモリ上に展開なのか、ソースコード(.class)のバイト数が増加しているのか。
> で、実際デフォルトで ( ゚д゚)ポカーン
はいはい、あげあし君はさようならで
C# だと各メンバに FieldOffset が指定できるよね
>>291 はそういう話じゃないの?
>>292 で、君はそっちのREFをチェックしてからものを言ってるわけなのかな?
>>293 C#がどうしたって?
ざっとみてスタックがどうとか言う議論になってたから似たようなの出してみたのだけど。
いや、データをバイト列にパックする話とスタックアロケーションは別の問題だから。
君の都合にあわないからといって、いちいち相手にケチをつけるところは君の悪い癖だな
なあ、全員「デフォルトの名無しさん」じゃねえか 同一人物間でケンカ自演してるのってどうよ って突っ込んでるオレも同一人物な訳だが
夏休み的なツッコミだな
ボケだろ、ボケ
ノリツッコミか
java LnFっていずれocanからSwing new LnFと謳ってるNimbusになるのかね?
Nimbusはスクロールバーがヤだ
304 :
デフォルトの名無しさん :2007/08/19(日) 15:38:42
確かにへぼいな
javaのスレでC#の話をするなボケども
JSR 310ってどうよ
>>302 Nimbusはごっつい雰囲気が強すぎて微妙ー
Aquaとかみたいな甘いデザインにしてくれと思う。
>>306 各所のブログでJSR 310は入れてほしくないと言われているな。
どうなんだろう・・・
使うことはあまりないだろうな。
>>306 オレは JSR-310 スライドに入ってる
> What's wrong with Date?
> ・Uses two digit years from 1900
> ・January is 0, December is 11
のセンスを見て、なんだかなー と思った。
この辺って、たぶん Cの標準ライブラリの
struct tm と同じ方式になってるだけでしょ。
きちんと文書化してあれば大して問題になるとも思えんし……
>>309 いや、正直、1月が0とかは文章にしていてもあり得ない。
使うたびにAPIをその仕様で設計したヤツに殺意を覚える。
ライブラリの使い方からCと違うんだから中途半端にわかりにくくしてるだけ。
文章化してあるから問題なしって・・・
>>311 分かりにくいっても、C言語使った事あれば1月が0になる事もあるってのは予測可能だし。
不勉強な上に不注意な連中が躓く原因であるのは確かだろうけど、
たぶん、そういう連中は 月フィールドが 1オリジンになったら Calendar と互換性なくなって躓くだろう。
ゼロから新しいAPIを作るならともかく、既存の Calendar と共存するつもりなら、
新しいクラスを作って、そのクラスの月フィールドを 1オリジンにしたぐらいじゃ幸せにはなれない。
>>311 まぁ有り得ないとか殺意を覚えるってのは程度の差だからなんとも言えんけど。
オレとしては 1月を 1 にしたければ、とりあえずユーティリティメソッド1つ作れば良いと思うんだわ。
で、オレの感覚からすれば、ユーティリティメソッド1つで解決するような問題を掲げて
わざわざ新API作ろうって感覚の方が有り得ないんだわ。
スライド見て感じた事ってのはそーゆー事。
今から新しく作るんなら、enumにすればいいんじゃまいか。 public enum Month { JANUARY, FEBRUARY, ... }
そして旧暦閏月で困ると。
閏月対応してるクラスってあったっけか?
318 :
デフォルトの名無しさん :2007/08/20(月) 23:19:30
Timeの方は刹那とかに対応しないかなと思ってみたりw 10^-18なんて精度表せないだろうが。単位として扱えたら面白そう。
誰が使うんだ、そんなもん……
ナノ時間取得はコストが高すぎるんだよな・・・
>>319 坊さん用ソフト開発なプログラマw
24時間=30牟呼栗多=900臘縛=54,000怛刹那=6,480,000刹那という変換するとか。
スウォッチインターネットタイムも欲しいな。
坊さん用なら卒塔婆プリンタの方が喜ばれそうだが。 っつか、Wikipedia漁って適当な事言ってるだけじゃね?
http://www.atmarkit.co.jp/news/200708/20/httpcomp02.png 同じくフォーチュン1000企業のWebサイトを対象とした調査で、
アプリケーションサーバのシェアはASP/ASP.NETがトップで51.5%のシェアと2年前から7.9ポイントの上昇。
J2EE、JSP、WebLogic、WebSphere、TomCatなどのJavaプラットフォームが2位で12.7%。
そのほか、PHP(6%)、ColdFusion(3.2%)、Perl(1.9%)、Python(0.2%)などとなっている。
とりあえず、ASP.NETの普及が断トツに進んでいる。
Javaは新規プロジェクトで採用される可能性はほとんどなくなってきてるしな。
そろそろJava終了のアナウンスがSunからあるのかな まぁいい思い出になったよ
>>323 ASPとASP.NET合計で51.5%か。意外に低シェアだな。
>>324 Sunあぼーんして、IBM & Google が実権を握ってくれる方が嬉しいなぁ。
>>315 一応、Calendar.JANUARYとか定数ならあるよ。
そっち使うでしょ普通。
あ、そっち使うでしょ、ってのは0とか1とかじゃなくて、って意味。 enumならなおよろしいけど、互換の問題がねぇ・・・。
>>327 日付扱うときは、だいたいユーザー入力だから無意味。
プログラム中でJANUARYとか指定することなんてあまりないんじゃね?
ユーザー入力を文字列として持ち回すと難儀だよね。 でも、WEBアプリにしろSwingにしろ、フレームワークとか 日付入力コンポーネントとかでDate型で最初から 扱える奴あるし、今時大概そうじゃないのかな。 プログラムの中で月決め打ちってのは確かにあまりないですね。 テストコードくらいか。
>>314 いや、ラッパークラスを用意すればいいってのはユーザ側の対応になる。
それはつまり、現状のDate型の変更に依存する訳だし
自分が書いたコードはラッパークラスを必ず含まなくてはならなくなる。
それならコアAPIに入っててくれよ、と思わないか?
今のDate型の実装だと、実装者自身が作り直したいと考えても
仕方がないような作りが多々ある。Calendarを追加して手当したけど
時間、日時を扱う場面は多くある。
これだけJavaが使われてその問題点が明らかになったんだから
新しくより合理的なAPIができてもいいと思う。
言うなればJava3とでもいうものへのへの緩やかな変化。
基本的なモノだからこそ改良が重要になってくるとは思うんだ。
アトは失敗しないようにしっかりと作ろうってところだろうか。
Calendarいらないってがんばっている人もいる。 tp://d.hatena.ne.jp/nowokay/20070628 tp://d.hatena.ne.jp/nowokay/20070630 これが本当に通ってくれれば 憂いなしで嬉しいな。
つか、きしださんまで月間違ってるし!
>>330 ラッパークラスで解決しようというのはダメだろ。
Calendar の set やら get を ラップして 1月が1になるようにしても、
自分の目の届く範囲だけなら構わないけど、
第三者が作ったクラスに渡す場合には、そのまま渡したら 1ヶ月ずれる。
そんなゴミをコアAPIに入れられたら、 Calendar をやり取りする
メソッド作る場合に、必ず instanceof とかでチェックしなきゃいけなくなる。
>>331 無理じゃね?
java.util.Date は Serializeable だし、
Date の TimeZone対応とかやったら、
シリアライズされたデータの互換性なくなるんじゃないか?
W3C-DateTimeからRFC2822-DateTimeに用意に変換できるようなものが欲しい。 RFCのほうはCWFSのおかげでやたらパースがしにくい。
>>330 > これだけJavaが使われてその問題点が明らかになったんだから
> 新しくより合理的なAPIができてもいいと思う。
あっても良いけど、closure とかに比べると優先度は低いよね。
それに「問題点」ってのも個人個人で違うわけで、1月 が 0 なのがダメなのか、
setter の戻り値の型が void だから、1行に詰め込んで書けないのが問題なのか
それ以外なのか。
現状では愚痴とか不満は出てるけど、
それらを一つに纏めて、多くの人が納得でき、多くの人が幸せになれるような
解決策が提示されているかっていうと、少なくとも JSR-310 は違うと思う。
337 :
デフォルトの名無しさん :2007/08/21(火) 20:22:16
>>335 まえにjavascriptの実装がどっかのブログで公開されてたぞw
>>336 いや、JSR-310はまだ固まってないし。
そういう動きがある、ということしか言えないと思う。
なんで、これからの頑張り次第でしょ、という話。
それとも、「日付関係の新しいAPIは要らないぜ」という話?
>>338 1月が 1 と書けるようになっただけ、の Calendar みたいなクラス作られても
あっちのフレームワークでは互換性のために旧Calendar要求され、
こっちのフレームワークでは機能性のために新API要求され、
みたいに手間が増えるだけになる可能性が高い。
かと言って、Calendar が解決しなかったニッチな要求のためだけのAPI作ったら
わざわざ標準APIに突っ込む必要ないって話にもなるし。
既存のDate&Calendarがある状況で
日付関係の新しいAPIを作るのは凄く難しいと思ってるんだけど、
1月が 0 なのがキモイみたいな事かかれると、
マトモなものが出来るのか心配になるって話。
動画再生用のSwingコンポーネントが標準化されたりしたら嬉しいのだけど、 JavaFX Scriptに合わせて対応してくれたりせんのかねぇ。 Flashは次のバージョンでH.264にも対応するとか発表してるし、 本気でRIA市場に乗り込むならここらへんを抑えてくれないと支持しにくい。
つ JMF
JRE以外にインスコしてもらえるわけないじゃんw
jarに全部突っ込んでマニフェストでパス指定するか。JWSでいいだろ。 けどJMFのH.264コーデックがまだIBMのプロプラライセンスものしかなかった気がする。
>>339 相互変換はコンストラクタ一発なんだから問題ないんじゃね?
SilverlightやFlashに比べて、JREはインストール面で不利すぎる気がするのですが 軽量プラグインとか出す予定はないのでしょうか?
何を削るかで揉める事必至だろうなぁ・・・ いっそのことJ2MEのランタイムを作ってそれを軽量プラグインにするとか
分割ロードの方が良さそうだなあ。 Javascriptは何でも一つのファイルにぶち込むのが流行ってきているけれども。
>>344 Date と Calendar はコンストラクタ一発で変換できてないじゃん。
それと同じ事が起こる事は十分予測可能。
>>349 っつーか、コンストラクタ一発で変換できても煩雑なのは変わらんのだがな。
”よく知られた日付型”がこれ以上混在されてもうざいだけだよ。 DateにCalendarにsql.Dateと、”よく知られた日付型”は、もう既に食傷気味です。 所詮は64bit unix epocと割り切ったユーティリティメソッドが拡充される方がよほど嬉しい。
なるほど。 良くあるパターンに特化したユーティリティメソッドを用意してくれる方が ありがたい気がする。
JREのインスコなんてウィザードに従えば良いだけだろ。 それより、システム管理全体がside by sideへ以降してきてメンテにエンドユーザーの負担が掛かってると思う。
JSR 310はいいと思う。 ユーティリティ・クラスとしても上出来。
>>354 そうなん?
>>310 に JSR-310 のAPIリファ来てるけど、
これどんな時に便利なのかサンプルコードとか書いてくれん?
っつか、オレには Moment や Period のサブクラスが
年、月、日、時、分、秒と分かれてる必要性がイマイチわからん。
タイムベースの処理が必要でそのフレームワークを自前で作らなきゃいけないときに下のライブラリとして使えそうだな。
>>310 がJSR-310のリンクになっていることに
今になってようやく気が付いた。
なんか黄色ナンバーの車を1日10台見たとか
ワーゲン見たとかその程度にちょっと幸せ。
>>356 逆に言うと、それ以外の目的に使えなさそうじゃね?
どっちがいいとかそういうもんじゃないだろ。 310はベースとなる時刻クラスを提供するんだから。
今のままだったら Date & Calendar の方が下位層で JSR-310 はそれに乗っかるだけの上位層になりそうだが
( ゚д゚)ポカーン
おまけに使用用途が酷く限定されている、と。
>>360 んじゃ言い直そう。
JSR-310 のスライドにあがってる、
What is wrong with Date and Calendar?
の解決策としては、今のところ
>>331 の方が良さそうに見える。Date の
Could not be successfully localized とか Most methods deprecated、
SimpleDateFormat の Calendar cannot be directly formatted
は解決できそうだ。
>>360 310が提供するベースとなる時刻クラスってどれよ?
文字列からのファクトリメソッドは、 別クラスにした方がいいんじゃないの? L10N考えると劇重プロジェクトだし。 GNU dateコマンドみたいな時間指示を考えると、やること一杯ある。
これはひどい ベースとなる時刻クラス・・・ Instant かねぇ でも CalendarDay や TimeOfDay との相互変換はできそうになく 既存の Date や Calendar との繋がりもない どうやって使うんだこれ
310はまだ、かなりドラフトな感じだが、 PeriodとMomentとその実装クラスを細かく分けるのは、 安全でかつ読みやすくなるのでよいと思う 例えばMomentにMomentは追加できないがPeriodは追加できるとか
Instant と fully defined な SingleMoment を区別する理由と、
Period と Interval を区別する必要とか、
Duration とか良く分からん。
Duration と Inteval はまだ出来てないみたいだけど。
>>368 も同意っちゃ同意なんだけど、
それって Moment と Period が別になってる理由にはなっても、
Moment や Period のサブクラスが 年、月、日、時、分、秒と
細かく分かれてる理由にはならんよね。
>> 369
>Moment や Period のサブクラスが 年、月、日、時、分、秒と
>細かく分かれてる理由にはならんよね。
なんで?
Days days = ...;
days = days.plus(Days.days(3));
とか具体的な型が決まっていたら安全かつ読みやすいじゃん。
しかしメーリングリストだとなんかいろいろ提案とか出されたり、まだまだな感じがしてきた。
sunの中の人が書いてるが、
http://blogs.sun.com/yk/date/20070705 既存のAPIとの互換性とか国際化も考えると大変そうだね。
>>369 後者については type safe のためとか?
もしくは、
Moment moment = build(dayOfMonth(1), hourOfDay(3));
とかやると、毎月 1日午前 3時 をあらわすようになるとか……
>>370 おいおい……
一見型安全かもしれないけど、
それだけだと、逆に Period で 1カ月と3日とか複合的な指定できなくなるんですけど……
>>371 あぁなるほど。可変長引数のビルダーメソッドで纏めるとか
そーゆー場合には別々のクラスになってないとダメだな。
>>370 これはひどい
>>372 Periodとしての一ヶ月というのは日数として組み合わせて扱えない気がするが。
( ゚д゚)ポカーン
376 :
374 :2007/08/24(金) 02:48:29
今のAPIを見る限り、複数のPeriodを組み合わせたPeriodというのはない気がする。 Monthsに関しては月によって日数は変わるので、months.plus(Days.days(3))みたいな計算は書けないと思うが。 しかしCalendarDayはplus(Period...)というのを持ってるので、一ヶ月と3日後とかを計算できると思う。ただMinutesとSecondsとの変換とかできそうな気がするのにできないように見えるのはよくわからない。
377 :
デフォルトの名無しさん :2007/08/24(金) 02:51:08
>>372 そーゆーのは、まだない Interval でやるって話なんじゃね?
しっかし、凄く分かりにくい API だな、これ。
そこそこ経験がある奴でもサンプルコードが無いと一行も書けないぞ。
>>373 instanceof で比較するところを enum と switch で置き換えれば
良いだけだから、別々のクラスになってる必要は全くなかったりする。
379 :
374 :2007/08/24(金) 03:03:40
やっぱりわかりにくいのだろうか? 変換とかファクトリとかのメソッドがどこにあるかわからず、分かりにくい、というのはあるかもしれないが、 そもそも日付と時間の長さなどを区別して扱うこと自体が複雑で、結局intとかで扱っても値の種類を把握していないといけないのでは。 ある程度、単位を型でエンコードして分かりやすくすることで安全で読みやすいコードになる方がよいと思うのだが...
Dateみたいな基本的なところに今から手を入れるのがアリなら、 Numberもどうにかしてくれんかな。 やっぱり Integer inherits Double であってほしいし、BigDecimalで 持っている四則演算メソッドはNumberすべてで使いたいが。
>>380 JAVAの株があがったとか下がったとかが問題になってくるわけか。
そしたら、JAVAと大文字で書くやつはJavaのことを知らないという伝説が強くなるわけだ。
>>381 Numerics関係は難しいんだよな、後からいじるの。
非互換の影響が大きすぎて。
仕様お目付け役だった、Guy Steeleさん、この辺が弱い。
元がSUNWならJAVAWにすればいいのにコンソール出ないし・・・。
>>381 メソッド追加はありでも継承関係は変えられないだろうな
386 :
デフォルトの名無しさん :2007/08/29(水) 21:26:22
そろそろ deprecated のクラスやメソッドを一掃してほしい
Cloneable を Clonable に直してほしい
creat....
catch必須例外を堂々と無視できるプラグマを追加してほしい。
アホか例外処理の意味ないだろ。 握り潰すことすら面倒くさいか?w
>>390 めんどくさい。
どうでもいいコンソールプログラム書くときは
全部例外がトップレベルに流れて死んでくれていい。
あと、どうせならインタフェースの実装も堂々と無視できるプラグマも欲しい。
適当にnullとか0とかfalseとか、あるいはNotImplementedException投げるとか。
IDEにやらせればいいんだけどさ。
>>392 お前はCの方が合ってるんじゃないか?
つーかその程度の捨てアプリならスクリプトで実装すれば良いだけじゃん。
mainメソッドにthrows ExceptionってすればOK
Javaの例外処理の面倒くささはMatzがどっかで言及してたね
silentClose(Closeable) みたいなメソッド作るとか 使い捨てアプリ作る時は throws Exception つけるとかすれば そこそこ改善すると思うんだけどね
>>395 むしろその例外処理の面倒さがないからこそ
他の言語があぶなっかしくて使えない。
コード品質重視だと特に。
むしろ投げる例外をdoc,code上で明文化されてないと何拾って良いか分からないだろ。拾えないと例外に対処できない。 throw,throwsでthrowable以外が飛んでくるのもおかしいし。
ExceptionはThrowableである。以上。
例外処理の仕組みが問題というよりも
IOExceptionとかSQLExceptionのようなレベルの例外を
チェック例外にしてるのが問題だと思う
SpringやS2やHibernateなら、これらの例外をランタイム例外にラップしてくれるし
JavaEE5ではランタイム例外を多用してるけど
肝心の、JavaSEのコアなAPIがチェック例外だらけだからな
>>397 現実には、Javaのチェック例外記述のめんどくささに嫌気がさした開発者が
catch (Exception e) {
e.printStackTrace();
}
とか書いて、返って品質悪化するパターンの方が高い気がするorz
あと InterruptedException も握りつぶされて困りやすいチェック例外だ あー InterruptedIOException とか、きっと知らんうちに IOException もろとも握りつぶしてる気がしてきた try { ...... } catch (InterruptedIOException e) { Thread.currentThread.interrupt(); } catch (IOException e) { ...... } なんて、書いた覚えがないよ
例外のためのEffective Javaみたいなのがあれば読んでみたい。 こういうのはお習字の世界だから仕様としてどうこう変えるもんでもないし。
>>400 IOExcepotionとかは
>>396 みたいなメソッドがあれば解決する問題
後半に関して言えば
そーゆー奴は面倒くさいので例外処理しないし
他人のために必要な例外関連のドキュメントも書かない
ので検査例外をあってもなくてもそれほど品質は変化しないと思うが
何が言いたいのやら・・・必死なことだけは解るが
IOExceptionやSQLExceptionがチェック例外なのは当然だろ? 外部リソースに依存してんだから、チェックし無い方がどうかしてる。 DAOならそれらをcauseにして、DAOExceptionみたいに新たなチェック例外にくるむがよろし。
closeが例外なげるバカなAPI
close は flush を伴うからエラーが発生する可能性はある
closeが例外なげるのがバカってどんだけゆとり脳なんだ
思うに、チェック例外をキャッチしないと 警告出すだけの仕様だったらどうなっていただろうか?
throws SQLException って書いてないのに throw new SQLException() するような 混ぜるな危険メソッドが書き放題で検査例外の意味がなくなる。 それでいてソースに SuppressWarnings("ignorecheckedexception") とか コンパイル時に -ignorecheckedexception とか必須だと手間がかかるだけ。 中途半端で役に立たないソリューションの見本だな。
んなもんソースレビューで片付けろよ
closeが検査例外を投げるバカなAPI
>>411 第三者の作ったライブラリやフレームワーク使う時は
それらも全部ソースレビューすんの?
必ずソースが見れるとは限らんし
>>405 IOExceptionとかって多くの場合リカバリできるの?
リソースの解放はfinallyでやるからチェック付き例外とは関係ないと思うし
なるべく例外がチェックできるべきだという意見は多い様に見えるが、一般的にそれらの例外がほとんどリカバリできる処理を書けないならば
>>400 の言うようにAPIの設計の問題では?
ソケット使って読み書きしてる時にIOExceptionが発生したらリトライするとかあるよね
>>416 そういう特定の事情のために、すべてのIO処理で面倒なコードを書かないといけないのはアホ
というか、例外が出ないコードで例外の補足が必要になるのが、設計ミス System.in.read() とか
面倒っても、throws IOException を宣言するくらいのもの。 その場で対処しない例外は上へ送る。
System.in.read() ってプラットフォーム側の標準入出力の実装方法によっては 例外が出る可能性があるんだが
俺としてはNumberFormatExceptionが実行時例外なのが許せないくらいなんだが。 外側のことは一切信用しないという性悪説プログラミングが心情だとね。
俺はUserTransactionのメソッドを使ってみたとき、 Javaのチェック例外は、API側が使い方を根本的に間違ってると痛感したよw
>>412 みたいな事を言う奴から間違ってると言われても
>>419 それで上へ送った例外は結局どうなるわけ?
throws IOExceptionをまき散らして、
RuntimeExceptionになるか握りつぶされるぐらいじゃないの?
>>421 一切信用しないというのはいいが、それはどうやって処理される?
他の値で代用するのは多くの場合問題がある気がするし、
再度入力を促すことになると思うが、
可能な場合と不可能な場合(処理を中断するしかない場合)があると思う
...NumberFormatExceptionに関しては微妙な気がしてきた
RuntimeExceptionでよい場合も多いと思うが...
最近じゃ例外もAOPで処理するし、リソースはfinallyで閉じるからあまり関係ないしな matz氏がブログで、例外をぎりぎりまで捕捉しないのがRuby流って書いてたけど 結局はそれがいちばん効率的で、開発者に都度catch処理を強制するよりも品質が上がるんだよね。 例外処理がなくても、異常終了で落ちるからテスト時にすぐわかるが、 catchで不用意に握りつぶされた例外はやっかいだし
何層か下のフレームワーク/ライブラリが投げてくる実装依存の例外もやっかいだけどな。 面倒くさいから検査例外は無い方が良いとか考えてる奴は、 例外関連のドキュメントなんて書かないから品質ズタボロのコードを量産する。
427 :
424 :2007/09/02(日) 17:27:46
>>425 アプリケーション(基本的なライブラリでない)でのチェック付き例外は有用と見られているはずだ
アプリケーションレベルではリカバするべき例外を決めることができて、チェック付き例外で強制できる
アスペクトを使うことでIO例外をアプリの例外へ変換とかはうまく書けるが、
各メソッドごとの例外処理を常にうまく分離して書けるわけではない
テスト時にすぐわかるというのは理由にならないはずだ
再現が難しい例外だってあるから
それよりも発生したときなにもできないことが多いというのが理由だと思う
なんか次世代関係なくなってね? JAVAの例外について勉強するスレとかたててそっちでやれ
429 :
デフォルトの名無しさん :2007/09/02(日) 18:30:35
例外処理が煩わしいのであれば、 例外処理を包含したテンプレートパターンを適用して処理すればいい。 APIは面倒か面倒じゃないかではなく、安全か安全ではないかが重要。 APIは極力安全に使えるように「馬鹿向け」に作られているが、 本当の馬鹿にはその意味すらわからないらしいw
わずらわしいどうの以前にその例外をどう扱うべきかというパターン自体が俺みたいな初心者にはわからない 使われる側でチェック例外を投げてから使う側で遺言を言ったあとRuntimeExceptionでラップするとか、 キャンセルなどの特殊な状況を処理するために使うとか、なんだろうか
捕捉する場所によって扱い方も異なるとしか言い様がないな。 ライブラリ書いてるなら、抽象的な例外でラップして投げなおすだろうし。 フレームワークならコントローラで一括処理で、それ以外では全部投げっぱなし。
個人的にはチェック例外=病気の診断、ランタイム例外=安楽死とか思ってる
で、今直せる見込みのない病人がいるとして、いろんな病院をたらいまわしたり(チェック例外のままthrowsしまくる)、
病気ではないとして放置したり(例外を握りつぶす)、
秘密裏に抹殺したり(System.exit(0))、
するよりはランタイム例外にして安楽死させたほうがいいような気はするんだけどな。
でもそのあたりの常識やパターンやガイドラインみたいなものがないと実際何をやっていいのか分からないし、
ttp://www-06.ibm.com/jp/developerworks/java/040618/j_j-jtp05254.htmlとか見る限り 、
今のAPI仕様でそれが完璧に行われているかというとそうでもない気がする。
どう診断すればいい医者であるか、と言う問題についてはもっと語られてもいい気がする。
病気になったら即安楽死=良い医者だと?
スレ誘導しようとしたらいつのまにか例外処理スレが落ちてた。
>>420 その程度ならRuntimeExceptionで十分
>>435 その程度なら throws IOException 書いておけば十分。の間違いじゃね?
>>432 ロッド=ジョンソンの本の説明が出てるな
自分も彼のJ2EE本読んで、チェック例外に対する見方を改めた口だ
例外処理がもれなくSystem.exit(0)オンリーなソースを 押し付けられた俺涙目
例外処理が全部 System#exit(int) ってのもアレだが、 異常終了してんのに 0戻すってのも相当アレだよな。
終了するというコードが正しく実行できたので正常!
と。
曲がった先の信号が青だから曲がれる、という理屈に似てます。
>>439 まあ握りつぶされるよりはいいんじゃないか?
例外処理に関しては、パッケージ単位とか、今度出来るはずのモジュール単位で
包括して処理できる仕組みがあったら便利じゃないかなぁと思う。
>曲がった先の信号が青だから曲がれる、という理屈 これめちゃくちゃ危ないんだが・・・特に内輪差考えないで突っ込んで来る馬鹿な大型車とか。
>>439 脈絡ないけど、exit()の前にfree()は要らないってのを思い出してしまった。
>>432 一理あると思うが、マルチスレッドの場合はランタイム例外もきちんと
捕捉しとかないと握りつぶしたのとたいして変わらないことになるんだよな。
そのへん整合性あるガイドラインならいいんだが。
あと、安楽死というからには本当はやっぱり後始末もちゃんとしておきたいところ。
あのfree論争ってさ、 「とりあえずfreeはしておくべき」的な教条的理想論 「どうせ終了と同時にメモリ開放するんだからいいじゃん、っていうかfreeしたって実際何もしてないのとほぼ同じだし」っていう感じの現実論 って理解でいいんだよな?そりゃ永遠に話は平行線だ罠
例外ってさ、単純な入力ミスで出るようなはっきりいって例外処理までしてやりたくないようなどうでもいい例外か 出てる時点でもうもうどうしようもない例外が多いような気がする
外部からの入力ミスなら対処しないとダメだろ。 使い捨てアプリ作ってんなら、throws Exception 付けといて良いだろうし。
>>445 マトモな奴は、free論争なんかする暇があったら他の事をやる。
parseIntで数字じゃなかったときの処理を例外でやんないといけないとか、ひどすぐる。
>>450 なら、どうしたら良いと思う?
parseInt の戻り型を long にして数字以外なら int の範囲外が返ってくるとか、
parseInt の戻り型を Integer にして数字以外なら null 返すとかしても、
例外よりマシになるとは思えないけど。
>parseInt の戻り型を Integer にして数字以外なら null 返す それやるとオートボクシングしたつもりがヌルポになったりすっからなあ isValidInteger()みたいなチェックメソッドを作ってやるとかどうよ。二度手間だが
>>452 安全なコードを書くためにそのメソッド使った
if文を書くことを強制しないといけない。
ならコンパイラでチェックしてやろうというのが
検査例外な訳で。
どこまで人間を信じるかだな。
> isValidInteger()みたいなチェックメソッド なんという銀の弾丸
int[] parseInt(String) 返値は { パースした数字, エラーコード } 俺もparseIntについては何とかならないかと思ってた。 parseできないってのは、想定内の状況だからExceptionにするのはどうかな、と感じてて 例外と言うより1状況として扱いたいと思ってる。 ただ、上のようにしても何かしっくり来ない。 Exception以外に、例外状況をメソッドの返りで扱えるようになればいいな、と思う。 Exception処理が重すぎるというのが元凶なんだが、 RuntimeExceptionでないものに関しては parseIntのように、stackTraceなんて重いものは要らなくて、 その場で処理してしまう例外状況って多いじゃないですか。 何とかならないのかなぁ。 言語構造的に、Throwable一本ってのが簡単なのは分かるんだが・・・
>>453 >if文を書くことを強制しないといけない。
ここに関しては
Nullチェックに対するNullPointerException
Iterator#hasNext()に対するNoSuchElementException みたいなRuntimeException派生を投げれば済むと思うんだけど
二度手間なんだよね。このチェック。
>>456 hasNextはそのチェック自体が軽いからいいけど
parseIntは、parseしちゃってるからねぇ・・・二度手間ですよねぇ・・・・
>>455 > parseIntのように、stackTraceなんて重いものは要らなくて、
> その場で処理してしまう例外状況って多いじゃないですか。
parseInt の場合だと、
・ユーザー入力を parseIntした場合はユーザー入力が遅いのでExceptionが重くても問題ない。
・ファイル読み込んでparseIntした場合、パースできないケースは例外を使うべき状況なので問題ない。
だと思うが。
自己レス
>>457 あ。parse結果をキャッシュできればいいのか。内部で。
って、コトは、staticメソッドじゃ駄目だな。
Stringのインスタンスメソッドになれば何とかなる、という所か・・・・
>>456 要するに、検査例外だと
コードがごちゃーとするのがやだから
実行時例外にして欲しいって事でしょ?
どっちにしろ、人間をどこまで信じるかだな。
>>460 paeseInt の話なら、NumberFormatException は実行時例外だが。
>>455 最近の言語であるみたいにJavaが多値を返せる言語だったら良かった
んだけどなあと思う。
(int, StatusCode) parseInt(String input)
とか。
ちょっとキモイが
interface ParseResult { }
class ParseSucceed implements ParseResult { }
class ParseFailure implements ParseResult {}
というクラスを用意して、ParseResult型の値を返すとかどうだろう。
そんなややこしいことやるくらいなら Integer を返して null かどうかで判定できればそれでいいよ
>>464 だからそういうのやるとコードの変なところでヌルポが出そうで怖いんだって
オートボクシングするだけで出るし正体不明のバグ増やすだけ
じゃあ @CheckForNull 付加で
>>462 StatusCodeチェックしない場合はパースに失敗してても intの値が得られちゃうし、
その上現状よりキモくなってるしで、あんま良い事ないんじゃね?
>>462 多値を返すという話はだーいぶ昔からBugParadeでやられてて
話に参加してみたものの結局、やらないよーという結論。
まあ、どうしてもやりたきゃ、今は配列をつかえってところ。
それなら俺は、配列に違う型を含められるようにしてくれ、と思い・・・
でも、その場合型チェックはコンパイル時には難しいわけで
Objectの配列使うのと変わらないわけで・・・・
じゃあ、じゃあstructがあったらいいんじゃ・・・・っていうと、
アレ?それってクラスじゃね?と・・・・
型チェックが緩くてもともと実行時にしか型がきまらない
スクリプト型言語なら、複数返値も考えることあんまり無くていいんだろうけどねぇ
>>468 いやいや。型に厳しい関数型言語(MLやHaskell)などでは、
昔からタプルという形で多値が扱えたから、それと同等の
仕様にすればいいだけだと思うんだがな。
>>463 実装は省いたけど、ParseSucceed型からはパーズ結果の値を、
ParseFailure型からは失敗の原因を取得できるようにする意図が
あったので、ただのEnumだとよくない
>>469 >>455 だと Exception重いからException使わないようにしようって話でしょ。
タプルとか使って正常系の処理も重くしたら意味無いんじゃね?
>>470 パフォーマンス上の理由なら、そんなもんいちいちnewして返すぐらいなら、例外投げればいいと思う。
単にコードを簡潔にしたいだけなら、
static boolean parseInteger(String text, AtomicInteger out);
みたいなのをどっかに用意してやればいい。
AtomicIntegerは、他に標準でintを参照渡しできるインターフェイスが無いからなんで、
適当なintをsetできるインターフェイスならなんでもいいと思う。
コードを簡潔にするっていっても、結局正しくパースできたかのチェックは必要なんだから、
例外で十分でしょ。
しかし事前チェックが出来ないにもかかわらず実行時例外を投げてよろしいものだろうか 同じく文字列を解析して取得するタイプのClass#forNameが発行するClassNotFoundExceptionはキャッチ例外だよね?
>>472 パーズ失敗というのは、自分にとっては正常系の処理なんで
例外使うのは違和感があるんだ。感覚的な問題なんだけど、
Map<K, V>#get(K key)がkeyがエントリに存在しない場合に
例外を投げられると嫌なのと似た理由で。
>>474 の補足だけど、Mapから値を取得しようとしたときにキーが存在しない場合
というのは、正常系の処理であることが多いから、もしもJavaのAPIの設計が、
例外投げるようになってたとしたらうっとおしいだろうなあということ
parseIntの場合も、本音で言うと多値よりnull返す方が良いと思ってる。ただ、 現状のJavaでは、nullを許容する/しないを型で表現できないという欠点が あるので、微妙なところではあるけど。
はぁ?
C#のNullableは安易にstructをサポートしたがために招いた失敗仕様の名残じゃないか オートボクシングでラッパーオブジェクトと用意に相互変換可能な現状で、んなもん無用の長物
使用できる範囲は限定されるが int parseInt( String numberInString, int defaultValue )があればよかった。 パーズこけたらデフォルト値を返す。
そんなに1行で書きたいんですか
ラッパークラスに例えばisConvertable(String)みたいなメソッドがないのがねぇ。 2回パースするくらいなら例外でいいっしょwwwwwwって設計思想はちょっと。。。。
>>482 Javaだと参照渡しがないし、標準でmutableなintのラッパークラスも無いから作りにくい。
俺はjava.util.prefs.Preferencesのget()を思い出した
>>483 プリミティブを参照渡しさせない仕様なんだから
可変にしちゃったらラッパークラスにならないぞ
>>483 つ java.util.concurrent.atomic.AtomicInteger
っても、atomicな更新のためのクラスだから
mutableなintのラッパークラスとして使うのはアレな感じもするけど
org.omg.CORBA.IntHolder CORBAのクラスなのがあれだが
>>478 C#のNullableは単に値型でnull許容可能にするための代物。
俺が言ってるのは、値型/参照型区別無くある型の変数に
nullを許容する/しないを指定できる代物。しかも、nullableな型は
non-nullableの型にそのまま代入しようとしたらエラーになって
コンパイラによるチェックを強制されるようなの。具体的な言語で言うと、Nice
http://nice.sourceforge.net/ がそれをサポートしてる。使ってみればわかるけど、この機能はかなり便利。
ウザいと思われるかもしれんけど、続けて書く。Niceで書くと定義はこんな感じで 書ける。 int? parseInt(String input) {//nullを含む可能性があるint型 try { return Integer.parseInt(input); }catch(NumberFormatException e) { return null; } } 使用する方はこんな感じ。if(parsedValue != null)によるガードが無いと コンパイルエラーになるのでNullPointerExceptionの心配は無い。 int? parsedValue = parseInt(inputValue); if(parsedValue != null) { //parsedValueを使った処理 }
この機能が無いからNullObjectが出来たんだな
>>489 それ、何が嬉しいのか分からん。
parseInt だと実行時例外で例外処理を強制できないから、
nullチェック強制できる
>>489 の方が良いって話?
よく考えてみたらオートボクシングめんどくせえなw これ
>>491 パーズ失敗を例外で扱うのに反対で、返り値でパーズ失敗を扱いたいんだけど、
nullでパーズ失敗を表すとしたらNullPointerExceptionの危険性があるし、意図が
あいまいになる危険性もある。で、この機能があればnullを許容するという事を
明示できるし、NullPointerExceptionの危険性も無いから欲しいなあということ。
コンパイルエラーを期待してって考えなら分からんでもない。 javaならメソッド側にアノテーションで実現することになりそうだ。 @NilExclude int parsedValue = parseInt(inputValue); if (parsedValue != null) { // このブロック以下でのみparsedValueへはアクセス可能 } // このスコープでparsedValueへはアクセスできない をコンパイルすると拡張構文よろしく等価コードに展開されるみたいな感じか。 int parsedValue = 0; Integer parsedValue$ = parseInt(inputValue); if (parsedValue$ != null) { parsedValue = parsedValue$.intValue(); // ... }
結論はおまえにはjavaは合ってないって事だな。 話聞いてると考え方が短いコードで実現させるタイプの動的言語の発想だ。
で、何故parseInt()のパーズ失敗を例外で扱うのに反対かというと、parseInt()は 引数から返り値が一意に定まるので、たとえパーズ失敗でも例外的な状態と 言えないと考えるから。
>>495 なんで動的言語が関係してくるの?むしろ静的にチェックできる機能が
欲しいって話をしてるわけで、動的言語とは対極の発想だよ。というか、
短いコードが好ましいってのは動的言語特有の発想でもないでしょ。
> メソッド側にアノテーションで実現することになりそうだ。 メソッド側にってのは余計。構成してて放置したままだった。
契約的言語。
アノテーションひとつで if (n != null) { /* n アクセス */ } と if (n == null) { return; } /* n アクセス */ のどちらかを選択(および強制)できるのなら歓迎かな。 @Overrideの親戚みたいなもんだ。
>>493 ,496
単に自分の考えと合わないってだけ?
それって自前のクラスメソッド書いて、そっち使うんじゃダメなんか?
なんつーか、
>>448-449 あたりが結論になりそうな話じゃねーかと。
>>503 もちろん自前のクラスメソッド書いて使うことになると思うよ。
実際にJavaプログラム書くときの解決策としては。単に言語の
拡張まで含めて許されるならどういう設計にするのが良いかという思考実験。
あと、free論争とは文脈が違うので一緒にされるのはちと心外だな。
どういう方針でライブラリ設計をするかという話は使い勝手に関わって
くる。もちろん、ここで議論しても実際のJava APIの設計が改善されない
という意味では無益なのはそうだけど。
>>496 理解できない
すべての失敗する引数はnullが返ることで一意に定まるということ?
例外的な状態かどうかはparseInt単体でなく、呼出し側がどうしたいかでも異なるはずだ
デフォルト値が定まる場合と定まらない場合、とか
んで、とりあえず保守的にパーズ失敗を例外として扱うと言う設計でよいと思う
checkedかどうかは微妙なとこだが
単に好き嫌いの問題で、パフォーマンスとか関係ないんでしょ? free論争と大して変わらんと思うが。
>>504 parseInt の使い勝手を改善する事により、Java での開発効率が 10%向上するんだ!
とか考えてるなら 一生懸命考えるのも頷けるんだけど……
ぶっちゃけ瑣末な問題じゃね?
例外を握りつぶすユーティリティメソッド作ればOK。
>>505 > すべての失敗する引数はnullが返ることで一意に定まるということ?
そういう意図で書いた。正確に言うと、外部の状態に依存せずに
入力*のみ*から返り値が決定される、ということ。その逆の
典型的な例としてはIOExceptionを発生させるような関数や
コンストラクタがある。これらの関数は入力だけでなく外部の
状態によって成功したり失敗したりする。
>>507 parseIntだけの問題として考えればぶっちゃけどうでもいいけど、
一般的な問題としてある関数が失敗を返り値で通知するか
例外で通知するか、というのは瑣末な問題じゃないと思う。
ユーティリティメソッド作ればOKってのは、思考停止以外のなにものでもない。
parseInt を改変しようとか考えるのは暇人以外のなにものでもない。
>>511 つきあってた連中も暇人以外のなにものでもない。
改変は、ちゃんと考えてbugparadeにあげるなどすれば、なにがしかの影響は与えられる。 ここで改変について語るのも、そういったヤツのインスピレーションになることもあるだろうし、本人が書き込むこともあるだろう。 無駄ではないよ。
なにがしかの影響って……
>>509 も parseInt に関してはどうでもいいって言ってるんだが。
そんな瑣末な問題に関わらせる事で
JDK開発者のモチベーションを下げたいって事か?
free論争ってさ、やってる当事者は引っ込みがつかなくなってるだけかと思ってたけど
案外、
>>514 みたいに「この議論は無駄ではない」とか思ってる人も居るのかも知れないね。
parseIntの例外が例に挙がって - コードを短く書きたい - 例外で扱う状況とは思えない という2点の争点があると思う。 さらに後者の視点は、 - 例外を扱うべき状況を設計の美しさから考える - 例外を扱うべき状況をException処理の重さから考える という2つの立場がある 俺は、parseIntに例外の記述が出てきてもいいが、重いException処理が いやだなぁ、という点から、こういうのがあればいいんじゃないかと思う。 定義済Exception/ StaticException / 短距離Exception /LightWeightException ? 今、Exception処理が重いのは、Exceptionオブジェクトの生成にある(スタックトレース生成など) つまり、生成処理をなくしてやれば大幅にパフォーマンスは改善するはず。 なので思い切って、stackTraceとかが空っぽのExceptionで すぐ直上のcatch節で捉える決まりで、 さらにThrowの必要があるときは別のExceptionにしなくてはいけないようなもの。 気軽に例外が投げられるようになって、正常系の処理が例外でトリッキーに実装されるように なっちゃうかもしれないけど、こういうのってどうですかね。
>>515 相手にするから調子に乗るんだろ。ほっとけ。
>>516 > 重いException処理がいやだなぁ、という点
いやなだけなのか。
これこれこういう使い方をすると、
(パーズ失敗する)parseInt の呼び出しがボトルネックになって困る、
そして、このような使われ方をする事が多いので標準APIを改善して欲しい、
ってんなら議論の余地もあるけど、それって単なる好き嫌いの問題じゃね?
>>518 包丁一本で、何でも作るのって大変じゃないかな、って話です。
http://sourcepost.sytes.net/sourcepost/sourceview.aspx?source_id=29658 のコード書いて、Exception生成のコストを見てみました。
ウチのマシンでの結果です(かかった時間)
Try[1]:422
Try[2]:10469
Try[3]:78
Try[4]:10875
1つめが、Throwableを継承して、Overrideで色々ぶった切ったクラス。
2つめが、単なるException。
3つめが、単なるObject。
4つめが、NumberFormatException。
Objectのnewに比べて、Exceptionのが大幅に重い処理となっています。
NumberFormatExceptionもそうです。
もし、ファイルを読む処理をするときに、数字でないものも大量に含むフィールドがあれば
Exception処理が時間を食うことが予想されます。
Exceptionの機能を大幅にカットすれば、2桁のオーダーで処理を軽くすることができるわけです。
現在の仕組みを使って、実装するならこうなりますがシステムとしてサポートしてくれても
いいかなぁ、と思ったわけで。
>>519 > 数字でないものも大量に含むフィールドがあれば
普通はフォーマットエラー吐いて終わりでしょ。
〃〃∩ _, ,_ ⊂⌒( `Д´) < ヤダヤダ! parseInt が例外使っちゃヤダ! `ヽ_つ ⊂ノ ジタバタ 〃∩ ⊂⌒( _, ,_) < ぶっちゃけどうでもいいけど、やっぱりヤダヤダ…… `ヽ_つ ⊂ノ ヒック...ヒック... ⊂⌒( _, ,_) `ヽ_つ ⊂ノ zzz…
delphiのStrToIntDefみたいに、数値にできないときのデフォルト値が指定できればかなりいい
>>520 何で?全部読んで例外をチェックしないと駄目かもしれないですよ。
いや、というか例外を使うなとかいう話ではなく、
パフォーマンスを気にして例外を使うべき場面を回避しようとするのは
本末転倒だから、例外を使わなきゃ駄目なときパフォーマンスが
落ちなければそういう誤解、というか誤用がなくなるんじゃないかと。
>>523 「かもしれない」って……
要するに、今現在(パーズ失敗する)parseInt の呼び出しが
ボトルネックになって困ってるわけじゃないんでしょ。
単なる好き嫌いの問題にしか見えないが。
それに、誤用とか誤解とか言われても……
>>509 の理論が いつでもどこでも通用する例外のガイドラインとはとても思えないし、
使い勝手、堅牢性、パフォーマンス、好き嫌いとか色々な要素が絡んでくるから
いつでもどこでも誰にでも通用する例外のガイドラインを作るのは難しいだろうし。
ということは例外はこれまでどおりフィーリングとわずかなドキュメントで判断していくしかないのかね
>>524 >>523 ≠
>>509 です。
parseIntはあくまで例です。
確かにちょっと誤解されそうなレスでした・・・
誤用というのは、Exceptionを使うまいとして
ごちゃごちゃとしたコードになってしまうような状況を指してます。
具体的にカチッとした基準に基づいた「ごちゃごちゃ」ではありませんが。
私は、parseIntに関わらず、Exception処理が軽くなればいいな、という話をしているつもりでした。
>>526 parseInt で例外生成コストが下がると嬉しいか?
それに、parseInt で Exceptionを使うまいとして
ごちゃごちゃとしたコードになるって、どんな状況?
あと、俺は Exception処理が軽くなれば良いって要望に対する返答が
「例外的な状況以外で例外使うな」って話なんだと理解してるんだが。
例外って濫用すれば goto より悲惨なスパゲッティコード書けるしね。
パースの失敗は十分、例外的状況に値すると思うが・・・。 例外処理の乱用がスパゲッティーコード招いてるんじゃなくてそういうコード書いてる自分がスパゲッティー作ってるんだと思う。 アプリケーションかミドルウェア側の設計でどうにかなると思うんだが?
>>527 InterruptExceptionって例外的だと思う?
スレッドのキャンセルを実装しようと思ったら普通に出るけど
>>528 設計っつーか、実装で吸収できるでしょ。
便利なら便利なほうがいい。
何を便利と感じるかは人によって違う、と。 かと言ってなんでも標準APIに入れたら標準APIメンテする人間の負担が増えて バグが増えたり放置されたりといった悪影響も考えられる、と。
NICEのnullableってのは興味深いネタだったけど、 それと一緒に語られたparseIntの仕様には何の興味も湧かなかった。 つーことで、イディオム補完型(保証型)のアノテーションの充実を期待したい。
>>445 終了前のfreeは害っていうのがいるだろ。
そんなものは無い
parseIntで100近くもダベれるお前らに脱帽
>>536 低脳な質問で悪いんだけど
「クリティカルで速度が要求される場面での数値チェックは、例外を使わないのが無難っぽいです。」
って言ってるけど、じゃぁどういう処理が望ましいんだろうな。
俺も、試しに同じ用なプログラムを10000000回処理をぶん回してみたが、
正直それほど有意差は認められなかった。
----以下結果----
StringUtils.isNumeric() : boolean で不正な文字かどうかを検知
1回目 451 ms
2回目 401 ms
Integer.parseInt() : 例外で不正な文字かどうかを検知
1回目 42822 ms
2回目 42771 ms
540 :
デフォルトの名無しさん :2007/09/08(土) 01:03:04
>>539 例外を使ってるバージョンが100倍近く遅いんだが、それは
有意な差じゃないの?
541 :
デフォルトの名無しさん :2007/09/08(土) 01:05:19
あ、もちろん実際にparseIntが使われる局面で1000000万回も 呼ばれることは無いだろうから、そういう意味では例外を使っても いいんだろうけど、有意な差が無いってのは変でないの?ってこと
>>539 ネタにマジレス。
まず 数値チェックに parseInt 使って
> クリティカルで速度が要求される場面
が具体的にどういう場面なのかってのを特定するのが先決。
それをしないで「どういう処理が望ましいか」を考えても時間の無駄。
543 :
デフォルトの名無しさん :2007/09/08(土) 01:07:45
間違った。1000000万回 -> 1000万回
巫女巫女ナース巫女巫女ナース♪
「まだまだ いくよぉ〜」だな
もうちょっとだけ続くのじゃ
多値にしてもnullableにしても、 失敗をnullで表すのはちょっと古いんじゃないかな。 多値なら失敗(false)したら(undef, false)とundefみたいな値を返す方がいいと思う。
551 :
519 :2007/09/08(土) 14:09:14
>>536 ちょっと待て、ほとんど俺が書いたコードじゃねえかそれ。
ちなみに、おれじゃねえぞ。そのblog
>>549 undefがnullとどう違うのかわからん
>>552 お前はそもそもnullは何をモデル化したと考えてるんだ?
本人降臨っす。
>>519 実験用にパクらせていただきましたw
ちなみにStringUtils.isNumeric()は微妙ですね。
Integer.parseIntの高速版とするなら、
Integerとしての要件を満たさなければいけません。
正規表現のパターンを予めキャッシュしておいて、
そのパターンでマッチングするのが一番早いのかな。
NumberUtils#isNumberもあるけどlong型とかでも判定しちゃうな
556 :
519 :2007/09/08(土) 17:34:45
>>554 ああ、バッチでファイル読む時は俺もそうしてるなぁ
どうせ桁数制限とか入る事が多いし
Patternのcompileってホントにコンパイルしてるの?
>>557 コンパイルの意味を、パースして実行用データ作っとくって意味なら、コンパイルしてるんじゃねぇの?
たしかに最適化オプション付きであるとはいってないからね。 Strategyパターンとか駆使してガチガチに最適化されたPatternを返して欲しいとこだ。
Javaの正規表現はDFAでしょ?確か。 DFAはバックトラックしなくていいから、 最適化は高速化ではなく使用メモリのレベル。 遷移テーブルとかその辺。 下手な自前のマッチングコードを書くより早いよ。正規表現は。
>>560 Javaの正規表現はNFA。実装読んでみるべし。
最近の言語に組み込みの正規表現ライブラリの多くはNFA(または
その変種)を採用してる。理由はNFAじゃないと扱いづらい機能
(後方参照など)があるため。
ちなみに各言語における正規表現ライブラリの実装がどのように なっているかの概要を知りたい場合は、詳説正規表現がオススメ
>561 そか。情報サンクスコ
DFAじゃあ不便すぎる。
DFAはNFAから変換できるけど、NFAにしておく意義としては、 NFAのまま何かの機能を追加するってこと? バックトラックする際に後方参照も同時にサポートするためなのか。
>>560 > 下手な自前のマッチングコードを書くより早いよ。正規表現は。
んなわけねーだろ。正規表現遅すぎだ。計測してねーだろ。
ただ、Web アプリとかでせいぜい項目が数百程度の
入力チェックや変換程度なら速度差は計測不能。
>>566 単純な文字パターンの検証なら正規表現の方が遅いだろうけど、
ごく一般的な業務システムプログラマが、
自前で複雑な検証コードを書くよりは速い。
きちんとロジックを書ける人なら速いんだけど。
文脈的に parseInt でパーズ成功/失敗を予め判定するためのコードでしょ。
>>554 が言うように Intergerとしての要件を満たす、
文字列が数字で構成されてるかだけじゃなくて最大値や最小値チェックもするなら
正規表現つかうより自前でやった方が早く書けるんじゃねーの?
最大値や最小値をチェックする時点で、成功/失敗を予め判定するどころか、すでに値が求まってる気がする
> ちなみにStringUtils.isNumeric()は微妙ですね。 > Integer.parseIntの高速版とするなら、 > Integerとしての要件を満たさなければいけません。 だからなぁ…… 最大値/最小値チェックしないなら ほとんどStringUtils.isNumeric()で用足りるんじゃね?
>>565 そういうこと。NFAのままにしておけば、「非正規な」機能である後方参照
やその他もろもろ、比較的容易に追加できる
>>569 例外使わないだけで 100倍程速くなるそうだから、
変換処理が 2回やる事によって 2倍の時間かかっても大した問題じゃないんじゃね?
まぁ、場合によっては大した問題になるかもしれんが。
そんなん問題になってから考えりゃいいっしょ。
正規表現使うほうが100倍速いよ。実装が。
C#の正規表現はグループに名前を付けられるみたいだね
>>574 StringUtils.isNumeric()では足りない部分までIntegerの要件を満たすかチェックするんだったら
正規表現でやるのは面倒くさそうだが。
正規表現のスレでやれよ。ここには関係ないから。
>>576 桁数制限してIntegerの半分以上の範囲捨てるなら簡単だけどな
>>575 正規表現のマッチング処理高速化のためにコンパイルすると、
メモリリークするとかMSDNのドキュメントに書いてあるけどな。
>>579 それドトネト1.1のころの制限じゃない?
なんと言う次世代
次世代試作機・・・。
Javaを拡張するのではなく、OSを拡張するというのはJSRにならんのかね? 例えばjinputをJava標準にするための下地にするためにとか。
そういやjdk7が出来たらOpenJDK6をOpenJDK7ベースで再構築してOpenJDK6をGPL2で配布するらしいな。 将来的には公式バイナリも完全にOpenJDKからビルドするらしい。
7は変な機能増えすぎ もっとシンプルに保てよ
クロージャというか関数導入するならperl見たいな複数戻り値の関数もできるようにしてくれ
多値返せたらいいのにと思うことはよくある
時々、妙に多値希望の人っているよね そういう人はロートルだと思っておk?
多値が返せる言語ってあるの?
Perlしかしらない。 ただstateとvalueみたいな多値が欲しいがために ReultFooみたいなクラスを書くのはなんだかなぁと思うときは多い。
lispまでいくと多値というよりリストか Object[]のシンタックスシュガーで十分なんだけどな C#のstructなんかよりずっと有用
pythonのtupleみたいなの。
まあ、Object[]でもいいけど。
>>591 みたいな
型に名前つけるのが面倒なんだよ。
Pair<A, B> みたいなクラスを作って使いまわすとか
最近は多値返せる言語増えたよ。 javaだとどうせバイトコードレベルでは配列になるんだろうね。
public const<String, Boolean> getResult() { return const { "おkwwww", true }; } こんな感じで死にキーワードを流用できないものか
>>596 それだったら Pair<A, B> で良いじゃん。
普通のGenericsは可変長じゃねー
じゃ、 static <A, B> Pair<A, B> tuple(A a, B b) static <A, B, C> Triple<A, B, C> tuple(A a, B b, C c) static <A, B, C, D> Quadruple<A, B, C, D> tuple(A a, B b, C c, D d) みたいにすれば?
こらこら。Javaにrefやoutはないでしょ。 尤もCommonsLangあたりにはあっていいクラスだとは思うけど
ref や out って、どこの話だ?
多値よりも Ref<T> のほうがまだ使い勝手が良さそうな気がする。
ああ、ファクトリメソッドか、俺の勘違い。
>>601 C#
>>603 いや、レス番の話。
このスレのどこで ref や out の話が出てんのか、と。
俺が
>>601 をクラス定義と勘違いしただけだって。
>>599 にも ref や out があるようには見えんが……
どう勘違いしたのかくらい考えろ馬鹿ちん
なんだ、勘違いか。なら考えても無駄だな。
遅かれ速かれ多値はサポートしてくれるものと思いたい。
JVM系LLで多値サポートしてたら、そっち使えって話になるんじゃね?
var rand = new Random(); int n = rand.nextInt(); みたいな書き方も需要あるから、多値もJSRには上がるとは思う。
>>612 どうだろね?
型推論ですら、変数宣言時の型指定を省くのは Java 的じゃないってんで
G<T> g = new G();
みたいに、初期化子の方のパラメタ型指定を省けるようにしようって
論調の方が強いみたいだけど。今までの
G<T> g = factoryOfG();
みたいな型推論とも一貫性あるってのが良いらしい
G<T> g = new(); みたいなのもどっかで見たな。
極力interfaceで受け取れいうてる今までとの親和性の問題もあるし、
今後の拡張はローカルキーワードで行きたいって思惑もあるから
早い段階でサポートするならそっちかもな
>>615 みたけど流石にそれはないw
varの方はGraphicsEnvironment.getLocalGraphicsEnvironment()とか長すぎるから何とか汁って考えもあったはず
staticじゃなきゃ役にたたねーけどね
メソッド名が長いのはメソッド名のalias導入とかせんと解決せんのでは?
関係ないけど、メソッド名ってたしか長さ制限あったよね
static importはユーティリティメソッドに 沢山依存してる状態じゃないと返って面倒なだけ
名前空間が汚れる。
まあ、結局のところD言語はvarで解決としたみたいだからJavaもそうなるよ。 プロパティ問題も馬鹿なことやらないで、素直にC#風にしたしね。
> プロパティ問題も馬鹿なことやらないで、素直にC#風にした ソースは?
>>590 Common Lisp, Scheme(R5RSから)
(define (foo) (values 1 2))
(set!-values x y (foo))
(set!-values q r (quotient&remainder 10 3))
スタックフレームの返値を格納するスロットが一つ増えるだけだから、
tupleやlistやarrayを箱にする方法より性能がいい。
>スタックフレームの返値を格納するスロットが一つ増えるだけだから、 それやると VM の変更が必要にならんか? > tupleやlistやarrayを箱にする方法より性能がいい。 その辺の性能あげるためにエスケープ解析とか頑張ってるんじゃね?
>>627 VMの変更っつーか、VM仕様の変更じゃね?
多値はいつか実現して欲しいね。
引数は0個以上なのに、結果は0か1に制限されているのは不便。
>>589 他の言語で使うと癖になるから、粘着的なw要望が続くんだと思う。
>>630 なんつーか、Perlとかで初めてsplitの結果を複数の変数に
まとめて入れる表現見たとき便利だと思ったわけで、
こういうのって、返値は配列として扱ってるじゃない。
配列の返値を、各変数に代入するシンタックス糖分があればいいんじゃないかな?
> スタックフレームの返値を格納するスロットが一つ増えるだけ > 配列の返値を、各変数に代入するシンタックス糖分があればいい この二つって全然別の要求なわけで……
>>630 粘着的な要望する奴は口だけ動かして手を動かさんからなぁ……
>>632 多値って一口に言っても、考えてる事が微妙に違うからなぁ……
とりあえず配列でやっておけばいいんじゃないの?
>>635 Object[]を使えばいいじゃんって意味?その場合、複数種類の型を内包する配列を扱うことになるから、
言語的なサポートが欲しいって言ってるんじゃない?
>>633 このスレに要望出しても意味ねえんだけどな
型の問題があるなら、引数のほうに値をうけとる配列として渡すとかね。
>>637 要望だした時点で気持ちよくなってんじゃないかと。
要望を実現する事よりも、気持ちいい事の方が重要なんじゃね?
ゆとりのやつって、直接的な効果がなければ意味ねぇとかよく言うよね。 間接的な効果を想像できないんだよね。
あるあるw ちょっとたとえを出して、それを否定できただけで、全てを否定w
間接的な効果に期待(するだけ)しかできないんだったら > 要望を実現する事よりも、気持ちいい事の方が重要なんじゃね? って評価は正しいような。
はいはい、ここは次世代Javaのスレですよっと
JSR-310 に generics版なるものが出来ていた。
https://jsr-310.dev.java.net/nonav/generics/index.html https://jsr-310.dev.java.net/servlets/ReadMsg?list=dev&msgNo=726 > The basic theory is to define a class for each of the basic concepts -
> Day, Month, Year, Hour, Second etc, and then utilise those in other
> ways. These are TimePart subclasses.
>
> Instead of having a dedicated Seconds class that holds only seconds,
> there is a single TimeAmount class that is generified:
>
> Standard design:
> Seconds s = seconds(3);
> Generics design:
> TimeAmount<Second> s = seconds(3);
>
> Similarly, the field classes such as DayOfMonth are removed with a
> single generified TimeField class:
>
> Standard design:
> DayOfMonth dom = dayOfMonth(3);
> Generics design:
> TimeField<Day, Month> dom = dayOfMonth(3);
個人的に generics版にするなら var dom = dayOfMonth(3); タイプの型推論が欲しいような。
644 :
デフォルトの名無しさん :2007/09/17(月) 20:18:05
generics版は、入力めんどすぎだな
ドキュメント簡潔で理解しやすいしこっちのほうが好きなのは俺だけか それはそうと9月の第三月曜日とか毎月第五土曜日(と、第五土曜日が存在するかチェックする方法)とか どうやって入力するんだろう? この程度のことがいちいち煩雑なのは嫌なんだけど。 曜日指定できそうなCalenderDayのDayOfWeekは引数がなぜかint型だし。 曜日関係はまだまだこれからなのかね?
あれだ。 カレンダー用のXPathみたいなの作って W3C標準にすればいいんじゃね?
CQL
CalendarQueryLanguage
ばばーん
>>647 がただ今鋭意作成中です
>>647 Structured Calendar And Time Markup Language
略してSCATML。それのAPIがSCATMLAPI。
31日や2月29日みたいなTimeFieldやTimeViewって カレンダーが背後にあるクラスに受け入れられるまで、意味のあるカレンダーデータかどうかわかんないわけだよな。 ついでにPeriodを加算するみたいな日付計算もできない。 それなら『カレンダーが背後にあるクラス』をインターフェース化しておいたほうがいいんじゃないかと思ったり。 最初はCalendricalがそうかと思ったんだけどなんか違うっぽいな。
やっぱCalendricalか。何故かTimeViewやTimeFieldに継承されているけどこれは何かの間違いだな。 weekOfMonthが作れるようになったりTimeField同士を結合してTimeViewを作ったりできねえかな。 そしたら今年の9月の第3月曜日とかでも楽に指定できるのに。難しいのかこれは。
TimeAmountで期間データの変換が相互に可能になってるっぽいが Second〜DayはともかくDay〜Foreverのデータはカレンダーないと変換できないような。 いちいちUnsupportedOperationException投げるつもりかいな
こんな感じで書けないかな static import javax.time.Moments.* ... TimeView<Day,Year> leapyearday = build(MonthOfYear(2), dayOfMonth(29)); CarenderYear year = now().currentYear(); List<CalenderDay> lyds = new ArrayList<CalenderDay>(); for(int i = 0; i < 10; i++){ CarenderDay tmp = CalenderDay(year.plus(i), leapyearday); if(!tmp.wasRolledGenerate()) lyds.add(tmp); }
>javax.time.Moments.* パッケージ名だけ見たらとてつもなく抽象的すぎて何に使って良いかわかりづらいな。
TimeUtilsとかの方がいいよな。常識的に考えて。 そのうち変わると思うが
>>654 time.Momentsってそんなにわかりにくいかな?
個人的にクラス名変えるならこんな感じ 時刻系 TimeView>TimeExpression:時刻表現 Calendrical>ScaledTime:カレンダー評価済み時刻表現 TimeField>TimeField:即値時刻表現 期間系 Period>Period:期間 TimeAmount>PeriodField:即値期間 単位系 TimePart>Unit:単位 その他 Moments>TimeUtils:ユーティリティクラス うーん、イマイチ。
>>656 今のクラス名だと高精度の時間取得APIとも取れるし、時系列系APIのフレームワークとも取れる。
名前から想像できる用途が曖昧で冗長といった印象。
名前からすると一見汎用性がありそうだけど、
けど中身はカレンダーAPIの上位API程度の印象も受ける。
そのため、今のカレンダーAPIとの関係も分かりづらい。
そうなると移行や使い分けが難しいかと。
要するに何のために作ったのか分からん、と・・・。
どう見ても完全に置き換えるものとして使うようにできてるだろ。 互換性を意識しないといけない場合以外は全部移行していいようにするんじゃないのか? まだOverViewには入ってないがフォーマッティングやパーシング用のクラスも作るらしいし。
java.util.concurrent.TimeUnit も忘れないであげて
OSGi関係は熱そうだね。 関わってるところ多いし、影響が大きそう
JDK7、機能はすごい魅力的なんだが、リリースが一年以上先か・・・。 堅実なのはいいことだけど、もうちょっと早くならんかなあ。
目玉機能とされてるJSR-277もまだだし Closureに至ってはJSRすらないしなぁ。 これでリリースまでに全部つっこんできたら十分早いと思うが。
業界的にはまだバージョン4が多数だから早い感じもする。
テンプレート(1.5)、クロージャ(1.7)とくれば、最後に来るのは…マクロ!(1.9予定) すべての言語は最後はlispの一部を再実装する事になるのかと思うと、複雑な気分だな。
バージョン4なんかない。
RhinoR4?ライセンスが・・・w
最後はevalだな。
OSGiじゃないのか?
普通にクラスローダを使えばいいだけじゃないの?
クラスローダは難しい・・・ 昔OSGiを使ってたときですらクラスローダで苦労した。 確か、setContextClassLoader辺りとか頻発した。 (OSSのライブラリでこれが設定できないので、プラグインから使うために ソースを書き換える必要が発生したこともあった。) 記憶が薄れてるけどOSGiが無いとさらに倍以上苦労する感じだったと思う。
URLClassLoaderで簡単にJARファイルからクラスを読み込めるから、 プログラム実行中に動的に実行コードを入れ替えるのは簡単だと思うけどな。
>>674 Rubyてw
Javascript使えよ。最初からSEに入ってんだから。
679 :
674 :2007/10/10(水) 13:46:54
助言?ありがとうございます。
>>677 setContextClassLoaderは、Jar内のファイルを読むために
基盤とプラグインのJarのClassLoaderを切り替える
のに使ってたんだったと思いますが、
URLClassLoaderを使うと簡単にできそうな気がします。
>>678 JRubyは速いと言う記事が目に入ったので
条件反射で調べてみたのですが、
JavaScriptでいいですね。Rubyは殆ど知らないし。
680 :
674 :2007/10/10(水) 13:49:23
ちなみにやりたい事は、 UMLのステートチャート図で状態遷移を定義しXMLを生成する (このエディタは自作する) 実行時はXMLに従って、各状態と遷移時の処理を行う。 基本的に、ステートパターンで実現する。 こんな感じの多目的に使えるフレームワーク作り。 と言う感じで、DIコンテナで普通にできそうですね…。 それが一番早いなw
>>677 具体的にどういうコードになるの?
クラスローダーは複雑で言ってる事が見えてこない…
JRubyは本家と比べて早いって意味だ。 まあ、宗教は自由だぜ!
685 :
デフォルトの名無しさん :2007/10/13(土) 23:07:55
そろそろクロージャの仕様決まった?情報まだぁ
ああ、いろいろプロポーズはあるみたいだけどそれが採用されそう。
簡単に読み書きできることが重視されるJavaでは導入が難しいのかも。 クロージャに結びつけた変数に対して破壊的操作を行うプログラムを書いちゃうと、 非常に理解が難しいプログラムになる。と某所で言われていた。
staticメソッドとクロージャを組み合わせて制御文みたいなのを作れるのは面白いと思ったけど フォールスルーしないswitch文みたいなのは無理かね
クロージャ、クロージャ言うけどクロージャ導入しても元々クロージャに書き換えるようなメソッドなら コンパイル時にインライン化されてるだろうから人がクロージャ書く意味ってあるか? JavaScriptも使うからクロージャは大好きだが・・・。
うん、無理っぽいな。できたとしてもがcaseに指定された値が定数かどうかを判別するすべがないから意味ないし
String line;
while ((line = br.readLine()) != null)
みたいなループをfor eachLine(String line : br)みたいには直せそうだ。あんまりいい例じゃないが
>>690 コストが低いからクロージャを使うわけじゃないだろ
いいかげんプリプロセッサとはいわんからせめて#ifdefを導入しろよ
>>690 わかりやすいから使うんじゃないのか? いい加減いちいち無名クラスを宣言するのめんどうになってきたよ。
もう関数型のパラダイム全部入れちゃえばいいじゃんw
どうせこうなるんなら最初からいれちゃえばよかったのに
クロージャが、多重継承のようにうまく使えば有用だが弊害もある機能だったらどうするんだ? Javaはハッカー向け言語ではなく一般向け言語なんだし、彼らが誤用しにくい機能であるか検証しなければならない。
どのように有用? 別に一般向けでないが? 自分で使いこなせればよいだけだし? おまえ、キモイ顔しているんだろうな。
根本的には関数型言語のパラダイムを中途半端に取り入れるのが不味いんだろうな。 だれか、両方を統合するようなアイデアを発明してくれればいいんだが。
700 :
デフォルトの名無しさん :2007/10/14(日) 15:46:57
ところで、
>>696 は一体全体何を主張したかったのだろうか…謎は深まるばかりだ…
>>699 命令型と関数型で、破壊的代入の在る/無しという根本的な前提が異なっているからなぁ。
この大きく異なる前提を乗り越えて上手く使える機構が欲しいね。
不変なオブジェクトを渡すか防衛的コピーして渡すか変更不可能なビューを渡すかすればいい話なんじゃないのか Immutableオブジェクトを作るときと同じじゃん
その違いがなくなると、命令型と関数型の垣根がなくなってしまうし、いくら欲しくても乗り越える事はできなだろう。
こんなん考えてみた。 public static <R, T, throws E> R log(T t, Class<T> clazz, { T => R throws E } block) throws E { T proxy = Proxy.newProxyInstance(t.getClass().getClassLoader(), new Class[]{ clazz }, new InvocationHandler(Object obj, Method method, Object args)){ StringBuilder sb = new StringBuilder(obj + " : " +method + " : "); for(Object o : args){ sb.append(o).append(" , "); } System.out.println(sb); return method.invoke( obj, args ); } System.out.println("Logging Start : " + t ); R r = block.invoke(proxy); System.out.println("Logging End : " + t ); return r; } で、使い方 log(List logList : list, List.class){ //処理 } これでこのブロックの中でだけ特定の変数のメソッド呼び出しのログが取れるはず ちょっといじれば特定のアノテーションのついているメソッドの呼び出しだけに反応するようにもできると思う
そんなに難しく考えなくともecma-262とかScalaがあるじゃないか。 両立は可能だ。
>>705 return method.invoke( obj, args );じゃなくて
return method.invoke( t, args );だわ
そういやobjはプロキシインスタンスだった
>>704 void hoge(){
public int total;
array.each{int item => total += item;}
System.out.println("合計は" + total);
}
とすると
void hoge(){
final int total[] = new int[1];
array.each(new EachRunner(){
public void run(int item){
total[0] += item;
}
}
System.out.println(合計は" + total[0]);
}
と変換されるという案が出てたはず。
>>708 CICEとBGGAごっちゃになってねーか?
>array.each{int item => total += item;} こういう文は見慣れない奴はインデントに困るだろうな。 array.each{ int item => total += item; }
array.each( {int item => total += item;} ); こういうインデントは?
713 :
デフォルトの名無しさん :2007/10/14(日) 21:50:42
>>712 インデントにうるさいおまえと一緒だと疲れる
714 :
デフォルトの名無しさん :2007/10/14(日) 22:33:45
インデントにうるさい言語があったよな。おまえはそれを使ってればいい
ぱいそん
複人数開発でインデントにうるさいのは当たり前だろ。 コーディング規約なんだから。
インデントなんか IDE が勝手にするだろ。 保存時に規約に沿うように自動フォーマット。 気にすんのはエディタ使ってるおっさんだけだ。
改行位置は勝手にやってくれなくないか?
今時のIDEならやってくれなくなくない?
Eclipse使えば自動フォーマットもすごいカスタマイズできるよ。 改行の位置も、(俺はコードの単位を明示的に分けたいから有効にはしないけど) 設定すればできる、と思う。
既にインデントは「する」ものじゃなくて「される」ものだろ。 人間がやるのは、内容の記述だけで、その整形は完全にIDEまかせ。 でも、eclipseできれいにインデントできないって理由で、仮引数へのアノテーションをためらう本末転倒な俺ガイル
細かい事気にしすぎ。
>>721 見やすさのためのインデントはそれでいいんだけど、
Pythonのようなインデント自体が括弧の役割をする言語ではまた別の話だよね。
人の書いたプログラムなど見ないで済むように偉くなれ。
>>723 とは言っても、Pythonでも見やすいインデント、というのはあるわけで。
727 :
デフォルトの名無しさん :2007/10/15(月) 18:40:16
Javaは原則フリースタイル系統の言語だし、インデントはどうでもいいと思うが? コーディング規約が別にあるとかいうならそれに従うまでだし。
Cとかに比べれば相当コーディング規約はしっかりしてると思うが
しっかりしているのは認めるが、しかしそれは言語仕様ではない。 インデントも含めて、コーディング規約も次世代に入れて欲しいと願っているのだろうか。
>シャットダウンフックを使うようになったとかなんとか。 使い方によってはwinでコケまくりだな。 昔よくフォーラムで流れたjavawからシャットダウンフックが起動しないってのが復活するんじゃない?
>>729 そこまですると、やり過ぎではなかろうかと思う。
俺はとりあえず括弧とif, for, whileの書式さえ統一されてればいいと考えてる。
まあもういいんじゃないか。そのコーディングとらやの話は。
20年以上前、ACM SIGPLAN Noticeでも、 インデントの話は禁止になったことがある。
↓↓↓次世代Javaの動向↓↓↓
命名規則とインデントはどうやっても宗教戦争になっちゃうからね。
まあもういいんじゃないか。そのコーディング虎屋の話は。
コーディングとらやの羊羹
とらやの話か。
虎屋の話と聞いて飛んできますた。
740 :
デフォルトの名無しさん :2007/10/17(水) 01:51:43
どうしてこうも人は争いの種を作ってしまうんだろうか
Javaの世界なのにJava以外の前提(CやC++)を持ち出したのが原因。
人は人、自分は自分。偉い人には分からないのです。
誰もC/C++の話はしてないが
744 :
デフォルトの名無しさん :2007/10/17(水) 02:37:55
で、次世代はどーくるわけよ?
俺はJavaの標準コーディング規約には満足してるけどな。 C#の、先頭を大文字にする記法や、プライベートフィールドの先頭にアンダーバーを付ける記法に比べれば、 よっぽどスマートだよ。
Rubyを侮辱するのは止めてください。
ワロタ、Rubyのコーディング規約はそうなってるのかw
規約でなく、言語仕様だね。@で始まるとメンバフィールドになる。
大文字で始まるとimmutable。> Ruby
751 :
デフォルトの名無しさん :2007/10/17(水) 15:10:32
C#はVCと同じくMSのキモサモサが良く出ている言語だと思う
C#で画面を作るとコントロールを描画している過程が見えるからなぁ
C#出たころからゴテゴテとJavaにいろんな機能がつき始めたよな
最近のJavaは美しくないというか崩れてきてる感があるな
genericsとannotation(とprintf)くらいで十分だったのにな 静的型言語でgenericsなしとかバカじゃないかと思ってたが今はいらんのつけすぎ
まぁでも早くC#に追いついて欲しいとは思うし難しいところだ
>>754 具体的にどこ?
>>755 といっても数年後にはクロージャとかenumとか使うようになるよ。
今だに使われるFORTRAN77は不滅だよ
>>754 なんとなくだがいいたいことはわかる。初期の頃の簡潔さは失われつつあるからな。
それでも、頻繁にクロージャ用無名クラスを作ってるようなら、クロージャを導入する意味はあると思う。
クロージャは必須だろ。 プロパティは辞めて欲しいが。
プロパティを作ってほしいとも思うが、セッターゲッターと互換性のないプロパティ作られるのも困る
セッターゲッターと互換性あるプロパティって何???
obj.property = value; が obj.setProperty(value); に、 value = obj.property; が value = obj.getProperty(); に、 展開されるような構文糖プロパティの事じゃね?
バージョンアップする限りJavaは肥大し続ける。 Java自体が陳腐化するか、 言語として互換性を捨て新たな言語に生まれかわらないとな。
どれだけ互換性捨てるかにもよるけど、新たな言語に生まれ変わらせるぐらいなら Javaを捨てて、JVM用の新言語を立ち上げた方が既存のプログラムに影響少ないし 過去のしがらみ捨ててドラスティックに変えられるしで、良いと思うがね。
それはまだとっておこう。
新たな言語になったって、 バージョンアップのたびに肥大化し続けるのは変わらんだろうし、 時間が経つにつれ陳腐化するのは止められないだろうし。
Javaのクロージャで拘束変数の扱いはどうするつもりだろ? 楽なのは匿名クラスと同じでstatic finalな定数だけにするか、 拘束変数は必ずコピーにする方法なのだけど。
BGGA だと、受け取り側が java.lang.RestrictedFunction しかうけとらねーよと明示しておけば、 final がついてない局所変数使ってるクロージャリテラルは変換できなくてコンパイルエラーになる とか、そーゆー制限も考えられてるみたいだけど。
レキシカルクロージャがいいな。 javaはVMも言語もクラスファイル仕様も互換性確保は相当なものだが、ライブラリ詰め込みすぎが悪い。 #rubyは言語界のモルモン教
どの辺りがモルモンしてる?
製作者がモルモン教徒
というかruby信者がモルモン信者と同じ臭いがする。
Macユーザーで、はてなユーザーで、rubyユーザーでケータイがMEDIA SKINあたりだったら、 もう半径5mには入りたくない感じ。 聞きたくもない長所の押し売りをえんえんと聞かされそう。
776 :
デフォルトの名無しさん :2007/10/18(木) 20:49:07
それ、なんて宗教?
>>775 プログラマーはあんましMAC使わないとおもうんだが。
MacもWindowsも使う。 どれかしか使わないというのが、言語論争と同じく不毛な流れかな? javaもrubyもperlもpythonも適材適所に使えばいいじゃない
rubyはperlとpythonのパラダイムに影響受けてるからそっちの分野に食い込んでくるんだよ無理やり。 rubyの影響を受けたGroovyは言語が止まってるから問題ないが。 結局、JRubyとGroovyとJythonはScripting APIに組み込まれるのかね? 要らん気がする・・・。
JavaFXは偉大
なにが?
手元にあればmac使いたけどな。 だけどwinの方が安いからmac使う機会がないだけ。
普通にlinux使えよ
linuxは普通なのか?
MacメインでWindowsも使うJava好きのモルモン信者ですが、何か?
>>777 おいおい、Macはちょっとバージョンアップが遅いとは言え、
JREがプレインストールだし、JDKもインストールCDに付いているぞ。
Javaアプリを配布する環境としては優秀なのだ。
まだ、↓だけどな。
$ java -version
java version "1.5.0_07"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_07-164)
Java HotSpot(TM) Client VM (build 1.5.0_07-87, mixed mode, sharing)
アホ。釣られんな。
789 :
デフォルトの名無しさん :2007/10/19(金) 02:05:16
>>777 君、アタマ悪イッショ。
オンモ二デテミ。
君ノ馬鹿サガ…
アホ。釣られんな。
モルモンっていうと家畜の内臓がどうしても思い浮かぶ
792 :
デフォルトの名無しさん :2007/10/19(金) 23:47:33
未だに1.6が出てなかったのか…>Mac
酷い話でしょ?コミュニティに任せた方がいいような気がするよ。
MacでJavaってそんなに使われてる?
V2Cを動かすのに必須。 これが無くなるとMacを捨てなくては・・・とまでいう重要ソフト。
fx+bbs2chreaderでいいじゃない
icedteaだっけ?フリー版のないのか
java6のSwingは、結構Windowsのクライアントサイドでも戦える形になってきたかなと思う。 5と6での差異なんて、数ドット単位のデザインの違いが主なんだけど、その数ドットの差が大きい。 あとはスプリットボタン、シェブロンあたりのウィジェットが追加されればなー。
>>798 > The JVM also runs in its own OS process,
> so if the JVM crashes it doesn’t affect the browser.
へー、便利じゃんって、オイッ!
このJVMは独自のプロセスでも動くので、 JVMがクラッシュしたとしてもブラウザには影響を与えません。 そんなに変か?
今まで、さんざんブラウザを巻き沿いにしてきたみたいだよなw
巻き添えっていうか、一気に重くなってその負荷で落ちたように見えることは多かったけど。 ブラウザとは別のプロセスで実行できるってセキュリティ的に大丈夫なんだろうか。 ただでさえVistaでUACとかいうややこしいシステムをとってるのに。
↑大丈夫だからやったんじゃないかね
>>803 Javaアプレットは、なぜネットワークからダウンロードしてきたコードを実行しても
安全なのか知りたければ、「バイトコードベリファイア」「サンドボックスシステム」
について調べてみるといい。
そうすれば、別プロセスで動作させても安全な理由がわかる。
>>805 Vistaで導入された鬱陶しい機能の一つに、UACとかいうのがある。
これは、セキュリティ対策のために、ブラウザの権限を制限するもんだ。
だから、ブラウザ上から呼び出されたプロセスには、なにかと制限がかかる可能性がある。
特に、ローカルのリソースにアクセスするようなのは、実行できないかもしれない。
まあ、
>>804 のいうようにわかってやってるはずだから、対策がないわけがないんだけどね。
>>807 >Vistaで導入された鬱陶しい機能の一つに、UACとかいうのがある。
>これは、セキュリティ対策のために、ブラウザの権限を制限するもんだ。
それはIE7の「保護モード」であって、UACではない。
>>808 そうだった。
今思い浮かんだんだが、もしかして保護モードを回避するために別プロセスに分けたのか?
だとしたら、俺が言ってたことはまるで逆だったのか。
810 :
デフォルトの名無しさん :2007/10/21(日) 19:18:12
↑だからここは君の浅知恵を披露する場ではないようだが
なんで次世代Javaスレに猿が混じっているのか不思議
↑猿の脳みそを持つ男
↓ご立派な人登場。
呼んだ?
イヤ待て、もっと大変な事言ってないか? オレには、MacOSXにZonesが載るって書いてるようにも読めるぞ。 流れ的にそう明言してないが・・・
スレ違いだが、 Solaris:BSD:Linux≒Zones:Jail:Vserver
819 :
デフォルトの名無しさん :2007/10/22(月) 22:37:44
z
sunはJava SEの後につく数字をマイナーバージョンとリンクさせているように見えるけど、 メジャーバージョンが上がる時にはどうするつもりなんだろう。 Java 2 SEとかにするのかな
>>820 予想
java version "1.6.0_0x"
java version "1.7.0_0x"
java version "1.8.0_0x"
java version "1.9.0_0x"
・・・わくわく
java version "1.10.0_0x"
・・・なんじゃそりゃ〜
>>820 Java 2 Platform, Standar Editionとかぶりすぎ
>>821 そういうマイナーバージョンの桁上がりの問題じゃないからw
メジャーバージョンが上がるときの対策 ・Javaのあとに新しいバージョンだとわかるようなコード・名前・別名をつける ・Java自体の名前がかわる ・何事もなかったかのようにバージョン表記統一
>>821 前にlinuxのソフトウェアでndiswrapperっていうのを使ってたんだが、
使用してるバージョンが1.7で、最新のバージョンが1.21だったのを1.2.1だと勘違いして
なんでバージョンダウンしてるのかすごい悩んだことがある。
SunOSとSolarisは、 Solaris 7から、SunOS 5.X=Solaris Xって関係で、 5ってのはkernelのメジャー番号。Xは共通の連番。 だからこれからJava/JDKも7, 8, 9, 10, 11と連番が上がっていって、 JVMの実装が大きく変わった時に、 連番とは関係なくJDKのメジャー番号が1→2と予想。
クロージャのプロトタイプ発表とかどうとかは、どうだった?
クラス注釈に@RAIIとかサポートされたらいいな。 必ずスタックに乗るように解釈させて、スコープ抜けると必ずfinalizeされる。 メンバ内も含めてthisが代入または引数にされた場合は、コンパイルエラーとするとか。
7は5よりもいろいろと、てこもりで楽しみだな。
>>828 C言語のregisterとかと同じで、最初のうちは最適化義務はなく将来対応するとか言っておいて、
そのうち最適化が進化したので必要ないから無視するよってなるような気もする。
なんかもうJavaはIDE前提の言語として突き進んでほしいなあ。 言語仕様もとにかくIDEでサポートしやすい方向で。
>>828 finalizeされるタイミングを陽に指定できることは除いて、
今やescape解析の仕事です。
そんな時代遅れなものが入るわけがない。
>>831 馬鹿丸出し。
そんなの知ってるw その解釈こそ馬鹿丸出しじゃん。 IDEで出来ることは、IDEでやればいいんだから。 言語を糞仕様にする必要はない。
>>194 Jakarta JJarのことか?
MavenにもJJarは同梱されているんだが
ここにはエスケープ解析を研究してる奴いるから聞きたいことあれば聞いとけ。
Googleで検索すればすぐでてくる内容しか書かれてないのに研究だと?
クロージャの演算子 => , {int=>int}は他のなかったのかな?もう決定ぽいけど。 {int x=>x+1}とかぱっと見どうかと
lambda見なれてしまったから、他はなんでも違和感がある。 だからどうでもいい感じ。lambdaキーワードはあり得ないし。 Haskellみたいに\ってのもどうかと思うしさ。
>>839 1.5がでるときにGenerics見て、こんなのJavaじゃねぇって書き込みがいくつかあったよな
今、そんなこと言ってる奴いないだろう。慣れればそれが普通に見えてくるはず
プロパティのアクセス演算子は c->p=x x=c->p で決定なのか?
結局Javaっていっても現状Web用途がメインなんだから Servlet&JSPのほうがもっと良くなってほしい。 JSPがダメすぎてどうにもならない。
JSP、JSF、VelocityServlet、Wicket・・・好きなもの使え。
>>844 ここはSEのスレなんだよ。
そんな呆けだから(ry
>>846 ていうか標準のView仕様くらいもうSEに含めろっちゅう話やねん。
JSPにしても単なる条件分岐記述するのに別ライブラリダウンロードさせるってどないやねんって話やねん。
スクリプティングサポートする暇あったらテンプレートエンジンサポートしたほうが人気出るねん。
スクリプトレットの存在も知らなければ テンプレートエンジンはスクリプトエンジンのひとつに過ぎないという実態も知らないのか? テンプレートエンジンなんぞとっくにサポートされてるっての
>>849 おい、JSP2.1の時代にスクリプトレット使ってんのかよ・・・
お前が使いたいだけだろ、お前って御託だけで使い分けもできないのな
Java系の開発者って世の中のニーズが読めないやつばっかだよな・・・
典型的なかまってちゃんだな、JCPのこと調べたらJavaは諦めてPHPでもやっとけ
どっちにしろDerbyなんかSEに組み込むより、Viewのほうが先だろ・・・常識的に考えて・・・
かまってちゃんとわがままちゃんって同じ匂いがするんだよな。2chの経験上
>>848 頭悪〜
Web制作板に行きなよ。
このスレはまだ早いよ。
>>854 ViewならSwingがあるじゃねぇか。
お前らこれ以上XSLTさんを泣かすな 名実ともにSEのViewだろ
名実が伴っているなら泣くこともないだろうw
D言語にある機能だってのは知ってるけど、この機能の初出って何だろうね
そう書くことで綺麗に気持ちよく書けるものはどれくらいあるのかね
>>863 java.util.List みたいな published interface にメソッド追加するのが主な目的ってのはいわずもがなだけど。
他の使い道ってなんかあるかね?
例えばこんな感じのがあれば、それなりに便利だと思うよ。 int UnicodeUtils.getCodePointCount(Charsequence src, int off, int len); int UnicodeUtils.getCodePointCount(char[] src, int off, int len); int UnicodeUtils.getCodePointAt(Charsequence src, int index); int UnicodeUtils.getCodePointAt(char[] src, int index);
>>865 char[] はともかくとして、String も StringBuilder も StringBuffer も、
codePointCount や codePointAt を持ってるはずだぞ。
CharSequence で持ってないのって java.nio.CharBuffer ぐらいか?
こんなダサイの入れるくらいなら、 Haskellのtype classとかC++のconceptみたいな generic programming支援の機構を入れて欲しいわ。
interfaceで扱う事に意味があるんじゃないの。例えばC#だけど List<E>.ForEach(delegate(E)) みたいなのがあるけど、IList<E>じゃ使えなくて困惑したことがある。 重複したときはエラーかオリジナルのオーバーロードどちらを優先するんだろう。 interfaceのままでもリフレクションで解決とかもいいけど、それは遅くなるか。
>>868 それは published interface の話じゃなくて?
そーいや、C# は 3.0 で extension method 入るんじゃなかったか?
static importはIDEと相性が悪い印象があってあまり使われてないけど これが導入されたらIDEに第一引数でサーチいかせる感じで使われ出すんじゃないかな。
やっぱpublished interfaceにメソッド追加(したように見せかける)以外に使い道ないんじゃ?
内部構造はまったくいじれないしな
Javaってプライドとかないの?
Javaのプライドって何のプライドよ?
言語としてのプライド
なんかアホの子が出現してるな
>>861 > これって名前空間汚れるような。
その点、リンク張られているExpanderの方がまだいいね。
>>875 Java使いが集まって、大晦日に闘う。
Gosling緊急参戦! とかなら見に行く。
>>879 冗談としては面白くないけど
本当にやったら面白そうだな、それ。
>>879 何で戦うんだよwwwコーディングかwww
JavaOne Tokyoのときみたいに、プロレス
そうね、ここはコーディングでといいたいところを ぐっとこらえて、総合ルールでやってもらった方が 盛り上がるね!
じゃあ多重継承もfriendも属性も継続もありでいいんだな。
属性って? annotation じゃダメなん?
>>880 Goslingが和太鼓たたきながら、
「本物のプログラマでてこいや!」
本物のプログラマはPascalを使わない―――Javaも使わない。きっと。
本物のプログラマだなんてガキみたいなこと言ってるうちは、 その本物のプログラマなるものにはなれんだろうな
何を使うんだろう。やっぱりLisp?
>>890 本物のプログラマネタくらいは知っておこうぜ、本物のプログラマならw
ググればすぐに出てくるよ
ホンモノのプログラマになる極意は、ホンモノの真似をしないことである
ふるいネタだな。キッシュを食わないとかいうヤツだっけ。
ホンモノのプログラマはデスマーチで2chに書く暇などありません。 偽者の人生が楽しい
業務が設計中心になってからはデスマはないなぁ。 設計工程に現役プログラマが携わらないことの危険性が 頭でもなく心でもなく体で理解したw
よほどヘボいSEとやってたんだな。
プログラマーは設計書が全然上がってこねーぞと文句を言っているはず デスマの原因作ってるのはお前だw
↑こいつ文盲?
うん
宣言側でやっても interface A { void method() import static SomeClass.method; } interface B { void method() import static AnotherClass.method; } class C implements A, B { } があって、 C c = new C(); c.method(); したとき、どっちのメソッド呼ぶかって曖昧さが残るわな。
曖昧な場合はコンパイルエラーになるだけ
>>903 いや、use-site でも declaration-site でも曖昧なケースが出てくるのは同じじゃねーかって話。
LINQのような糖構文がほしい・・・ やっぱいらない
ハイバーネートだかなんだかのO/R マッピング使ったらええんとちゃう? 俺もLINQはいらんけど、varはほしいな。
>>906 今更だが、糖衣構文を糖構文とは略しないでしょ。
syntax sugarを糖構文と訳すのはアリだと思うが。
>>910 マジすか・・・。略語じゃなくて訳の違いだったわけか。
「糖衣構文」 と 「構文糖」 は聞いたことあるけど 「糖構文」 はあまりないな。
>>910 うーん、それはやめた方がいいと思う。
糖衣構文がうざければ、シンタックス・シュガーでいいし。
>>908 JDK6u3と比べて、アプリケーションのメモリ消費量が減っているような気がする。
>>905 あれって use-site でというか、static import で use-site extension methods やると
既存の static import 使ってるコードで問題出るかもって話じゃないの?
>>916 ナルホド。開発者の使ってる環境が知りたいな。GUI無しかな?
Teamwareとコマンドラインの体系は似てるし、CUIベースでかな?
それとも開発者は、Netbeans使ってるから最近出てきたMercurialのプラグイン使ってる?
"Exception1 | Exception2" って型ができるのかとおもうと、おらわくわくして(ry 型とか安全なのかな。とりあえず実現できなくはないと思うけど。
基本的には「複数の catch節をくっつける」ってアイデアで 型安全どーするの? とかの問題は先送りされてるんじゃね? Exception1 | Exception2 って型も共通の親クラスのメソッドしか 呼べないんじゃないかと思ってる。下手にcatch節以外でも Exception1 | Exception2って型が使いたいとか騒ぐと、 仕様考える連中が面倒になってポシャるんじゃないかなとか思ったり思わなかったり。 っつーか、Rethrown はその辺が面倒になったから出てきたアイデアなんじゃ?
catch(Exception1 | Exception2 ex) { ex.Foo(); } から catch(Exception1 ex) { ex.Foo(); } catch(Exception2 ex) { ex.Foo(); } は機械的に作れるから、まあ何とかなるんじゃない?
複数の例外型について handler_pc の位置を共通にするようにするんかと思ってた。 VM仕様で handler_pc はユニークにしろ、とかって制約ついてたっけ?
ConcurrentHashMap<CustomKey<Exception, Handler>, Executor<Runnable>> とかすればいいと思うよ。
おれクロージャいらねぇ派だがどうせ新機能入れるなら個人的には多値返却かAda風の型定義がほしいかな。
皆でScalaへGO!
そーいや、ム板にscalaスレあったっけ?
C#3.0さわってみたが進化してるなあ。 lambda関数が int a => return a + 10 みたいな感じでインラインに書けたりと、 スクリプト言語ラブな人は嬉しい機能がどっさり。 思わず浮気しそうになる・・・。
>>929 > lambda関数が int a => return a + 10 みたいな感じでインラインに書けたりと、
これreturn要らないんじゃ?
BGGAのクロージャの構文、セミコロンがついたりつかなかったりで
局所リターン文だったり単なる式文だったりっつーのはバグの原因になりそうな。
ラムダ式っぽく使うならreturn書きたくないってのもわかるんだけど……
その点、C#の構文はよくできてると思う。
その程度ならecma262で十分。
>>930 それだけじゃなくて、C#3.0のラムダ式で int a みたいにパラメタ型を明示する場合はパラメータリストに括弧が必要なはず。
933 :
デフォルトの名無しさん :2007/12/30(日) 03:15:35
>>926 それだとクラスを返しても全く同じだけど、どう違いをみせたいわけ?
>>933 戻り値のためにクラスをわざわざ定義するのがめんどいんじゃね?
シンタックスシュガーとしてやってくれると、ちょっと便利かもね、と。
>>928 ちょっと前に探したときは見当たらなかった。
>>934 同じくタプルとかも賛成なんだけど、どうもそういうのはJavaぽくないみたい。
面倒だしとかじゃ「違う言語で」とかだから、だから「どう違いをみせたいわけ?」って聞いてる。
少なくとも君の要求ていどならわざわざ文法とか複雑にしなくとも、
Object[] func()
でこと足りるしw
多値用のGenericsを標準で用意してくれると嬉しいんだけどね。 こっちで用意してもいいけど、それ専用のjarってのもちょっとね。
前も出たなこの話題w 俺にいわせりゃ多値引数はあるのに多値返却がないのはおかしいんだけどな クロージャとかの方が違う言語でやってほしいよ。javaがシンプルさとかけ離れていく
クロージャって匿名クラスで作るんだろ? クロージャの生成側のローカル変数は、その時点で固定になるのかな?
>>940 そのやりかたが2つくらい出てきてどっちにするかまだ決まってなかったんじゃなかったっけ?
あら、割と近めにあったのね。すまんこつ。
可変長引数を多値引数って言うのは初めてみたかも。
可変長引数のこと言ってたのか。
たぶん。 いや、はじめてみた言葉だから間違ってるかも知らんけど。
すまん今作った>多値引数 とっさに出てこなかったんだよ
オーバーロードのことじゃなくて?
単純に引数を複数渡せるってだけの話だろ
>>949 が正解だろ。
単純に引数(インプット)には複数の値を渡せるのに、
返値(アウトプット)が一つしか返せないのはおかしい、という話。
そもそも、大元の関数型言語が(厳密には違うが)一入力一出力だったのを、
手続き型言語で使いやすいよう多入力にしたのが原因。
OOPの思想が確立したときに多出力にすればよかったのだが、折しもCベースのC++が主流だったのでそのまま。
またCPUの最適化の関係もあり、ずるずるとJava, C#・・・と今に至る。
もしJavaで多出力をサポートするなら、
rubyやpythonの返値の扱い(タプル関連)で、シンタックスシュガーが複雑になりすぎてる感があるので、(特にruby)
Javaが簡潔かつわかりやすい書式(もしくはタプルに代わる概念)を策定して欲しい、と思う。
単純に引数1個に制限すれば、対称になって
>>950 の気は済むってこと?
もはや return は継続の呼び出しで良くね?
>Javaが簡潔かつわかりやすい書式(もしくはタプルに代わる概念)を策定して欲しい、と思う。
結局それかよ。それを策定するのが難しいからないんだろ!
おまえが考えて提案したらどうだ?当然英語はできるよな?
面倒って言うのが理由なら、あまり期待しないほうがいいじゃないか。
それと
>>950 はツッコミどころが多すぎだけど、
JavaはC++辺りと違って理念が実稼動重視(現実的)だから。
>>951 もいいと思うよ。でも
Object[] func(Object[]);
で十分。JDK1.0 OK
有用であるが、使うかどうかは任意。
>>953 書いて思ったけど、
というか普通にポインタ(C, C++)理解してるかってことに行き着くと思うよ。
本質的には、ポインタとかデータ構造とかそういうところ。
ポインタ関係ないな。 参照でいい。
It is assumed that many value return was realized by JAVA and on earth wants to do what?
新年早々とんだ釣りだw
そうするに偉そうなこといってる
>>953 はようやくポインタを理解したガキだってこと?
Object[]で戻していいが型の安全を言語側で保証できたらいいねって話なんだが
959 :
デフォルトの名無しさん :2008/01/02(水) 19:33:42
960 :
デフォルトの名無しさん :2008/01/02(水) 19:42:24
また宗教ですか?
962 :
958 :2008/01/02(水) 19:59:22
おいおいなんだこれ('A`) >JavaはC++辺りと違って理念が実稼動重視(現実的)だから。 >というか普通にポインタ(C, C++)理解してるかってことに行き着くと思うよ。 こういうのはスルーして俺に総ツッコミかよw
963 :
デフォルトの名無しさん :2008/01/02(水) 20:00:23
ストールマンのお友達ですか?
953 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/02(水) 13:56:26
>Javaが簡潔かつわかりやすい書式(もしくはタプルに代わる概念)を策定して欲しい、と思う。
結局それかよ。それを策定するのが難しいからないんだろ!
おまえが考えて提案したらどうだ?当然英語はできるよな?
961 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/02(水) 19:49:45
>>958 当然英語はできるよな?
964 名前:デフォルトの名無しさん[sage] 投稿日:2008/01/02(水) 20:03:50
>>958 >>962 英語は当然できるんですか?
>>953 が何を言ってるのかはさっぱりわからんが、他人の英語の能力に並々ならぬ関心があることだけはわかった。
>>953 > それと
>>950 はツッコミどころが多すぎだけど、
> JavaはC++辺りと違って理念が実稼動重視(現実的)だから。
C言語のソースがそのままコンパイルできるC++を差し置いてJavaのどこが”実稼働重視(現実的)”なんだww
もしかしてC++をまったくさわったことがないんだろうか?
それと
>>950 のツッコミどころとやらを説明よろしくww
967 :
958 :2008/01/02(水) 23:23:15
他でやれよもう。
苦労じゃのう
970 :
デフォルトの名無しさん :2008/01/03(木) 06:43:34
ストールマンじゃないです。 ゴズリンと友達です。
英語で会話できるようになるのは、日本人の夢なのです! ジーニアス、ジーニアス!
972 :
デフォルトの名無しさん :2008/01/03(木) 06:51:34
>>966 を読んでみても、相当痛いやつだなということだけは分かるw
30台は間違えないねw
この様子ならすぐ1000行くけど?どうする?やっちゃう?
馬鹿の方が声がでかいのは、ゴミ溜めではよくあること。
それをどうするかが問題なんじゃないか?
976 :
デフォルトの名無しさん :2008/01/03(木) 10:55:17
また宗教ですか?
英語は出来て当然です。
978 :
958 :2008/01/03(木) 12:24:52
ごめんなさい勝ち目はありませんでした。 今目を覚ましました。
「間違いない」を「間違えない」と書くやつがまだいるのか どこの方言だ?
英語は出来て当然です。
今目ってなに?
技術書の英語は読みやすいからな 詩を書けと言うと無理だが
英語って読むだけじゃなくて書けないとダメなんじゃないか?おじさん英語じゃあるまいしw
>>984 Full in care, car was to became miss note.
This if a pen.
>>986 To be,To be,Ten made To be
エリート狂想曲ナツカシス
てst
あれで夢精を覚えた