1 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 23:00:35 ] プログラミング言語 D (D Programming Language) について語るスレッドです。 過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語) ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語) ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか) ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
159 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:25:31 ] >>157 たぶん、こうだと思うよ。 const(int*) p = &a; //p「int*」が書き換え禁止 int x = *p; //○ *p = 10; //○ p++; //× const(int)* p = &a; //pの指し示す先の「int」が書き換え禁止 int x = *p; //○ *p = 10; //× p++; //○ final const int* p = &a; //p「int*」書き換え禁止、かつpは初期化後は固定。(冗長?) int x = *p; //○ *p = 10; //○ p++; //× final const(int)* p = &a; //pの指し示す先の「int」が書き換え禁止、かつpは初期化後は固定。 int x = *p; //○ *p = 10; //× p++; //×
160 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:47:53 ] >>159 なるほど ところでいちいち.dupするの面倒なので mutable to immutable(const/invariant) : deep copy immutable to immutable(const/invariant) : shallow copy となるのはどうだろう?
161 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:50:00 ] >>159 const(int*) は const(const(int)*) と同じ。 const Type var; は final const(Type) var; と同じ。 ただ、2.008ではfinal記憶クラスが正しく機能していない。
162 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 18:34:50 ] 記憶クラス周りは結構複雑だなぁ。 invariantメンバ関数は、コンパイル時に定数に置き換えられそうだな。 使いこなせれば強力だけど、そこまでが大変だぁ。
163 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:01:19 ] ん?invariant void foo()で実現できる事って何があるんだろう?
164 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:05:15 ] >>161 なるほど。 www.kmonos.net/alang/d/final-const-invariant.html も読み直して理解できたかも。 「const(int)* p」は「(const(int))* p」って意味で、pの指す先は書き換え不可だけど、p自体はconstじゃなくて書き換え可能。 「const(int*) p」は「const(const(int)*) p」って意味で、pも書き換え不可になる訳か。 constの推移性って便利だけど、理解するまでは複雑だな。どこからconstなのか少しわかりにくい。 特に「const int* p」はどこにconstがかかるのか分かりにくいね。
165 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:17:22 ] >>162-163 を見て気になったけど、 >invariant メンバ関数では、 this参照経由で参照される全てのデータがinvariantであることが保証されます。 struct S { int x; invariant void foo() { x = 4; // エラー。x は invariant this.x = 4; // エラー。x は invariant } } これはつまりS.xはコンパイル時決定変数? そうなるとSのメンバ変数はすべてコンパイル時決定って意味になるけど、それは使い道がない気がする...
166 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:19:43 ] >>165 invariantでないメンバ関数を追加すればいいじゃない。
167 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:23:00 ] const int* p; って宣言で、constはストレージクラスのはずなのに、 typeof(const int*) が、typeof(const(int*)) と同じように働くのが気持ち悪い。
168 名前:165 mailto:sage [2007/12/01(土) 19:34:50 ] えーと、 たとえばSを struct S{ int x; int y; invariant void foo(){ x = 4; //エラー、xはinvariant } void var(){ x = 4; //これはNG? y = 5; //これはOK? } } とした場合どうなる? xはfooでinvariantとして扱われているから、varで書き換えたら怒らるんじゃないかと心配してるんだけど。 で、yはfooからは参照されてないからvarからは普通に書き換え可能? テストすれば分かることを聞いてすまん。時間あったらテストするんだけど。
169 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:41:32 ] 時間あるじゃんw
170 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 19:43:55 ] >>168 invariantメンバ関数はinvariantな型に対してしか呼び出せないから、 fooを呼び出せる場合は、varは呼び出せない。
171 名前:147 mailto:sage [2007/12/01(土) 19:49:48 ] >>158 countについては、俺もconstでいいと思う。
172 名前:165 mailto:sage [2007/12/01(土) 19:54:15 ] >>170 "invariantな型に対してしか呼び出せない"というのはどういうこと? invariant void foo()があることでSのメンバ変数がすべてinvariantになるという認識は間違いでしょうか。
173 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 20:02:37 ] static関数はインスタンスのメンバ変数にアクセスできないのと同じ理屈を書いてるだけでしょ。 invariantはコンパイル時に解決できなければならないってのを意識すれば分かりやすいかな。
174 名前:165 mailto:sage [2007/12/01(土) 20:09:08 ] >>173 つまり S s1; invariant S s2; s1.foo(); //呼び出せない s2.foo(); //呼び出せる ということ?これなら納得できる。
175 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 20:15:25 ] 俺の説明が悪かったのかな?時間あるんだから、テストしようね。
176 名前:165 mailto:sage [2007/12/01(土) 20:18:42 ] そうですね。すみません。 本当は今パソコンつけてる暇無い時期なんですけどね。これだけインターネットしてたら確かに同じだな;
177 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 20:33:37 ] つまり、 invariant変数はコンパイル時に決定され、ROMに配置される可能性があり、ポインタをとってはならない invariant型の変数は実行時に決定でき、書き換えられることはないと保障される invariantメンバ関数はコンパイル時に解決できる const変数は実行時に決定できる const型の変数は実行時に決定でき、書き換えてはならない constメンバ関数は実行時に解決される static変数はコンパイル時に決定され、実行時に変更することができ、スコープによらずデータが保持される こうか?
178 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:06:23 ] >>177 > invariantメンバ関数はコンパイル時に解決できる これが仕様呼んでる限りだとよくわからん。 普通にモジュールスコープにある関数とか呼べるし
179 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:26:59 ] invariantメンバ関数から参照できるのは、invariantなメンバのみってことでは。
180 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:29:38 ] いかん。誤解をまねく。 invariantメンバ関数から参照できるメンバは、invariantのみ。 のほうが正しい。
181 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:36:46 ] invariantメンバ関数からthisポインタを通じて参照されるオブジェクトはinvariantと仮定される、 じゃないか?
182 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:44:55 ] このエラーはいったい? test.d(3): statement expected to be { }, not int struct S { int x; invariant int y; }
183 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 21:46:12 ] ここらへん明日整理してみるか。
184 名前:182 mailto:sage [2007/12/01(土) 22:02:29 ] 公式サイトの方しかDL2.0のコンパイラはないのね
185 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 01:32:52 ] ttp://d.hatena.ne.jp/haru-s/20070622/1182484497
186 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:18:43 ] いまさらなんだけど alias char[] string;で invariant(string)ってした方がきもちよくねconst stringとか。 今char[]とstringを使い分けなきゃならんのがギモヂワルイ
187 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 03:33:33 ] >>186 確かに気持ち悪い でも invariant(string) s; が invariant(char[]) s; になって 今の invariant(char)[] じゃなくなるから意味が変わっちゃうね とはいえ他の手はこれくらいしかないんじゃなかろうか alias char[] string; alias const(char)[] cstring; alias invariant(char)[] istring;
188 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 04:01:34 ] alias invariant(char) ichar; とかをたくさんつくればいいのかな!
189 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 08:23:05 ] 中途半端にstringなんてaliasを標準に入れるから面倒になった悪寒 いっそstring使わない方向でいこうかな・・・
190 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 10:04:36 ] ↑で final const invariant いろいろ議論していた方々ありがとうございます おいらも理解がふかまりました
191 名前:デフォルトの名無しさん [2007/12/02(日) 10:29:21 ] >>185 なるほど、メンバ関数になるとほんと複雑だな。
192 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 23:07:48 ] >>185 の >mutable/const のメンバ関数あるいはオブジェクトを経由すると invariant メンバ関数を呼び出せない これはなんでなんだぜ?
193 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 23:36:08 ] invariant メンバ関数から const メンバ関数を呼び出せないのはわかるが、 mutable から const や invariant を呼び出せないのはよく分からん。 そもそも変数なら const は invariant に昇格できるんじゃなかったっけか?
194 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 00:24:57 ] mutableからconstは呼び出せると思うが
195 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 02:10:47 ] ごめん、mutable から invariant のメンバ関数だけだった。
196 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 03:37:12 ] mutable/constからinvariantを呼び出せない理由は コンパイル時/実行時の違いが関係ありそうなんだけど よく分からないんだ・・・
197 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 07:44:56 ] invariant→const : ok mutable→const : ok あとは全部だめ
198 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 09:51:48 ] constさいきょう!
199 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 21:41:55 ] >>196 invariantメンバ関数はinvariant型のインスタンスに対してしか呼び出せないんだから、 mutableメンバ関数の呼び出せるインスタンスに対しては絶対に呼び出せないし、 constメンバ関数の呼び出せるインスタンスは、mutable型かconst型だけで、 invariantメンバ関数が必ずしも呼び出せるとは限らない。
200 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 21:47:39 ] │mutable型│const型│invariant型 mutableメンバ関数 │ ○ │ × │ × constメンバ関数 │ ○ │ ○ │ ○ invariantメンバ関数│ × │ × │ ○ こういうことだろ?
201 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 21:52:01 ] 戻り値がmutableで、関数がconstの場合はどうすればいいんだろう?
202 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 21:57:59 ] 何も悩む必要はないと思うけど。 class C { const C dup() { return new C; } } void main(){ auto c_const = new const(C); auto c_mutable = c_const.dup; writeln(typeid(typeof(c_const))); writeln(typeid(typeof(c_mutable))); }
203 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 22:56:41 ] 使い分けはこうか class A { const int a() { return 1; } cosnt(int) b() { return 2; } const const(int) c() { return 3; } }
204 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 23:22:31 ] え、もしかして const int i;と const(int) i;ってかなり意味違う?
205 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 23:46:55 ] うあ、おれもいま初めてしった。 C++でいう class C { int foo() const; }; ってどうやるんだろうとずっと思ってた
206 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 23:50:29 ] これかなり問題ある気がするんだど、どうだろう。 void main(){ invariant(int) i; auto p = &i; assert(is(typeof(p) == invariant(int)*)); i = 2; writeln(*p); // 2 i = 3; writeln(*p); // 3 } pの指す先はinvariantのはずなのに、合法的なコードでかわってしまうという
207 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 23:53:15 ] >>205 >>185 にはそれのことが書いてあるんだわ
208 名前:デフォルトの名無しさん mailto:sage [2007/12/03(月) 23:55:50 ] >>206 www.kmonos.net/alang/d/final-const-invariant.html 処理系は、 実装の際にinvariant宣言の初期化子で invariantのインスタンスを置き換えても構いません。 このため、invariant変数のアドレスを取得するのは不正となります: invariant int i = 3; invariant* p = &i; // error, cannot take address of invariant とのことなので &i が不正な処理なのです エラーにならないのならそういうバグかもしれない
209 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 00:02:08 ] やばい、今一理解できない orz import std.stdio; public class S { int mutable_num = 1; const(int) const_num = 20; const int const_num2 = 21; invariant(int) invariant_num = 30; invariant int invariant_num2 = 31; } void main() { S s = new S(); writeln("mutable_num: ", s.mutable_num); writeln("const_num: ", s.const_num); writeln("const_num2: ", s.const_num2); writeln("invariant_num: ", s.invariant_num); writeln("invariant_num2: ", s.invariant_num2); } -- output --- mutable_num: 1 const_num: 20 const_num2: 21 invariant_num: 30 invariant_num2: 4296960
210 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 00:03:25 ] >>208 それはinvariant記憶域クラスの変数の話で、 invariant型のauto変数のポインタの話には触れてないよね。 invariant int i; と invariant(int) i; は一応ちがうものだと思うんだけど。
211 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 00:11:29 ] 型がinvariantなのと変数がinvariantっていう違い?
212 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 00:13:26 ] >>211 そう。 現在の文法では、invariant型のデータを保持するミュータブルな変数が許されてる、様な気がする。
213 名前:208 mailto:sage [2007/12/04(火) 00:27:32 ] >>210 あ そうか 型と記憶域クラスで違うんだね・・・
214 名前:205 mailto:sage [2007/12/04(火) 07:16:49 ] >>207 ttp://d.hatena.ne.jp/haru-s/20071203/1196695054 まとめきた 超さんくす
215 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 14:22:33 ] const int i; const(int) i; が違うのは分かるけど。後者は使い道はないよね?
216 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 15:31:26 ] 関数の引数に使えたりしない? invariantでもmutableでも受け取れる・・・みたいな
217 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 20:02:39 ] メンバだと invariant int も const int もクラス変数に取られるみたいだけど invariant int がインスタンス変数としてアクセスするとどっかのアドレス返すのは何故だろう? constはメモリを使い、invariantは使わないという差なら、エラーにすりゃいいのに。
218 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 20:09:51 ] >>217 どういうこと?>>209 のこれのこと? invariant_num: 30 invariant_num2: 4296960
219 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 20:14:43 ] それそれ。仕様上、メモリにとられない=直値に置き換え?みたいだし、何が取れてるんだろうと。
220 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 21:31:52 ] それは、ただのバグじゃねえの? 俺の環境(2.008/windows)だと mutable_num: 1 const_num: 20 const_num2: 21 invariant_num: 30 invariant_num2: 31 となったが。
221 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 21:51:59 ] あらら
222 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 22:02:36 ] 2.007と008との間で対応入ってるみたいね。 const型がコンストラクタで初期化できなくなってるし、 今は使いこなそうと思わないほうがいいのかも。
223 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 23:01:33 ] じゃあ2.009待つか… マダァ-? (・∀・ )っ/凵⌒☆チンチン
224 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 16:31:44 ] 今月発売予定 (もう出てる?) の本 Learn to Tango with D apress.com/book/view/9781590599600
225 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 16:43:47 ] >>224 おお・・・すげえ
226 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 16:44:52 ] >>224 Amazon.co.jpによると発売日2008/1/28になってるよ。 ttp://www.amazon.co.jp/Learn-Tango-D-Kris-Bell/dp/1590599608/ref=sr_1_1?ie=UTF8&s=english-books&qid=1196840397&sr=8-1
227 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 17:15:50 ] どうせ3ヶ月くらいで古くなるんでしょ
228 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 17:17:55 ] Tangoまだ1.0も出てないのにw
229 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 20:43:43 ] 枯れてwxWidgetsが対応したら、気軽にクライアントに仕えるのにな
230 名前:デフォルトの名無しさん mailto:sage [2007/12/05(水) 20:59:21 ] Tango・・Phobosと仲良くしてほしいなぁ
231 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:41:03 ] Ultimate Tangobos まぁ〜だぁ〜?
232 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 17:49:48 ] なんかStream.readf壊れてる気がするんだけど…
233 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 21:46:57 ] アルティメット・タンコボキバジとな
234 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 23:22:07 ] タンゴボスとガバスはどっちが偉いんですか?
235 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 03:28:13 ] 丹古母鬼馬二 ってなんだこのトンチンカンな名前。 具ぐれ化す。並の名前だなぁ。初めてきいたよ。
236 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 11:42:36 ] ja.wikipedia.org/wiki/%E4%B8%B9%E5%8F%A4%E6%AF%8D%E9%AC%BC%E9%A6%AC%E4%BA%8C 今日日、小学生でもこんな稚拙な文章は書かないぞw
237 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 15:41:16 ] void hoge(ref const real r) { } void main() { real r; hoge(r); } dmd止まる\(^o^)/
238 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 19:02:40 ] >>237 その類のバグは既に報告されている気がする
239 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:07:52 ] phobosのrepositoryが全然変化ないなあ
240 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 21:35:10 ] tangoでFIFOが高速に扱えるcollectionってないのかな? 最初ListSeqがそれかと思ったがこれはなんかLIFOのみ高速に扱えるみたいで… なんかC++のSTLのlistとかに比べると使い勝手悪い感じだなぁ…
241 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 09:34:19 ] phobosのtrunkに単方向リストSList(T)が追加される兆しがあるよ まだprivateらしいけど
242 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 13:31:24 ] SListは最新版DMDに入ってるじゃん。
243 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 21:20:38 ] あれ・・・編集したってだけか
244 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:04:30 ] Dがでてきて結構たつのに未だにコンテナすら整備されてないんだな STLを置き換えられる程度には用意して欲しいもんだ
245 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:32:34 ] 壮大なDTLの計画が現在進行中だが、 あまりにも壮大すぎて全く完成していないのが現状。
246 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:44:52 ] ここでなんか寄せ集めのライブラリ作ろうぜ 必要なときにdファイル落としてプロジェクトに組み込む系のやつ
247 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:12:01 ] DTLのプロジェクトってもう動いてないんじゃ・・・ スマートポインタはGCあるからいらないとして(ほんとに?) 主要なコンテナとアルゴリズムくらいでいいや あわよくばストリーム系まであれば万万歳
248 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 13:15:03 ] tangoでいいじゃん
249 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 16:08:22 ] イテレータクラスのかわりにopApplyがあると思ってたんだけどopApply自体あんまり融通利かないんだね
250 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 19:01:08 ] Javaを参考にAPIのインタフェースだけ揃えりゃライブラリも揃えやすいはずだけどね。 D自体、言語を枯らそうという気が皆無だから、ライブラリなんて作れないってのもあるかも
251 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 21:01:16 ] >>248 Phobos上でやりたいよん
252 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 21:08:34 ] tangobosでおk
253 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:29:53 ] Phobosって、設計とか何も考えずに、このぐらいの機能はいるだろって感覚だけで作っていった印象があるべ。 もうちょっとスマート(に拡張できる)設計をしてくれればなあ。
254 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:52:54 ] まあ、そのためのtangoだろう
255 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:20:40 ] Dってどのへんが支持してるの?
256 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:28:32 ] このスレ
257 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 01:55:59 ] ttp://www.tiobe.com/index.htm?tiobe_index なかなか10位以上にはなれないが頑張ってるよ
258 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 04:33:37 ] (ダリオ戸田の声で)辞書猫の Tango だっす!
259 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 23:57:48 ] >>257 ほんとだ もっとがんばれ。超がんばれ。