1 :
デフォルトの名無しさん :
2008/04/14(月) 15:16:22
2 :
デフォルトの名無しさん :2008/04/14(月) 15:17:08
3 :
デフォルトの名無しさん :2008/04/14(月) 15:17:57
1otu
おつ
res!(1) << '乙';
in { assert(otsu >> 1); }
invariant 乙
enum 乙
せっかくなんでテンプレにしときますね template Res(int N, O) { res!(N) << O.toString(); in { assert(O >> N); } invariant O = N; enum O = N; throw new O(">>" ~ N.toString()); } mixin Res(1, 乙);
ちょっと前にstd.slistって無かったっけ。俺の見た幻……?
それはそうと
>>1 乙。
(´・ω・` )乙 ←ポニーテール
刀、 , ヘ /´ ̄`ヽ /: : : \_____/: : : : ヽ、 ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : } /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : / ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/ /: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/  ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/ /: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、 . /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\ /: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \ / / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :} l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : / |: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ !: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ V ヽ| }/// r‐'⌒ヽ イ〉、 ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これはポニーテールじゃなくて ィ幵ノ ./:/:./:.! !: : : : :!`ヽ >1乙なんだからね!
D言語のネタ来るまで乙禁止
Dでデバイスドライバは書けますか?
OS書けるんだし書けるんじゃないのかね
>>11 ttp://codepad.org/I0zhbCCh Line 3: no identifier for declarator res!(N)
Line 3: semicolon expected, not '<<'
Line 3: Declaration expected, not '<<'
Line 4: Declaration expected, not 'in'
Line 5: statement expected to be { }, not O
Line 6: enum declaration is invalid
Line 6: Declaration expected, not '='
Line 7: Declaration expected, not 'throw'
Line 8: unrecognized declaration
エラー大杉
乙失敗
2.0でmutable/const/invariant周りのエラーを出さずに 一回でコンパイルが通るプログラムを書くことが全然できない件についてorz 複雑すぎるよう
23 :
デフォルトの名無しさん :2008/04/18(金) 13:15:53
直感的じゃないよな じゃあどうするのかと言われたら困るが
駄目言語
標準ライブラリの関数の引数が mutable/const/invariantのどれなのか 把握していないといけないのが辛すぎる 関数の引数は全部constでいいんじゃないの?
>>26 > mutable/const/invariantのどれなのか
> 把握していないといけないのが辛すぎる
うげぇなんだそれ。作者はユーザインターフェースってもんを一から勉強しろよ
間違えればエラーが出るから全く問題ない。
というか、もはやphobosまともに保守されてないだろ。 DMDと一緒に配布されてるphobosがコンパイル通らなかったりするし。
ここなんのスレだったっけ?
>>26 >把握してないと
型のある言語だったら大抵そうじゃね?
const/invariantとか別れてるのはDくらいかもだけど
引数の型ぐらいIDEが表示してくれるそれでいいんじゃね。
>>32 動的型付け言語も仕様上型のない言語も、不適切な型や値を突っ込めば
実行時にコケるか結果がおかしくなるわけだから、なんにしろ確認は必須だよねえ。
とはいえ、言語の性能ってのはそれ自体の性能だけじゃなくて、実際にはエディタや
周辺環境の性能も関わってくるから、そのへん不足してるせいで
>>26 ってことなら、
まあD言語(の言語自身か周辺環境)が悪い、といっても間違いじゃないだろうけど。
それよりも、参照渡しと値渡しの区別が呼び出し側でつかないのだけはどうにかして欲しい。
>>28 それはひどい
>>29 phobos捨てるべきなのか?
>>33 伝説のIDEがあるならそれで一応満足するのだが
>>32 .34 最大の問題は関数の利用者が関数のために
明示的にdeep copyしないといけないところだと思えてきたよ
都合があるのは関数側なのにね
必要なら(.idupの代わりに)関数呼び出し直後に関数内で使う前にdeep copyして欲しい
最近の言語は文字列をimmutableな形式で持つことが多くなってきてるよね。
std.stringなんかはinvariant(char)[]とconst(char)[]の両方のオーバーロードを提供すればいいんじゃないの。
関数の引数ってconst()とrefとinとoutだけでいんじゃね?
>>40 http://www.kmonos.net/alang/d/2.0/const.html にあるように
エイリアシングの問題があるから、invariant引数は必要なところには
必要だと思う。
だがエイリアシングもクソもなく新しいinvariant文字列を返すような
std.stringの多くの関数にはどう考えても不要だと思う。
string,wstring,dstringの定義がphobosのObjectの項に書いてなかったりするし、
stringをinvariantにしたの忘れてるんじゃないかな。
スライスを返したりする場合はinvariant必要不可欠だよね。 そこで例えばこういうふうにするのがいいと思う。 string[] split(const(char)[] str) { return split(str.idup); } string[] split(invariant(char)[] str) { return /*空白で区切ってスライスを返す*/; } もちろん例えばtolowerならinvariantのは定義せず、constだけでいい。
> もちろん例えばtolowerならinvariantのは定義せず、constだけでいい。 引数をinvariantにすればtolowerは純粋関数になるから、 ある種の最適化ができる可能性があるよね。 そういう意味でこちらもやはり両方定義すべき。
>>44 invariantとかconstとかは純粋関数かどうかには関係なくね?
(引数以外の環境に依存せず同じ結果になるから。)
マルチスレッド対応とかはtolowerでやることじゃないだろうし。。
>>43 それいいな
でもそうなるとconst(char)[]版を書くの面倒
invariantにmutableを渡したらdeep ocpyするならこんな感じ
//alias invariant(char)[] string;
string[] split(string str);
string s = "foo";
char[] t = "bar";
string[] u = split(s);
string[] v = split(t); // deep copy implicitly
>>43 転送する引数が一つならまだしも複数になったら
自分で転送関数を書くのはやだぞ
>>46 プリミティブ型の配列ならそれでもいいけど、
オブジェクトの配列だったりすると何か問題が起こりそうな気が
opInvariant()の出番ですね!
その前にopCastを実用可能なものにしろと…
51 :
デフォルトの名無しさん :2008/04/19(土) 21:57:26
dmd1.028 static assert(is(void function()==function)); // static assert is false なぜさ?
>>51 void function()は関数ポインタ型
53 :
51 :2008/04/19(土) 22:52:43
>>52 アホな俺にも
static assert(is(void delegate()==delegate)); //ok
static assert(is(void function()==function)); // static assert is false
この違いが分かるように教えてくれまいか
>>53 is(T==delegate) -- Tがデリゲート型
is(T==function) -- Tが関数型
void delegate() -- デリゲート型
void function() -- 関数ポインタ型
void f(){}
typeof(f) -- 関数型
typeof(&f) -- 関数ポインタ型
おk?
55 :
51 :2008/04/19(土) 23:21:10
>>52 ,54
static assert(is(typeof(void function())==function)); //ok
大変勉強になりました。
56 :
51 :2008/04/19(土) 23:25:55
↑失敗 void func(){} static assert(is(typeof(func)==function)); //ok ありがとうございました。
俺も前それで1時間くらい悩んでしまったwww
class A{} void f(const(A) a){f(cast(invariant(A))a);} // ??? void f(invariant(A) a){} 配列のときは.idupでいいけど配列じゃないときはどうやってclone作ればいいの? castしちゃまずいよね? 自前で.idup相当の処理を書かないといけないのかな class A{invariant(A) iclone()const{return new invariant(A);}} void f(invariant(A) a){} void f(const(A) a){f(a.iclone());}
それと配列でもこういうときは.idupできないけど .dupとcast(invariant(TYPE)[])でいいのかな? invariant(A)[] g(const(A)[] a){ //return a.idup; // error return cast(invariant(A)[])a.dup; }
>>60 いや、よくない。
const(A)[]であるaの参照がどこかにある限り、
a.dupの要素のメンバは変更されうるから、
何らかの方法でAをディープコピーしないといけない。
.dupってディープコピーじゃないの?
std.contractだかなんだかにあるやつが
結局
>>60 な感じだったとおもったが
>>62 まさか。全く同じ内容の配列を複製するだけだよ。
>>63 assumeUniqueだよね。
これはプログラマの良心によってinvariant性を担保するもので、
>>60 のような場合に使うのは不味いね。
D言語っていろんな仕様のバージョンがあって、 自分に合ったものを選んで使えば良いときいたんですけど本当ですか?
66 :
60 :2008/04/20(日) 16:55:53
>>61 確かにそうですね
まとめるとこんな感じでしょうか
class A{
int m;
this(int m){mem=m;}
const A opClone(){return new A(mem);}
const invariant(A) opInvariantClone(){return new invariant(A)(mem);}
}
void f(A x);
void g(const(A) x);
void h(invariant(A) x);
67 :
60 :2008/04/20(日) 16:56:27
f(new A); f(new const(A));//opClone()が暗黙的に呼ばれる f(new invariant(A));//opClone()が暗黙的に呼ばれる g(new A); g(new const(A)); g(new invariant(A)); h(new A);//opInvariantClone()が暗黙的に呼ばれる h(new const(A));//opInvariantClone()が暗黙的に呼ばれる h(new invariant(A));
68 :
60 :2008/04/20(日) 16:56:57
//A x = new invariant(A); // is as //A x = (new invariant(A)).opClone(); //invariant(A) x = new A; // is as //invariant(A) x = (new A).opInvariantClone(); //これはうまくいくかどうかよくわからない //invariant(A)[] copy(const(A)[] ar){ // return ar; //} // is as //invariant(A)[] copy(const(A)[] ar){ // invariant(A)[] ret; // foreach (e; ar) t ~= e.opInvariantClone(); // return ret; //}
69 :
60 :2008/04/20(日) 16:57:23
opCloneが未定義のときにconst/invariant -> mutable opInvariantCloneが未定義のときにmutable/const -> invariant に変換しようとしたときは今までどおりエラーになって 参照型メンバのディープコピー忘れを防止・・・とか なんていうかGCばんざい __EOF__
>>65 すぐ仕様が変わるだけで1.x系と2.x系のニ種類しかないよ
71 :
デフォルトの名無しさん :2008/04/23(水) 02:40:09
class child : private parent { ... } この場合の private みたいに親クラスに属性つけるとどうなるんだっけ? 何も変わってないような気がするんだが。 export属性つけると怒られるし(dmd1.028に)。
72 :
71 :2008/04/23(水) 03:30:19
privateに関しては自己解決した。 お騒がせしました。
静かだな
そろそろ更新くるんじゃないかな
何か難しいことでもしてるのかな
いきなり3.0とかかw
そして3.1でブレイクだな
次は95とかですかね
えっ、2095年?
3/1に3.1、9/5に95ですね、わかります。
え、それだけ言っておいてD2.013はスルーですか…? Version D 2.013 Apr 22, 2008
82 :
デフォルトの名無しさん :2008/04/25(金) 01:24:24
>Html source files are now deprecated. え?アレ? 密かに期待してたんだが、、俺だけだった?
・opDotはopCastのように盲目的に特定の型のインスタンスへ転送する機能 ・switchのcaseはconstかinvariantな整数型変数なら定数じゃなくともOK ・HTMLファイルにD言語のソース埋め込める機能は黒歴史 ・pureとnothrowは書くだけ書けるようにしておいたけどまだ何も機能しないよ ・synchronized文あるからvolatile文は非推奨 ・__thread記憶クラス実装したけど、言語上での表現はたぶん別の形になるよ ・関数オーバーロードで、派生クラスはより近い祖先の引数型にマッチするようになったよ あたりが主な変更? opCastといいopDotといい謎な仕様だと思った。 HTML埋め込みは、Dコンパイラにやらせるべき仕事じゃなかったんだろうな、と思った。
opDotはalias thisみたいな匂いがするね
>>83 switchのcaseはさりげなく面白い変更だな。
同じ動作だが基準がインスタンスごとに変えられるようになるのかな?
switchはどうせなら文字列でも出来るほうが面白そうな気がする
何故だかキャッシュされててChangeLogの更新に気づかなかった。 // main.d import test; void main(){ error(); } // test.d import std.stdio; void error(string file = __FILE__, int line = __LINE__){ writefln("Error: %s(%d)", file, line); } > Error: main.d(4) おお、これでまともにUnitTest用ライブラリが書ける。
>>86 switchの条件に文字列指定は前から出来るけど・・・
>C/C++と違い、 文字列もswitch文で使用できます。
って書いてるし。
>>89 >>86 はそういう意味じゃないだろ
>>83 の「switchのcaseはconstかinvariantな整数型変数なら定数じゃなくともOK」に対して,「const/invariantな文字列をcase文に使えたら面白い」という話だろ
まあ多分こっちの意図と違う事言ってるだろうなと思いつつ勢いに任せて書いた。すまぬ。
switch caseのconst変数について。 スタックにあるconstな変数は受け付けますが、 ヒープにある可能性のあるものは全部NGかなという感じです。 関数内(ネスト関数の外側関数含む)でconstな変数は受け付けますが、 クラスフィールド上でconstなものは受け付けません。
D面白そうだからやってみたいんだけどオススメの本あったら教えて 英語か日本語の本で
他の言語知ってるなら言語仕様のページ見るだけで十分だと思う。
>>93 日本語の本で一番新しいのは『D言語パーフェクトガイド』。ただし古くて何の役にも立たない。
英語で最近出たのは『Learn to Tango with D』。まだ読んでないから内容の是非はわからない。
D はリアルタイムで言語が大きく変わるから ついていくには本なんて役に立たない
97 :
93 :2008/04/27(日) 14:24:10
learn to tango->ダンスの本かと思ってスキップしてた amazonで買った
Dの本って出版された時点で時代遅れになってそうだな。
D 1.0 で止まっていいのなら何とかなりそうではあるが・・・ D 2.0 に興味があるなら本は無駄だと言わざるを得ない
opDotって委譲しやすくするって認識でおk?
>>100 No.
単一の型にしかforwardできないから何の役に立つのかさっぱり分からない。
o.m が o.opDot!("m") にでもなれば、いろいろ面白そうなのにな。
>>102 なんにつかえるかわからんけど、おもしろそう
>>102 関数の引数のstaticが来たらopDot("m")でいい気ガス。
>>103 ActiveXのレイトバンディングとかに使えるかも。
クラス関数を列挙して、それに対応する配列の擬似プロパティ版関数を作るテンプレートってありますか? 下記のような…… class Foo { void fun(int n); ... } ↓ void fun(Foo[] foos, int n) { foreach(foo; foos) fun(n); } ...
作れないことはないと思うけど、すごく汚いものになる気がする
__traitsのallMembersやderivedMembersでメンバの名前を得られるから、 それらを関数かどうか判定して、それにあった関数定義を生成して…、 という形になるんじゃないかな。
>New/Changed Features >Hidden methods now get a compile time warning rather than a runtime one. これうざす。 親クラスの関数をFinalにして回避してるんだけど そもそもおれのクラスの設計がいけてないってことなのかなぁ・・・
>>109 警告メッセージに「オーバーライドしてんのにoverrideついてないよ」
って書いてあるから、素直にoverrideつけりゃいいんじゃなかろうか。
>>110 このケースのことじゃなかろうか
class A {
int foo(int a)
}
class B : A {
int foo(int a,int b);
}
名前が一緒で引数の取り方が違う場合
>>112 わっ本当だ!
ありがとうございます!
aliasの役割っておおいですね・・・
使う場面は様々だけどそのスコープの特定の名前セットに 名前を追加するという役割は同じだよ
dHell+DMD1.0でゲーム作るの楽しい!!! /+D言語でハンガリアン記法どうしようか・・・うーむ+/
アプリケーションハンガリアンもtypedefがあるからあまり必要無いんじゃない?
>>118 Cとかと違って,違う型として扱ってくれるからじゃない?
全て上手く行くかどうか分からないけども
>>120 のリンク先では「(C++で)いちいちウィンドウ座標とレイアウト座標を
別のクラスにするのは大仰すぎて非現実的だからアプリハンガリアンがいいよね」
と言いたいようだけど,ただ視覚に訴えかけるだけじゃなくて
それぞれを暗黙的に変換されないようにするべきだと思う.
typedefがあるD言語では仕組みは簡単だし
実は同じ型だから変換のコストは安いからもってこい
typedef Point LayoutPoint;
typedef Point WindowPoint;
とか
typedef /*unsafe*/string safeString;
とか.
D言語ではアプリハンガリアンでさえいらず型システムに任せられる気がしてきた
122 :
117 :2008/04/30(水) 17:31:07
>>118 すまん言葉足らずだった
>>119-120 が言っている通り
なるべくならコンパイルエラーで検出できるようにした方が間違いが無いだろうし
オーバーロードが出来るから処理も分けやすい
全てのケースで置き換えられるとは言わないけど
大体はtypedefが使えると思う
文字コード別に文字列型を定義してしまっても良い気がする。
>>123 こんなのはしてみたけど
typedef char mbchar;
alias invariant(mbchar)[] mbstring;
文字列同士の連結に ~ じゃなくて連結関数を使わないといけないのがネックだった
ただの配列だから~演算子で連結できるだろ
>>124 charは既にUTF8って意味を持ってるから、ubyteを基底にするべきだろうね。
配列でptrを使わずに&演算子で出てくるのは配列の最初の要素へのポインタと配列の長さを格納した8バイトのデータ?
>>125 あ,ゼロ終端の配列にするからいけないのか thx
>>126 間違えた.元々 ubyte にしてました
>>127 &演算子が返すのは、配列の参照が保持されている場所のアドレスか、
配列の先頭の要素のアドレス。動的か静的かで挙動が異なる。
>>116 すまん、dHell2の方だった
アプリケーションハンガリアンってあるのか・・・
システムハンガリアンしか知らなかった・・・thx!!
>>122 なるほど、得心しました。
単純にアプリケーションハンガリアンはレビュアーの為でもあるんでそっちまで否定されてるのかと思い込んでました。
>>124 文字列型はinvariant(char)[]でもう確定なのかな
せめて一段aliasがあればな…
ていうかWindowsでUTF8が(ry
ところで、charがUTF-8の文字という意味を持っているなら、 なんで、toMBSzとかはchar*を返すんだ? ubyte*を返すべきなんじゃないか?
まったくその通りだと思います
D はじめますた。 winxp で eclipse + descent + dmd 1.028 + dsss 最新版 + ddbg 最新版で なんとかコーディング → ビルド → デバッガが走るという、IDE の最低限要素を実現出来たばっかり。 で、 import std.stdio; void main() { printf("test"); printf("hello, D"); // この行にブレークポイント } このコードでブレークポイントの部分で止まったときに eclipse のコンソールに、標準出力に出力されたであろう test って文字列が出てこない。 出てこさせる方法は無いですか?
fflush(stdout);
>137 >138 出てこないみたいです。
あーーーわかりますた。 標準出力用のコンソールが、eclipse の外のウィンドウで出てたです。 気がつかなかったー。
ワラタ
>>136 その実現する過程をぜひ教えてほしい・・・
ビルダーの設定 D のプロジェクトのプロパティを開いて、ツリーから ビルダーを選択 新規ボタンを押して、プログラムを選択して、OK メインタブーーーーーーーーーーーー ロケーション:c:\d\dsss\bin\dsss.exe 作業ディレクトリ:${project_loc} 引数: build 更新タブーーーーーーーーー 完了時にリソースを更新をチェック 選択されたりソースを含むプロジェクトを選択 再帰的にサブフォルダーを組み込むをチェック おもむろに OK dsss のコンフィグ D のプロジェクトのディレクトリに、dsss.conf を作成。 [main.d] // ← main() を含むソースファイル buildflags=-g -Isrc\\ // ← コンパイラに渡すオプション だいたい、こんなかんじです。
乙です
Descent ver あがってるね。
型タプルの各型の文字列表現が欲しいんだが可能でしたっけ?
>>148 じゃないけど…おれもちょっとそれは悩んでたことがある。結局あきらめたけど。
>>149 ttp://codepad.org/JLIVZDYF こんな感じに、モジュール名まで考えたときに stringof だと都合が悪いんだよね…
mangleof と demangle でいけないかと思ったけど、これもなんかうまくいかないし…
どうすればいいんだろう?
1.0から0.2を5回引いても0にならないのはどうにかならないんでしょうか・・・。
面倒でも整数で
153 :
149 :2008/05/02(金) 23:40:14
>>150 うーん、確かに半端だ…
.NET Framework の Type.Fullname プロパティ相当のものが
現在のD言語には用意されていないようなのが不味いのかな。
>>151 浮動小数点数がどういうものかを勉強しろ。
Dの浮動小数点数ってずいぶん貧弱なんですね
>>148 stringof はタプルに対しても使える。
モジュール名は実行時でも良いなら typeid で取れるね。
あちこちで春ですよ
>>155 はとりあえず基本情報処理技術者の資格を取ってきなさい
PythonのDecimalみたいなのがあれば良いんじゃない
>>162 Decimalはライブラリ(というかモジュール?)だから組み込みどうしではPythonも同じじゃない?
標準で入れるべき,となるとまた別な問題な気がするけど,dsourceとかにあるのかなぁ
Dの10進浮動小数点数ライブラリはまだ見たことはないな まあ、欲しい奴が移植すればいいだろう
>>155 はMatlabとかMathematicaとか使ってたんだろ。
C#は1.0から128bitDecimal型標準装備だな
>>143-144 に刺激されて、Eclipse&Dscentいれてみたが、
VSのMakeプロジェクト、asm{ int 3;} に慣れすぎていた自分がいた・・・
仕様で見つけられないので質問です。(1.0 の仕様しか見てませんけど) クラスメンバーのアクセス制限属性(private とか protected とか)は、 記述したらそのアクセス制限が適用されるのはわかるのですが 記述しなかった場合、どのアクセス制限が適用されるのかご存じのかた居ませんか? とりあえず試した限りでは public っぽいのですが・・・。
あ、ごめん2.0のURL出しちゃったけど1.0系でも同じだよ
・・・これで判れというのもなかなかシビアなものがある。>DigitalMars どもありがとうございました〜
>>これで判れ Dは初心者向けじゃなくて今までの言語との比較が基本だから仕方ない気もしてたり
poseidonがなんか少し新しくなってる
>>149 ありがとうございました。
おかげさまで>106もどきができたのですが、
長いのでここに貼るのはどうかなという感じのものです。
codepadはたぶんコンパイラのバージョンの違いで通りませんでした。
dflのListViewってハンドル取れないようになってないかい?
ハンドルって何のこと
キャンドル♪ハンドル♪ペダルにサドルに自♪転♪車♪漕いどる♪
Windows的にいえば、Windowハンドルじゃないかい? しかし、懐かしいもんひっぱってきたねぇ。>>自転車 意味的にはハンドルはどっちも同じだったと思うけど。
デバイスコンテキストハンドル
>>182 あれ?どうやったらD2で使えるんですか?
うちの環境がおかしいだけでできるみたいです
インストールして普通に動いたよ@v2.013
>>184 スナップショットのほうで対応してるってことかと。
なんでpathが通ってないのにdfl.exeは c:\d2\dmd\bin\dmd.exeじゃなくて c:\d\dmd\bin\dmd.exeの方を使おうとしてくれるのだろうか orz c:\d を c:\_d に改名したら普通に動くのに・・・ どこかに設定が残っているのでしょう?
多分わかった 両方のバージョンを入れていて競合する人はdfl.exeを使う前に dfl -i を実行してやればいいみたいだ
DFLでつかえるコントロール一覧のスクリーンショットってなかったっけ
192 :
デフォルトの名無しさん :2008/05/09(金) 22:01:09
dmd1.029 class Test { int[string] x; void a(Test* t){assert("hello" in t.x);} Test* b(){return &this;} } void main() { Test t = new Test(); t.x["hello"]=1; t.a(t.b); // Error: Access Violation } ナゼ?
Test#b はローカル変数のアドレスを返してるようなもんだと思うんだけど
194 :
192 :2008/05/10(土) 01:38:42
>>193 確かにTest#bを
Test* b()
{
static Test c;
c = this;
return &c;
}
にすると解決
ただ、なんとなくいまいち泣希ガス
意図としては関数bには&tを返してほしいんだが、そういうのはワガママ?
そんなの無理だろ。 オブジェクトを値渡ししてるのに
もともと参照だしそれって意味あるの?
197 :
192 :2008/05/10(土) 02:18:39
ああ、そういえばそうか。 根本的なことわすれてるなおれ。 別方法で打開しました。おさわがせ。
class Test { int[string] x; void a(Test t){assert("hello" in t.x);} Test b(){return this;} } void main() { Test t = new Test(); t.x["hello"]=1; t.a(t.b); } これじゃ駄目だったの?
C++使ってたから俺も混乱した
Dも、C#みたいに型省略宣言入れてくれよ。
autoで我慢しなせぇ。
匿名型のことかな
204 :
202 :2008/05/10(土) 22:45:05
これか? void main(){ auto x = new class {int a; string b;}; x.a = 1; x.b = "hoge"; }
auto x = new class {int a; string b;}; auto y = new class {int a; string b;}; Dだとxとyが同じ型にならないのがだめだな。
206 :
202 :2008/05/10(土) 22:59:05
まあそういう仕様だわなあ 同じ型がいい理由ってどんなんがあるの?
ん・・・あれ? 行頭のスペースが残ってる for(;;){ writefln(); }
てs
だろ?
うーんLINQみたいな応用があれば 匿名型は有意義なんだろうけど今のままならあんまりかなあ 匿名型のTupleを可変長テンプレートの引数に与えるとかで代用できないのか
連想配列asにキーkeyのものがあるかどうかを調べて、 なければ作成する auto p= key in as; if( p is null ) { as[key]= A() p= key in as; } っていうのがめんどくさいので、過去スレ参考にして以下みたいなのを つくってみた template key_type(T) { static if(is(T A:U[A],U)) { alias A key_type;} } template return_type(T) { static if(is(T A:U[A],U)) { alias U return_type; } } return_type!(T)* has(T)( ref T as, key_type!(T) key) { auto p= key in as; if( p !is null ) return p; static if( is(return_type!(T):Object) ) { as[key]= new return_type!(T)(); } else { as[key]= return_type!(T)(); } return key in as; }
214 :
213 :2008/05/12(月) 20:41:00
auto p= has( as, key) p.MEMBER= VALUE; って感じです。 こうやったほうがいいぜ、とかご意見ありましたらm(_ _)m
V* has(K, V)( ref V[k] as, K key) とかじゃあかんの。
216 :
213 :2008/05/12(月) 23:46:32
がーーーーん
配列は参照型だからrefである必要もないな。
218 :
213 :2008/05/13(火) 08:30:21
>>215 ,217
さらしてみるもんですね・・
ありがとうございます
DBIに private import tango.stdc.stringz : toDString = fromUtf8z, toCString = toUtf8z; というコードがあるんですが、 これってどう修正すれば動くんでしょう?
dでSqliteを使おうと思っています。
http://www.digitalmars.com/download/freecompiler.html でImplibを使ってLibファイルを作り、
pragma (lib, "sqlite3.lib");
extern (C):
int sqlite3_open (char* filename, sqlite3** database);
int sqlite3_close(sqlite3* database);
として関数を使ってみたんですが、Undefined Symbolと出てしまいます。
何か足りないものか間違ってる所があるんでしょうか?
sqlite3
>>225 と同じく関数でいい気がする。
適当にコンパイル時に実行できるようにしてみた。
string toUpper(string src){
if(src.length == 0)return "";
foreach(i,c;src){
if('a'<=c && c<='z'){
string result = src[0..i];
foreach(d;src[i..$])
result ~= ('a'<=d&&d<='z' ? d-'a'+'A' : d);
return result;
}
}
return src;
}
void main(){
const static x = toUpper(null);
printf("%.*s\n",x);
}
227 :
224 :2008/05/13(火) 23:48:25
>>224 >>225 コンパイル時に実行できる関数がうまく作れなかったのでテンプレートにしたんだけど
関数で書けるのなら関数のほうがいいですね。参考になりました。ありがとう。
>222 ポエニーのソースを見ると良いよ。sqlite3 をつかってたはず
>>228 ありがとうございす。
ソースの中にあった、dllとLibファイルを入れ替えたら動きました・・・。
Libファイルの作り方が悪かったようです。
ひさしぶりにDさわったら、ずいぶんましになってんのな 前はコンパイラがすっこんすっこん落ちてた
void foo() { void bar(...) { } } これをdmd_2.012-030708_i386.debでコンパイルするとSegmentation faultが出る
可変引数(?)の...をその関数内の...を受ける関数に渡す場合ってどうすればいいんでしょうか?
タプルでいいならこれでおkかな? void foo(T...)(T a){ void bar(U...)(U b){writefln(b);} bar(a); }
>>232 Cスタイルならva_listをとる関数を別途用意するしかない。
Dスタイルなら配列で受けて配列のまま渡せばいい。
可変長引数タプルなら
>>233 。これが汎用性は一番高い。
235 :
デフォルトの名無しさん :2008/05/14(水) 23:04:12
dmd1.029+ dsource.orgのWindowsAPI bindings+ わなDさんから頂いたcoffimplibでPlatformSDKから作ったlib でWM_IME_CHARがこないんだ、がみんなどうよ?
Error: no property 'hogefunc' for type 'hoge.Hoge' これはどういう意味なんでしょう。 関数は定義されてるはずなんですが。
思いっきり勘違いでした。 定義されてない関数でした。
>>235 それをパッと実験できる準備ができてる人はあんまりいないと思う
文字列の連想配列って char[char[]][] じゃエラーになるんですが、どういう風に宣言すればいいんでしょう?
string[string]
char[][char[]]
dでリフレクションな事ってできませんかね。 アクション呼ぶのにSwtich文つらつら書いてるのがあれなんですが。
1.reflection.dを使う 2.BOFの発表であったいずれ来るかもしれないライブラリを待つ 3.自分で作る のどれかかな
と思ったら動いてませんでした。 ["hoge":"omg","test":"sod"]; こういう配列を受け入れる変数はどういう宣言が必要なんでしょうか。
string[string] aa = ["hoge"[]:"omg"[],"test":"sod"];
あぁ、すごい勘違いですた。 ~=じゃなくてそのまま=で入れられるんですた。
Version D 2.014 May 16, 2008 New/Changed Features Added -man switch to browse manual. Added -lib switch to generate library files. Also causes multiple object files to be generated from one source module. When generating an executable file, only one object file is now generated containing all the modules that were compiled, rather than one object file per module. Rewrote the rdmd utility to properly track dependencies and command-line compiler options (currently only working under Linux). Changed the Phobos makefile linux.mak to take advantage of the new -lib feature. Improved full build speed by 3x. std.algorithm: Changed the map() function so that it deduces the return type. Also map can be now curried. std.contracts: Added file and line information to enforce. Added errnoEnforce that formats the error message according to errno. Added corresponding ErrnoException class. std.conv: Made std.to curryable. Changed std.to to throw exception when object-to-object cast fails. Eliminated some superfluous printfs.
std.encoding: Added new functions encodedLength(dchar) and encode(dchar, ref E[]) std.encoding: Got rid of types Utf8, Utf16, Utf32, Ascii, Latin1, Windows1252. Introduced types AsciiChar, AsciiString, Latin1Char, Latin1String, Windows1252Char, Windows1252String. std.encoding: For now commented out std.encoding.to. std.file: Changed Boolean function signatures (e.g. exists) to return bool instead of int. Got rid of some gotos. Added the readText, lastModified, mkdirRecurse, and rmdirRecurse functions. std.functional: Improved compose so it accepts an unbounded number of functions. Added the pipe function. std.getopt: Added new option stopOnFirstNonOption. Also automatically expand dubious option groups with embedded spaces in them (useful for shebang scripts) std.math: improved integral powers std.md5: Improved signature of sum so it takes multiple arrays. Added getDigestString.
std.path: changed signatures of test functions from bool to int. Implemented rel2abs for Windows. Improved join so that it accepts multiple paths. Got rid of some gotos with the help of scope statements. std.process: added getenv and setenv. Improved system() so it returns the exit code correctly on Linux. std.random: added the dice function - a handy (possibly biased) dice. std.typecons: Finalized and documented the stupendous Rebindable template. std.utf: added the codeLength function. Got rid of some gotos. Bugs Fixed std.format: Fixed unlisted bug in raw write for arrays std.getopt: Fixed unlisted bug in dealing with one-letter options with bundling disabled
Bugs Fixed std.format: Fixed unlisted bug in raw write for arrays std.getopt: Fixed unlisted bug in dealing with one-letter options with bundling disabled Bugzilla 2014: fopen fails on large files. Bugzilla 2031: Documentation: template value parameters Bugzilla 2032: Documentation for creating a class on the stack is unintuitive Bugzilla 2037: Article on hijacking is outdated Bugzilla 2038: Remove hello2.html from samples directory Bugzilla 2039: -ignore switch is missing from compiler docs Bugzilla 2054: Const system broken on struct assignment. Bugzilla 2055: (ICE) Compiler crash on struct initializer with too many elements Bugzilla 2056: Const system does not allow certain safe casts/conversions involving deep composite types Bugzilla 2058: Describe hidden value passed to class member functions Bugzilla 2063: std.xml access violation for nested, closed tags Bugzilla 2065: Return value of std.file.exists() is inverted.
Bugzilla 2067: call from anonymous class makes access violation. Bugzilla 2071: spec doesn't mention pointer arithmetic with two pointer operands Bugzilla 2072: std.typecons documentation anomaly. Bugzilla 2074: Variant arithmetic operations fail. For now the fix is to comment out all right-hand side operators. Suggestions for a better fix are welcome. Bugzilla 2075: Spec does not specify how array literals are stored. Bugzilla 2084: operator ?: does not compute the tightest type Bugzilla 2086: Describe relationship between string and char[] more explicitly Bugzilla 2089: Issues with CTFE and tuple indexes Bugzilla 2090: Cannot alias a tuple member which is a template instance Bugzilla 2100: Assertion failure: '0' on line 4842 in file 'expression.c' Bugzilla 2109: asm {lea EAX, [0*0+EAX]; } rejected. -EOF-
1) ユーティリティとしてのdmdの使い勝手の向上 2) phobosの改善 3) バグ修正 といったところか
関数ごとに.objを分けるみたいな機能で、リンク速度が向上して、サイズは小さくなるのかな。
最近、64bitのLinux環境でD言語を使い始めたんですけど、 gdcって、もう開発停止してるんですか? メンテもされてないコンパイラを使うのは少し気が引けます。
ペース遅いけど今も開発されてるよ。
開発は停止してないようだがリリース間隔はお世辞にも早いとはいえない
早くコミット権限を貰いに行って最新版DMDに対応させる作業にかかるんだ!
260 :
256 :2008/05/17(土) 23:45:48
>>257 ,258
レスありがとうございます。
sourceforge見てもわからなかったので、困ってました。
とりあえずgdcを使っていこうと思います。
261 :
デフォルトの名無しさん :2008/05/17(土) 23:47:03
win32版dmd1.028で連想配列の動的配列のlengthを設定しようとすると 固まるんだけど、誰か分かりませんか? こんなの int main() { int[int][] a; a.length = 5; return 0; }
>>261 ほんとだ。これでも固まる(実行時)。
void main()
{
typedef int[int] intint;
intint[] a = new intint[5];
}
シャアw
>>261 それはずっと前からバージョン関係なく止まる。
効率良くはないが、俺はループさせてnullで埋めたりしてた。
std.bindいじってたらdmd落ちた・・・ どこが原因かわかんね
2.014 std.xmlがうまくうごかなくなった・・ onStartTag内で、attrがからっぽ
質問なんですが、一度設定したらそれ以降不変なメンバの初期化をコンストラクタに 与えられた値を使って行いたいです。D言語だとinvariantなメンバの初期化はどうやって 行うのでしょうか。
以下のようにコンストラクタ内で初期化すればいいんじゃないの? class Foo { invariant int bar_; this(int bar) { bar_ = bar; } void bar(int baz) { //bar_ = baz; コメント外すとError: can only initialize const member bar_ inside constructor } }
DはC++と違ってメンバ初期化子ないもんね
参照型のクラスにはいらないし 値型の構造体にはコンストラクタが定義できない 無駄なインスタンスが作られないからメンバ初期化子はいらないわけか
誰かstd.encodingについて3行でまとめてくれ
切り捨てなきゃ無理
文字列エンコーディングに関する標準が出来た感じ? encodingのドキュメントぱっと見たけど、シグニチャがGeneric過ぎて使い方がすぐイメージできんw あとEncodingSchemeASCIIとかのクラス名はASCIIEncodingSchemeのほうが良くないか。 語順がなんか気持ち悪い。 ともあれ、これにEncodingStreamと、ICUEncodingSchemeとかを加えてやれば、 Javaや.NET並のエンコーディング処理能力が得られるのかな。
>Javaや.NET並のエンコーディング処理能力が得られるのかな。 それはいいな
276 :
デフォルトの名無しさん :2008/05/20(火) 03:00:00
int hoge(); void hoge(int v); で、hoge っていうプロパティになるらしいけど、 hoge++; って出来ないのは何とかならないですか? DMD 1.028 です。
なんともなりまへん。
ニュースグループで、ウォルたんにお願いしてみるしか。 気が向いたら、やってくれるかも。
+=もだめだっけ。結構前から「いつかやる予定」ってどっかに書いてなかった?
「いつかやる予定」=「めどいからやらない」
時の流れが、少ないコードで何も崩さずそれを追加できるよう状況を整理するのを待ってるわけか。 いや、「いつの間にか必要無くなってる」というのを待ってるのかもw
コンパイラのソースが公開されてるんだから 自分たちでやるっつーのは?
言語として互換性を損なうと、それこそ意味がない。
>>280 今やらねばいつできる -> 今やらねばいつかできる
俺がやらねば誰がやる -> 俺がやらねば誰かやる
という
win32.windowsとかdflとか2.0対応のライブラリが 増えてきていい感じに使えるようになってきたね
あとはTango? 統合されないのかなぁ・・・ ひろいとはいえないDの世界で基本ライブラリが 2つ開発されているのはなんとももったいない
walたんがそのうち統合されるんじゃねwww みたいなこと言ってなかったっけか
BOFの時の質問にそんなんがあったな。 やっぱり「そのうち統合されるんじゃない?」みたいな感じだった気が。 今のところ統合する気はないってことだよね。
タンゴボスは駄目なのかい
名前からしてダメダメオーラが
ウォルたんのギャグセンスは微妙w
しかし0.1ショックは面白かった
Tangoも…
import std.variant; import std.stdio; import std.string; alias Variant var; int[var] dic; dic[var("aaaa")]= 10; writeln( dic[var("aaaa")] ); あれ〜これってだめなのかな writelnで即落ちします・・・
VariantのopEqualsの実装がどうなってるのか確認したほうがよさげ。
機能から複数のファイルに分けられたユーティリティ関数を 同じ名前空間みたいな感じでアクセス( Util.hoge() って感じに)したくて、 今はそれぞれのファイルにおいて関数をテンプレートで書いて、 ひとつのファイルでそれらをミックスインしてるんだけど、他に良い方法 ないですか?
ファイルを結合する
>>295 writeln(dic[var("aaaa")])は,本当に割り当てたキーを参照してる?
dic[var("aaaa")] = 10;
dic[var("aaaa")] = 20;
writefln(dic); //-> [aaaa:10,aaaa:20]
> 298 あー、なるほど・・・。ありがとうございます! import("hoge.d"); ですよね。やってみます。 ピンと来たんだけど調べるのに時間かかってしまった・・・。
301 :
297 :2008/05/24(土) 02:02:50
正確には mixin(import("hoge.d")); でコンパイルオプション -Jhoge ってな感じですね。 うまくいきました。感謝です。 趣味でゲーム作るならやっぱりD言語ですねぇ
>>299 わ、本当だ!
ありがとうございます。
if( var("aaaa") in dic ) {
writeln( "has" ); //表示されない
}
listviewにアイコン載せれるようになったらおいらはいつでも戻ってくる
>>302 Dのリテラル文字列ってinternされないって事なのかな?
305 :
デフォルトの名無しさん :2008/05/25(日) 12:37:31
>>304 toHashは同じ値になるから,結局はopCmpやopEqualsの実装によるのではなかろうか
>>307 var("aaa") == var("aaa") ってなりますね。
opCmpかな〜
Dで大規模アプリの開発に取り掛かったんだけど言語の選択ミスしてる?
大規模アプリってなんぞ
>309 ムチャシヤガッテとは言っておく。
>>309 ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。:::::::::::::::::::::::::::::::::::::::::::::
:::::::::::::::::::::::::::::::::。::::::...... ... --─- :::::::::::::::::::: ..::::: . ..::::::::
:::::::::::::::::...... ....:::::::゜::::::::::.. (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
:. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
:::: :::::::::.....:☆彡:::: //[|| 」 ||] ::::::::::゜:::::::::: ...:: :::::
:::::::::::::::::: . . . ..: :::: / ヘ | | ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
::::::...゜ . .::::::::: /ヽ ノ ヽ__/ ....... . .::::::::::::........ ..::::
:.... .... .. . く / 三三三∠⌒>:.... .... .. .:.... .... ..
:.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
:.... . ∧∧ ∧∧ ∧∧ ∧∧ .... .... .. .:.... .... ..... .... .. .
... ..:( )ゝ ( )ゝ( )ゝ( )ゝ無茶しやがって… ..........
.... i⌒ / i⌒ / i⌒ / i⌒ / .. ..... ................... .. . ...
.. 三 | 三 | 三 | 三 | ... ............. ........... . .....
... ∪ ∪ ∪ ∪ ∪ ∪ ∪ ∪ ............. ............. .. ........ ...
三三 三三 三三 三三
三三 三三 三三 三三
>>309 それはあくまで「趣味の範囲」での大規模ですね、わかります
GUI使ってれば大規模?
316 :
デフォルトの名無しさん :2008/05/26(月) 23:20:17
ひょっとすると、GUIフレームワークを開発中なのでは?
>>316 ・・・それはないだろう
>>314 普通のGUIアプリならDでもいいけど
Dの利点は優れた構造化能力と何よりフロンティアであることです
実務を楽にこなしたいならC#の方がいいよ
>>309 答えるのが難しい質問だね。
言語仕様自体は、コード解釈で微妙な誤解が起きたりしないよう
注意が払われてるなど、大規模開発を意識したものになってる。
しかし現状では、処理系やライブラリの熟成度に不安がある。
------ test.d ------ class T1 { public int getint() { return 1; } } ------ main.d ------ static import test; class T2 : test.T1 { public override int getint() { return test.T1.getint(); // 駄目 //return typeof(super).getint(); // こう書きたいけどこれも駄目 } } int main() { auto t = new T2; return t.getint(); } dmd.2.014で上のように書くとスタックオーバーフローになるのですが dmd.2.014と私のどちらがおかしいのでしょうか? 私がおかしい場合、どのように書くのが正解なのでしょうか?
public override int getint() { return super.getint; } これじゃ駄目な理由は何?
>>320 いえ、それで結構です。super.で呼べるのですね。
それを知らなくて return super(); とかいろいろやってました。
ありがとうございました。
TinyXMLはObjectのメンバを再定義してる部分が多くて 全部hiddenなんとかのエラーが出てしまう alias Object.print print; public void print() {} て全部やらないのいけないよね? めんどいけどしょうがないのかな
D言語とC++0xって闘ったらどっちが強いんですか!?
純粋な疑問なんだけどプログラム言語の世界で「○○言語最強」とか言ってる連中って何がしたいの? 「強さ」の基準からしてまったくわからんのだけど。
作者と信者がガチの喧嘩をしたらどっちが勝つかという問題だろう。 Dは少数派だから厳しいだろうな。
D教祖の筋肉とチーマObjective-C信者の飛び道具がマジノ攻防戦?
すげぇwwwwwwwwwwwwwwwwwww D言語使わせてくれwwwwwwwwwwwwwwwwww
D事態が弾を内包しているという罠・・・
その弾丸と親和性が高いのではねかえせるのですね。わかります。
331 :
デフォルトの名無しさん :2008/05/28(水) 00:39:32
DでBasicっぽいゲームエンジン作ろうかと思ってるのだがやめておいたほうがいいだろうか・・・
D言語で最新のDirectX SDKを叩ける方法の方が…
>>332 最新に完全対応かどうかはわからないけど
DSourceにあるBindingsで叩ける
最新SDKとリンクさせてるけど、いまのところ問題ない。
>>324 何がしたいっていうか、そういう遊びだろう。
勝敗の決まらない、操作そのものを楽しみ続ける格闘ゲームみたいなものだから、
基準がまったく定まらず、お互いにまったく噛み合わないこと自体も
彼らの求める相互排他とか衝突を生み出すいいきっかけなんだよ。
>>327 なんでD言語のキャラクターはこんなにムカつくんだwww
>>334 まじ?Bindingsってなんか依存関係でコンパイラがエラーはくんじゃなかった?
ロゴがある言語って少ないんだからあのロゴキャラ消してもいいような…
日本以外はサマータイムやってるから理論はいかがなものかと。 ウザカワキャラってことで売り出していこうぜ,
GDI+ の D言語へのポートってないんですか? 自分でシコシコ作るしかないのかな…
大規模やらDirectX10やら、やたら勇者がおおいな
そう言えば日本のサマータイム導入はどうなるんだろう。 他の導入済み都市と比べて夏と冬の日照時間にほとんど差がないから意味がないような。 また政治家の手続き遊びによる金稼ぎが。
毎年、切り替えの日に仕事遅刻するのが目に見えてるからやめてほしい。
なんの話だよ
サマータイムの話では。
DigitalMars のサイトが……
と思ったら蘇ってた
一瞬だけ変なところ飛んだんだが、何事だったんだろうな
350 :
デフォルトの名無しさん :2008/05/30(金) 01:11:16
glutを使いたいのですが、リンク時に Error 42: Symbol Undefined _glutInit というエラーが出てしまいます 調べてみたところ、おそらくglut32.libが原因のようで、 glut32.libは DIDE with D のものを使うといいとの事ですが、 DIDE with Dのサイトがもう見れなくなっていて困っています。 DIDE with D以外だとどこのglut32.libを使えば動くんでしょうか? ちなみにimplib -a glut32.lib glut32.dl で作ったものと yaneSDKに入っているもの、DedicateDのglut32.libを試しても同じエラーが出てしまいました。 それともなにか他の原因があるのでしょうか? 原因がわかりそうな方お願いします。
>>350 .zipで上げてくれたら誰かやってくれるかもしれんよ
SDL + opengl opengluなら普通に使えるけどglutは試してないなぁ。
>>350 DLLがあるなら、implib /s glut32.lib glut32.dllでいいと思うのだが
354 :
353 :2008/05/30(金) 03:51:53
355 :
353 :2008/05/30(金) 04:06:26
あと、glutInitの宣言にextern(Windows)がついてないと思われるので、付けるように。 というか、むしろこっちが原因かも。 libファイルがどうこうじゃなくて。 yaneSDKに入っているものでも大丈夫だったし。
356 :
353 :2008/05/30(金) 04:23:03
>あと、glutInitの宣言にextern(Windows)がついてないと思われるので、付けるように。 extern(C)をextern(Windows)に変えろって意味ね。
世話焼き萌え。
358 :
350 :2008/05/30(金) 11:55:05
>>355 extern(Windows)をつけたらできました。
レスくれた方ありがとうございます。
勉強になりました
GLでがりがりやってる方もいるんだねぇ・・・
さて、IDEはまだかね?
っ Descent
つ Entice Designer
っ SASI
っ Poseidon
JDT並みの自動補完がほすい
つ Descent ・・・より優れているのか?
Descent はすぐに自動補完がぬるぽで落ちて、自動補完聞かないただのエディタと化してしまうからいまいち。 他はしらん。
そんな現象なったことないな
昔のVisualStudioはよくそんなことなってたよなw Descentでなったことはないわ。
DescentでMake使えるようにならんかなぁ
と思ったらEclipseのBuilderから普通に使えた
mixin(import("con")); これ通らないのかよー
それしてもコンパイルは通ったように見えるけど、実際は何も生成されない。
何も生成されない、というか空文字列として扱われてるみたい。
>-J. これがなんかの絵文字かなやんだおれは 修行がたりない
>:-J.
|| -J. | - ノ
|||| -J o/
やってることが暇人すぎてわろた
何か建設的な話題はないのか
2010年にD++が出る
D#とDavaとDoberonも出るよ
DaskellとかDCamlとかDispに期待。
DOBOLだな
最近はバグ取れてきた? そろそろ本格的に使ってみようかと思うんだが(趣味でだけど) JavaとRubyに慣れた身にはC++は苦痛・・・・・・代替言語が欲しい
javaに慣れてるならライブラリが薄いこと以外はスーパーセット的に使えるだろ rubyみたくクラスに機能をインジェクションしようと考えてテンプレートをいじる遊びもできるし
>>386 バグは普通に使う分にはすでにあまり問題ないレベルであるように感じる。
趣味で追いかける分にはD言語は愉快な言語だと思う。
struct Matrix(T, int M, int N) { const Matrix!(typeof(T + U), M, N) opAdd(U)(Matrix!(U, M, N) that); } こんな感じでテンプレートの引数として使われてるテンプレート引数って推論できないものかなあ。
390 :
386 :2008/06/07(土) 15:23:42
質問。 template hoge(int hage) { void hogefunc() { ... } } void func(int arg) { mixin hoge!(arg); hogefunc(); } って、どう展開されるんですか?
argはコンパイル時定数じゃないからテンプレートに渡すことはできない。
でもコンパイルとおっちゃうんですよねー・・・。 不定値になるのかな?
バグでしょ。
CTFEが働いているとかはないのか
typedefで初期値を変えても0が渡されてるからint.initですら無いようだねぇ。
>>395 CTFEにしても、関数はランタイムでも実行できないとだめだから、
コンパイルが通るのがおかしい。
既出のバグなのかな? あの大量のリストを全部確認するのはつらいよなあ… 1000近くあるし英語だし… というかこれも結構重複とかしてるんだろうなぁ…
連想配列をイテレートする便利クラスってなかったっけ? キーの大きい順にとか、値の小さい順にとかやりたいんだけども。
しっかりしたライブラリなら、 dsss build --doc でドキュメントが生成できるのな。知らなかったぜ。 dsss net install は未だに成功した試しがないんだがw
dmdとcandydocで作るのと一緒のやつだっけ? そういえばdmd -doc使ってないなあ プロファイラとコードカバレッジとユニットテストが dmdでできるのは重宝しているが
>>400 foreach (v; aa.keys.sort) {...} とかじゃ不足?
404 :
403 :2008/06/09(月) 10:48:26
微妙に間違えた。 キーで回すんだから foreach (k; aa.keys.sort) と書かなきゃ。
値でソートしたり、値が一致したときにキーにフォールバックしたりしたいの。
>>404 まだ微妙じゃないのか?
foreach (v, k; aa.keys.sort) じゃね?
>>405 >フォールバック
ちくしょう、おいらにゃ意味がわかんねぇ
>>406 書くならこうだろう。
foreach (i, k; aa.keys.sort)
今無性にimport文でワイルドカード使いたい。Javaみたいに。ニュースグループではそんな無駄な 機能いらねぇよ派が多数だったみたいだけどな。Tango のライブラリとか細かすぎていちいち 書くの面倒になっちゃうよ。DFL みたいに all.d みたいなファイルを用意しておけば、まぁ 似たようなことはできそうなんだけど。
Tangoにもまとめてimportする用のモジュールあるじゃん。
410 :
408 :2008/06/10(火) 03:40:56
…あ。tango.group なんてあるのね。
>>409 のお陰で得した気分だ、ありがとう
処理速度ってC++より早いのか?
412 :
デフォルトの名無しさん :2008/06/11(水) 08:37:58
また馬鹿げた質問を 単純ループのベンチマークでもとって比べるか?w
処理速度気にするなら単純なコードでコンパイルして逆汗して比較汁 コンパイラの出来も同時に判る 組み込みやってた知り合いはそれやってたらできたてのコンパイラのバグみつけた
string s = Format!("Arg %s = %s", "foo", 27); を実行しようとすると、 cannot implicitly convert expression ("Arg %s = %sfoo27") of type const(char[]) to invariant(char)[] て怒られた。 なんでstringで受けられないの? ってことと、あと文字列が連結されてるだけで置換されてない……。 公式のサンプル通りなんだけど、ドキュメント古くなってる? 俺がなんか変なことしてるのかな。
metastringsのソース見れば分かるけど返ってくるのはconst char[]なので, stringでは受けられないんじゃないかなぁ(実際はconst(const(char[]))かな). 使うときはいつもautoなので気にしてなかった. それと,Formatの中ではchar[]で分岐してるので, ここをconst char[]に修正しないとまともにフォーマットされない.
Formatはconst/invariant導入されてから壊れっぱなしだな。 めったに使わないから不自由はしてないけど
trunkにあるから書き換えてくれていいよ!
D言語楽しい!
さいきんBill Baxterさんが本家メイリングリストに出てこないなぁ。 お忙しいのか?
>>418 The old collection package will be deprecated prior to Tango 1.0.
こういうところがだろ?wwわかります。
D言語使いには勇者が多いw
linux版のThreadクラスって、処理が終わってもリソース開放しないのな Threadクラスはガベコレが見てるから、別クラスを作るわけにもいかないし phobos書き換えないと使えないってどんだけ std.fileもなんかおかしいし linux版ってもしかしてだれも使ってない? windowsから移ってきてみたら、びっくりだ
たまにはソースとか読んでみようと思ったのに、 コンパイラにくっついてるのってひょっとしてフロントエンドの部分だけ? コード生成とか最適化とかの部分はどっか別のところにある?
>>424 その辺はdmcと共有してて非公開だったと思う
426 :
デフォルトの名無しさん :2008/06/13(金) 16:24:39
>>424 フロントエンド部分だけがGDC用に公開されてる。
dsource.org の鯖はあんまり栄養状態が良くないよな。鯖そのもの だけじゃなく、プロジェクトも abandoned なのが多いし。
windows やら unix やらばかりじゃなくて、 組み込みとかにも目を向けて欲しいんだが。
組み込みでGCやなんやはオーバースペックじゃないか? まあ、最近は組み込みっていってもWindows動いてたりするけどさ。
最近の言語では一番組み込みに適用できそうな予感 ある程度のスペックのあるターゲットになるだろうけど
>>429 終わってるプロジェクトとそうでないものを区別して欲しいな
最終更新日時でソートするだけでもいいけど
tango、現trunkにて、tango.util.logパッケージでも破壊的な変更が… いいぞ、もっとやれ(笑)
うぉるたんからして破壊的な変更大好きだし。
D好きはマゾですか
破壊的な仕様変更は普及してない時期にしかできないw
つまりDはいつまでも破壊的に変更できるわけですね!
プロトタイプは一旦作ってソースを捨てるのが 正しい方法らしいからいいんじゃねw
>>439 金と時間に余裕がなきゃできないけどなw
一度やってみたいよ。
TangoがDの命名規則に従う伏線とか…
tango.text.Regex の正規表現のコンパイルの遅さに萌え
gdc on MinGWのビルドがうまくいかん。 2.x系が使いたいんだが、 最近のバイナリってどっかにないかな?
をるたんそろそろ更新をあたえてくれ〜
tango.text.Regexがdebugビルド不可なのは、何の意図なのだろうか
debugなんてのは臆病者のやることだ。
臆病者と馬鹿者のどっちになるかってことだな。
うぉるたんやプロパティの+=はまだかいの
さっき食べたでしょ
C++のstd::vectorぽいことをしたいのですが 動的配列+phobosのalgorithmで頑張る? →push_backしたい。 →remove_if等が存在しないような? tangoのcollectionを使う? →sortやremove_ifをしたい場合、toArrayで配列にしないと無理? →stable_sortが存在しないような? いまいちこれだという方法が無い気がするのです。 なにか良いライブラリ等ありますでしょうか。
→push_backしたい。
int[] a;
a ~= other;
→remove_if等が存在しないような?
2.x系なら
ttp://www.digitalmars.com/d/2.0/phobos/std_algorithm.html#inPlace int[] arr = [ 1, 2, 3, 4, 5 ];
// eliminate even elements
auto r = eliminate!("(a & 1) == 0")(arr);
assert(r == [ 1, 3, 5 ]);
assert(arr == [ 1, 3, 5, 4, 5 ]);
で無理かな?
Version D 2.015 Jun 17, 2008 PICマイコン対応…と夢想しかけた。
* Function templates can now deduce the return type if they are declared with auto. 戻り値型推論キター * Added Constraints to templates. どうせならconceptまで実装してくれよ。
(1) auto func(T)(){ return 1; } (2) auto func(){ return 1; } (1)は通るのに(2)は通らない。けち臭いなあ
auto func()(){ return 1; } でおk
ああ、テンプレートはパラメータなしでもよかったのか。 でも、ばっちいお…
戻り値の型推論!! でもなんで無名関数とテンプレートだけなんだ * Added Constraints to templates. これは何かすげーなw
テンプレートの型推論のルーチンを 使い回すのが難しいコードになってるとか邪推。
無名関数の戻り型推論って結構まえからできなかったっけ?
そだね 今回できるようになったと言ってるわけじゃないんだわ
auto f()(){ typeof(return) a; return a; } void main() { f(); } コンパイラしんじゃうよー
Constraintにキーワードifつかっちゃったのか。 なんか気持ち悪いな
予約語はできるだけ増やさない、みたいな方針があるのかな。 前から結構使いまわしてるよね。
DからDirectXってそんなに面倒そうでもなさそうなんだがな・・・・・? Cとのインターフェースはあるんだから
>>470 なんという勇者w
DirectXなんてほとんど使ったことないが、
面白そうだからちょっといじってみるか
>>468 まったく人がいなくて吹いた。
SDL+OpenGLのほうがポーティング揃ってるし、DirectX使うより楽だとおも。
たしかゲーム用にラップしたライブラリあったし。
あとフリーゲームの『去人たち』って、エロじゃないけどノベルゲで、D言語で作ってたはず。
ただシステム糞重くてうわーって感じだったけど。
>>465 呼び出す側で古代C言語みたいにvoid型でキャストしよう。
DのIDLコンパイラとか誰か作ってないのかなあ
>>469 DirectXはCOMオブジェクトだから、ポーティングの仕方がCライブラリとはちょっとだけ違う。
ここまで型を書かなくてよくなったら もういっそのこと無名関数テンプレートが欲しくなったんだがw auto dg = (T,U)(T t, U u){ return t+u; }; するとこうなって auto dg = (auto t, auto u){ return t+u; }; 最終的にはこうか?w auto dg = (t, u){ return t+u; }; これなんてマクロ?
つーか、macroキーワードが使える日が早く来ればそれでいいんだよ…
無名関数テンプレートが欲しいのは分かるが、できるとしても alias (T,U)(T t, U u){ return t+u; } dg; が精一杯。
>>477 どうぞ。
auto dg = new class {
auto opCall(T, U)(T t, U u) {
return t + u;
}
};
writeln(typeid(typeof((int i){}))); 2.015でデリゲート型の引数が表示されないんだけど、前からだっけ?
なんでBufferedFileはデストラクタでcloseしないんだ とおもってソース見てみたら、そもそもデストラクタなかった。 どうなってんだよ。
> これはつまり、 デストラクタからはメンバオブジェクトを参照できないことを意味しています。 これがなければデストラクタも使い物になるというものの…
とりあえず必要だと思うのは、scopeメンバ変数だな。 コンストラクタで一回だけ初期化できて、オブジェクトがdeleteされるときに道ずれにdeleteするの。
Tango導入しようかなあ… phobosは統一性なさすぎて辛い…
>>485 ファイルハンドルのような開放しなければならないメモリはガベコレの外にあるのだから、デストラクタに開放処理を書いても問題ないと思うけどね。
IDisposable的なhackが必要になるってことか。
>>485 これって、メンバオブジェクトをdeleteすることも認められないのかな?
あーもー英語使わなくてもphobosのtrunkにコミットできたい
staticメンバにリストを作って管理とか無理かな
>>486 そんなのイラネwwww
って思ったけど、必要だな・・・
>>488 たしか、デストラクタって呼ばれる保証はないんじゃなかったっけ?
だとしたら確実に行われなければならない処理をデストラクタに書くことはできないと思うのだけど。
デストラクタからcloseとかの後始末関数を呼べばいいよ。 scope変数に入れたときは、必ずスコープアウトするときにデストラクタ呼ばれるから。
496 :
デフォルトの名無しさん :2008/06/21(土) 23:15:25
C++で言うところの純粋仮想関数のように、 抽象クラス側のメンバ関数定義において 派生クラスで必ず上書きをする事を明示する修飾子ってありますか?
abstract
abstract属性
auto outfile = new FileConduit("output.txt", FileConduit.WriteCreate); auto file = new FileConduit("hogehoge.txt"); auto buf = new BufferInput(file); while (buf.fill(buf) != IConduit.Eof) { auto str = buf.slice(buf.readable); Cout.output.write(str); outfile.write(str); } Tango なんだけど、Conduit から入力したものを複数の Conduit(?) に出力したいとき、 こういう風に一回バッファを介すしかないの?なんだか妙に生ぐさいやり方で気持ち悪いんだけど、 もっと良い方法ない?Conduit, Buffer, Input/OutputStream のあたりの仕組みが全く理解できない
std.algorithmって今のところ配列にしか使えない? 自作のコンテナでも、イテレータ定義すれば使えるのかなと思ったんだが、そもそもイテレータの作り方がよくわからん。 opStarAssignとかないし。
>>502 それ、以前調べたけどまだ無理だと思う。
std.algorithm の中でイテレータに対して foreach range 文を使ってるんだけど
現状では foreach range 文をカスタマイズできないから、独自イテレータを定義できない。
504 :
500 :2008/06/22(日) 13:27:30
>>501 おお、わざわざdクス。その方向でいってみるよ、ありがとう。
505 :
500 :2008/06/22(日) 17:02:06
ConduitとStreamってどう違うの?
IConduitはInputStreamかつOutputStreamなのだから、同じなんじゃないかと。 ただ、どうやらConduitがベースになってて、他の便利なストリームに突っ込んで使うのがいい感じらしい。 Conduitは「入出力先」、Streamは「使い方」みたいな使い分けなんじゃないかと思う。 あと、InputStreamとOutputStreamはほかのStreamとは若干違って、Conduitの役割をInputとOutputで分割したようなものだと思って使ってる。
>>503 なる。どうもありがとう。
……がっかりだーorz
はぁ?手軽に最高速がDの売りなんじゃないですかぁ? バカなの? ぶっちゃけC++のほうが100万倍マシ
ええ全く、ウォルタンに言ってやってくださいよー
>>509 元ネタはRubyだったのに何でC++に変えたの?
複数ファイルを一度にimportする方法ってありますか? // ファイル a.d module a; // ファイル b.d module b; とかあった場合に // ファイル include.d module include; import a; import b; とかして import include; でaとbをimportみたいにしたいのですが。
public import a, b; とかかな。 調べずに発言
文字配列の連想配列の配列の配列の長さを変えるにはどうしたらいいのでしょうか int main(){ char[][char[]][] list; list.length = 100; return 0; } とすると途中で止まってしまいます。 どのようにしたら止まらせずにlistの長さを伸ばしたり縮めたりできるのでしょうか
515 :
514 :2008/06/23(月) 14:46:04
すみません既出のバグなんですね… >264試してみます
516 :
514 :2008/06/23(月) 15:04:03
すみません、やっぱり分からないです nullで埋めるというのも分かりません list[0] = null; とやっても使えないですし 連想配列を含む配列は使わない方がいいのでしょうか
別にそれ自体として使わないほうがいいってことはないだろうが、 バグがあるんだから使わないほうがいいだろう。実際に使えないわけだし。
連投失礼 しばらくしたら消えるみたいだし、一応貼っておく -- int main(){ typedef char[][char[]] Map = null; Map[] list; list.length = 100; writef(list.length); return 0; } -- 100
しばらくといっても結構長いみたいだね
>>20 のもまだ消えてないみたいだし
>>20 template Res(int N, O)
{
res!(N) << O.toString();
in { assert(O >> N); }
invariant O = N;
enum O = N;
throw new O(">>" ~ N.toString());
}
mixin Res(1, 乙);
はっちゃえ
foreach( i, v, vs) { if( v.noneed ) { vs.remove(i); } } これが、2.0.15でできなくなった・・・ しかたないか
foreach( i, v; vs) { じゃなくて?
あ、それそれ ごめん
>>518 ありがとうございますm(_ _)m
不思議だ…
何でtypedefかませると動くんだろう
もう構造体かクラスかで囲ってそれを配列化しようかとか思ったけど
凄い人はやっぱりいるもんだなぁ
既出だろうけどモジュールと同じ名前のディレクトリがあるとldで躓いてコンパイル失敗するね
>519を動かそうと思ってn.dってファイル作ってdmd nさせたら
nってディレクトリがあるもんだから失敗した\(^o^)/
ttp://dsource.org/forums/viewtopic.php?t=3279 このやたらハイテンションな中国人によると、Entice Designer で日本語が入力できない問題は、
同梱の Scintilla のバージョンが古いせいらしい。このポストのとおり、SciTE のバイナリを
落としてきて、SciLexer.dll -> enticelex.dll にリネームして上書きすれば日本語が通ったよ。
Entice、補完はいまいちだけど Descent より軽いので、漏れはコードエディタとして重宝してる。
連想配列のlengthは読み取り専用だから
>>261 は動かなくて当然だけど、
>>514 は連想配列か普通の配列かの判断が甘いから起こるのかな。
typedefすれば確実に普通の配列だとわかるからlengthに値をセットできる、と。
>>528 その理屈はおかしい、
>>261 のaは連想配列ではなくて動的配列だし、
typedefすることによって型の曖昧さが減るということもありえない。
実行環境がLinuxだからとかではなくて?
531 :
518 :2008/06/24(火) 08:01:25
一応説明すると、 配列のところ読んだら連想配列も動的配列も長さ0で初期化されるとあったから ふとtypedefするときに初期値を新しく指定できるっていうのを思い出して試しただけだったり (最初は適当な配列で初期化しようとしたけど、連想配列リテラルがよく分からないからnullにしたら動いた) 試しにtypedefの = null を削るとcodepadでもTimeoutする 何で初期値指定すると動くのかとかはよく分からんが
>513 できました!ありがとうございます。
>>531 本来、nullと長さ零の配列は同じ扱いのはずなんだけどねえ
全く同じわけではないらしい void main() { int[] a = null; int[] b = [1,2,3]; b.length = 0; assert(a == b); // success assert(a is b); // fail }
>>533 最初の頃はそういってたけど、いつの間にか仕様が変わったらしい。
下記のように場合に、インナークラスから自身が持つフィールドと同名の 親階層のフィールドにアクセスしたい場合の方法ってありますか? superは継承の場合だし、CTest.Value_はコンパイルエラーに。 class CTest { int Value_; CInner Inner_; class CInner { int Value_; void Function(){ // 自身のValue_を表示 writefln("%d",Value_); // 親階層のValue_を表示する場合は?? writefln("%d",???); } } this(){ Value_ = 1; Inner_ = new CInner(); Inner_.Value_ = 2; } void Function(){ Inner_.Function(); } }
>>537 ありがとうございます。
this.outer.Value_ でいけました。
そういえば outer ってキーワードなのな
conceptまだー?
何やらブラクラ危険と専ブラが教えてくれるのだが
>>542 心霊写真と見せかけてしばらく見てると白粉野郎がアップになるやつ。
しばらくってほど時間が経過しないのがなんだかな じーーっくりと見させてからやった方がダメージ大きいのに
専ブラによってはアニgifのサムネイルが最後の1枚になってたりして効果ない びびったけど
546 :
デフォルトの名無しさん :2008/06/28(土) 02:31:24
>>541 びびった。だがD関係ねーや。
あるいはこれがまだ見ぬヲルタンの素顔なのか?
ウォルたんにヒゲはあるのだろうか
テンプレートって計算完備?
折りたたむだけ
hoge hige hage
朝起きたら枕元に美少女死神が立ってて鎌で殺してくんねえかなあ…はぁ…
Constraintsって何か意味あるんですか? static ifで同じことができる気がするんですが
>>552 分けてかけることに意味があるんじゃない?
よくわからんけど。
>>553 うーん、わざわざ構文拡張してまでやることなのかな…
まあよく考えたら将来的な理由かもしれないし、
あんまりこだわらないことにします
スクリプト言語ひとつ覚えたんで、次は念願のコンパイル型言語を――と思って Dを狙ってるんですが、このスレ見る限りやめたほうがいいような気がしてきました。 この言語将来性あるんでしょうか? こんなに利用者にコケにされてる言語はじめてみた。
このスレは信者だらけだから、少なくともコケにはされてないだろ。
……コケにされてるか? むしろこのスレでは愛されてると思うんだがな。 まあそれはさておき、バイナリ吐く言語使いたいなら素直ににC/C++やった方がいいと思うんだ
>555 初のコンパイラ方式をDにするのはやめたほうがいいのではないかと。 CかJavaかC#が良いと思う Dは、ある程度以上の実力者が戯れるのには最適な言語だと思う
いろいろできたのう // 特殊化 template factorial(int n) { enum factorial = n * factorial!(n - 1); } template factorial(int n : 1) { enum factorial = 1; } // constraints template factorial(int n) if(n != 1) { enum factorial = n * factorial!(n - 1); } template factorial(int n) if(n == 1) { enum factorial = 1; } // static if template factorial(int n) { static if(n != 1) enum factorial = n * factorial!(n - 1); else enum factorial = 1; } // CTFE int factorial(int n) { if(n != 1) return n * factorial(n - 1); else return 1; }
Java出身者にはテンプレートが魔法に見えるから困る これだけでチューリング完全とかw
なんというか、There's more than one way to do itって感じになってきたな…
もともとそういう志向はなきにしもだったからな でもテンプレート周りとかconst周りはmore than one wayだけでもないぜ。 コンパイル時に決定可能かどうかという重大な違いがある
563 :
555 :2008/06/29(日) 00:48:50
色々ありがとうございます。 言語仕様や標準ライブラリにいろいろけちつけるのは愛の鞭だったんですね。 初のコンパイラ型言語ってわけでもないので(Cを一通り。MinGWのWindows SDKにあちこち不備があるのが鬱陶しくなってやめた) 忠告を聞かずにDの世界に飛び込んでみます。
>不備があるのが鬱陶しくなってやめた ここがひっかかるw Dはそんなのの塊のような気がす
ゲーム作るのでなければwxDを使えばいくらか幸せになるかと
>>564 > >不備があるのが鬱陶しくなってやめた
> ここがひっかかるw
w
まああの頃とは一味違うつもりなんで……不備は自分でどうにかできる、といいな。
>>565 GUIツールキットってメモリ喰いであまりいいイメージないんですよね。
せっかくWindows API結構覚えてるんで生で頑張ります。
と、ここまで書いてちょっと調べてみたらwxWidgetsって普通のGUIツールキットとはちょっと違うんですね。これは素敵かも。
メモリの配置を覚えるためにもやっぱC/C++あたりを使うのがいいだろうな CはやることやったらすぐC→C++でもいいと思うし
C++は時間の無駄だと思ってるからやっぱりDで
Dこそ時間の無駄で終わらなければよいが…って思ってる いつか仕事で使える日が来ることを期待してるが
仕事で使わせてくれる会社に入ればいい
Hoge hoge = new Hoge(); SetWindowsLong(win, GWL_USER_DATA, &hoge); ってかんじでウィンドウにインスタンスをひも付けさせたら しばらくは使えるんだけど、そのうちインスタンスが まともにとれなくなるのはやっぱりGCのせい?
>>571 yes.
どこかに参照を残しておかないとなくなる。
カーネルオブジェクトの中にある参照をGCが見つけられるわけがない
DのGCって、再配置型?
>>571 そもそもDのクラスは参照型なので、やるとしても
Hoge hoge = new Hoge();
SetWindowsLong(win, GWL_USER_DATA, cast(void*)hoge);
こうじゃないか?
&hogeだとhogeの寿命が来た時点でダメになる気がする。
>>575 GreenPadのソースみながらウィンドウプロシジャ周り(0x042444c7の)をDでやろうとした時に引っかかったw
冷静になって考えれば簡単なミスなんだが。結構考え込んだ気がする。
GWL_USER_DATAでぐぐったらこのスレが出た。 9時間弱しか経ってないのにgoogleすごいな
最近のゴッゴル先生とか凄いよな… 足りない情報を探そうと思ったら〜というのを探してますっていう昨日の自分の書き込みがヒットしたり…
2chで質問して反応がないので、後日検索すると 自分の質問が検索結果のTOPにでる悲しさ
最近のゴッコル先生は2chのクローリング頻度をやたら上げてるからな 2chで質問してから2時間くらいで自分の質問が引っかかったことがある しかし自分のブログは一切かからない
更新頻度でクロール頻度も変えてたりするのかね
switch〜case で break 書かなきゃ下に降りちゃうの? こんなとこまでCを真似なくていいのに
caseで複数条件に対して一つの処理にしたいときにできないと困るじゃない
>>541 見て心臓が痛くなったんだけど訴えたら勝てるかな
すぐ下でびっくり系のブラクラって説明されてるのにクリックするなよ
2ちゃんねる鉄の掟. 出されたご飯は残さず食べる。 転んでも泣かない。 おいら(ひろゆき)のギャグには大爆笑する。
>>583 switch(n) {
case 1: ...
case 2,3: ...
case 4,5,6: ...
}
でいい
そんなことよりもほかの言語との整合性が取れなくなって余計なヒューマンエラーが発生することのほうが問題。 って我らがうぉるたーたんのお達しだ。諦めておけ。
まぁ、違う仕様にするならキーワードを case じゃなくて when にするとか しないと混乱するしな。
個人的にはswitch_breakみたいな名前でも欲しい でも、無くてもそんなに困らないし、 そんなことよりライブラリをどうにか…
case 0..10とかできないのかな。VBみたいだけど。
いよいよ ... がほしくなる
vbといったらcase is
MPDさんのウィンドウは閉じないww
誤爆すまぬ
>584 はbreak; って書かれても fall thru しちゃういけない子
switch (url) { case ブラクラ: if (res!=584) throw new bad_res; } こうですか?わかりま(ry
res = 584;goto case ブラクラ;
nullオブジェクトにアクセスしたときにAccess Violationになりますが、 このときにうまくスタックトレースを取る方法がありますでしょうか。 flectionedを使うと例外の場合のスタックトレースは取れたのですが……
そこはddbgじゃねーかな
関数内で定義したローカル変数のポインタを返しても大丈夫ですか? int* Func(){ int Num = 10; return &Num; } みたいにした場合にスコープを抜けてもアドレスは有効なのでしょうか。
603 :
601 :2008/07/02(水) 17:45:01
自己解決。 良いわけないですね。コンパイルエラーになりました。
東京でやってくれるなら喋りに行くのに。
ネタがないっす
英語ミリ
>>602 え?どうせ行くつもりなかったけどいつ募集してたの?
>>608 普通にずっとNGで募集してたと思うが。
更新まだー?
おまいらNGって何で読んでる?
俺はfirefox
thunderbirdで読んでる
D2.0とphobosでeliminateなどで使用する叙述関数に 任意の引数を渡したいのですが、可能でしょうか? void main(){ const int Value = 3; int[] Nums = [1,2,3,4,5]; Nums = eliminate!("a < Value")(Nums); } とか void main(){ const int Value = 10; int[] Nums = [1,2,3,4,5]; static bool Func(int Src, int Value){ return Src < Value; } Nums = eliminate!(Func(Value))(Nums); } のような事をやりたいのですが。
D2.0のstd.streamって使えないんですかね FileのreadLineをstringに渡そうと思ったら Error: cannot implicitly convert expression (input.readLine()) of ty pe char[] to invariant(char)[] とかエラーがでるから困る 標準ストリームはdin,doutでいいんだけど CFileを使うのは気が引ける。fopenとかいまさら使いたくないし
時間ないから簡単に 前者はmixinで文字列生成 後者は static bool Func(int Value)(int Src){return Src < Value;} eliminate!(Func!(10))(Nums) とか? 試してないから間違ってたらごめん
ええい mutable typeからinvariant typeへは明示的な変換が必要だからidup string s = stream_.readLine().idup;
618 :
615 :2008/07/04(金) 17:45:28
>>617 っていうか標準ライブラリなんだからinvariant仕様に直しとけと言いたい
Fileをカプセル化した自前クラスで美味しくいただけそうです
std.stringは全部をconst(char)[]にしてもらいたい 更新まだかなぁ・・・
>>614 とりあえず成功する例
かっこ悪いのでbindとか関数リテラルがどのくらい効くのか教えていただけると助かります
const int Value = 3;
static bool func(int a) { return (a < Value); }
void main(){
int[] Nums = [1,2,3,4,5];
Nums = eliminate!(func)(Nums);
writefln(Nums);
}
>>616 後者は動きました。
>614のコードにはめると
eliminate!(Func!(Value))(Nums)
で動きますね
Valueを用意する必要がないのでは? あえて定数に名前を付けたいのなら enum Value = 3; をおすすめ
あと std.bind はずっとぶっこわれ中
lazyな引数を関数外部に持っていく方法あったら教えてくれ〜
void delegate() dg; void func(lazy void a) { dg={return a;}; } これでいけると思うんだがコンパイラが死ぬな。 void func(void delegate()[] a...); でも使っとくといいと思う。
626 :
614 :2008/07/06(日) 01:30:55
すいません、説明不足でした。 というか提示した例が悪かったです。 比較したいValueは動的な値です。 const int Value = 3; を int Value = 3; に置き換えた場合で考えて頂けますでしょうか。 C++でboost::lambdaを使った場合の int Value = 3; remove_if(Nums.begin(), Nums.end(), _1 < Value); のようなことがやりたいのです。
謎さんとこのstd.expressionとか。
phobosのstd.algorithmはコンパイル時に決定してる関数しか受け付けないから不便だな。 とっとと、static引数導入してオーバーロードで関数ポインタとかも取れるように整理してほしいわ
自分で書くしかなくね? import std.stdio; T[] removeIf(alias cond, T)(T[] arr) { T[] ret; foreach (i; arr) if (cond(i)) ret ~= i; return ret; } void main() { auto less3 = (int i){return i < 3;}; static bool greator3(int i){return i > 3;}; int[] arr = [1,2,3,4,5]; writefln(removeIf!((int i){return i<4;})(arr)); writefln(removeIf!(less3)(arr)); writefln(removeIf!(greator3)(arr)); }
closureあるから int j = 3; auto less = (int i){return i<j;}; これできるよ
名前が付いてないとダメだってのは使い勝手が悪いな
俺もそう思ってたが実は無名関数でもいけてる件
>>629 のこれのことなのだが
writefln(removeIf!((int i){return i<4;})(arr));
もしかしてphobosの話だろうか
こないだのアップデートからリテラルのaliasも取れるようになったんだっけか。
ああそれでか
連想配列の clear ってどうやるですか?
新しいのと取り替えればいいんじゃない?
これでよくなかったっけ int[int] a = [1:1]; writefln(a); a = null; writefln(a);
それは空のと取り替えただけでクリアしたと言えるかは疑問だな。 もとのaの参照をどこかで持ってれば、そっちはクリアされないわけだし。
foreach (key; aa.keys) aa.remove(key); じゃダメ?
2.016まだかよー
>629 やりたかったのはまさにこれです。 ばっちりです。ありがとうございました。
D言語の配列は参照型だとあるのですが、引数で渡す場合は確かにrefを つけなくても参照で渡されているのですが、返値で返した場合って.dup されたものが返されてしまうのでしょうか? class CTest{ int[] Nums; this(){ Nums ~= 1; Nums ~= 2; Nums ~= 3; } int[] GetNums(){return Nums;} } void main(){ CTest Test = new CTest; int[] Nums = Test.GetNums(); Nums ~= 4; } でTest.Numsに4を追加したいのですが。 配列に限らずD言語で参照返しする場合ってどうやるのでしょうか。
>>644 Nums ~= 4; の直前と直後の配列のポインタを見てみるとわかるけど、インスタンスが変わっちゃってる。
# ということは、 ~= の演算子は配列のインスタンスに対する捜査ではなくて、配列のインスタンスを保存している変数に対する操作っていうこと…かな?
classの場合は普通に返せる。配列だけは操作するときにインスタンスが同じものになるかどうか注意しなきゃいけない。
# 配列の要素を増やす時は違うインスタンスになる場合があって、配列の要素を減らす場合にはインスタンスは変わらない。
tangoのArrayBagみたいなクラスでラップすると幸せになれるかもしれない。
Core2DuoE6600の環境なんだけどstd.cpuid.amd64がtrue 笑っちゃった。俺の環境がおかしいのか?
>646 試してみましたが自分の環境では ~= の前後ではアドレスは変わらなかったです。 そして引数で渡したときはアドレスが変わらず、返値で返した場合はアドレスが 変わっていました。 class CTest{ int[] Nums; this(){ Nums ~= 1; Nums ~= 2; Nums ~= 3; } int[]* GetpNums(){return &Nums;} } void main(){ CTest Test = new CTest; int[]* pNums = Test.GetNums(); *pNums ~= 4; } と配列のポインタを返すようにしたらできました。 ただ、これだとGCがちゃんと返した配列のポインタを追ってくれるのかが不安だったり。 うーん、いまいち配列の扱いがわからない。 やはりクラスでラップするのが安全なのかなぁ。
たぶん勘違いしてる、というか俺の伝え方が悪かった。すまん。
配列のポインタは Nums.ptr これで得られる。
http://codepad.org/tvVXZGEx ↑を参考にするとわかると思う。
# ちなみに、容量をリザーブしておくとインスタンスが変わらない。
# コメントアウトをはずすと同じポインタになる。
>>648 codepadの環境では、前後でアドレスは変わった。
http://codepad.org/Mxf3ifJm > Test.Nums: [401C3FB0]
> main.Nums(before): [401C3FB0]
> main.Nums(after): [401C2F80]
一応、仕様では「配列の連結は、 片方が長さ 0 の配列であっても必ずコピーを伴います」
だそうなので、Nums ~= 4; でローカルのNumsアドレスが新しい配列のものになるのが正常だと思う。
(つまり、参照先の配列インスタンス自体を連結演算によって変更するのは無理ってこと)
一個のメンバ変数を対象として変更する場合はメンバ変数への参照(ポインタ)を返してやればいいけど、
それだとTest.Numsの指す配列が他の変数によって参照されてたりするとやっかいな問題になると思う。
>>647 AMD64とEM64Tってほぼ互換じゃなかったっけ
>>649 > # ちなみに、容量をリザーブしておくとインスタンスが変わらない。
> # コメントアウトをはずすと同じポインタになる。
ホントだ。
Nums ~= 4; を Nums = Nums~4; とすると、アドレスが変わるようになる。
http://codepad.org/WetmPBdy アドレスが変わらない場合も、Test.Numsの長さが自動的に延びるわけじゃなくて、
スライスみたいなことになってるみたいだ。(Test.Numsには4は追加されない)
http://codepad.org/cWJnruXE こういう仕様なのかバグなのか。実装を考えればこの挙動は自然だけど……
lengthを増やすとアドレスが変わってしまいますね。
そしてリザーブしてもアドレスは変わらないが、追加されたメンバが
更新されないと……
http://codepad.org/Kg0yzNfz みたいに引数にリファレンスで渡した場合は追加されるので、それと
同じ事が返値でもできればいいのですが。
C++のように返値のリファレンス指定でできないんですねぇ。
std.xml、マニュアルにあるサンプルプログラムちゃんと動く? どうしてもうまく動かない・・・ 2.0.15です
前に誰かがstd.xmlが動かなくなったって言ってたような・・・ trunk版でも無理なのだろうか
>>654 >C++のように返値のリファレンス指定
俺もこれほしいかも
というか、参照とかポインタとかはC++のほうがわかりやすくて好きだ…
(関数ポインタを除く)
>>645 linux環境だと、Theadクラス使うと落ちまくってとても使えたものじゃないのだが、
いつになったら直るのだろうか・・・
>>645 ん、まさか tnago に DBI でもマージするつもりなのか…
アレの SQLite バインディングは動かないコードのまま trunk に放置されてるからなぁ…
>>661 >tango.io: The use of FilePath and PathView in FileConduit is deprecated in favour of char[] paths
>tango.text.xml.XmlPrinter: Deprecated in favor of DocPrinter
>tango.group: Deprecation period expired, so will be removed.
ここら辺はかなり厳しそうだな。
phobosのtrunkが大量に更新されてる件
暴走するのはPhobosだけにしてくれよ…
これはDコミュニティの文化だよ
PhobosとTangoがなかよくなりますように・・・
2.016もきた
- re-implemented internal.monitor in D. Rationalized internal.object
- Bugzilla 288: changed return type of opEquals from int to bool. ***This necessitates doing a grep for opEquals and changing all the return values.***
- Added .__vptr and .__monitor properties for class objects for use in the internal runtime library.
- Made rdmd's source available through svn, see
http://dsource.org/projects/phobos/browser/trunk/tools/rdmd.d - Simplified std.algorithm by fusing together higher-order functions taking an alias and their counterparts taking a string
-Added module std.array containing array operations: insert, erase, and replace
-Changed the enforce's implementation to generate smaller code per call
-Changed std.functional.binaryFun to work with strings and function aliases alike
-In std.getopt, added optChar, assignChar, and endOfOptions, per popular demand :o|
-In std.math, replaced a bunch of consts with enums
-In std.numeric, added Don Clugston as author and operated minor documentation fixes
-Improved std.stdio.chunks to take an iteration tally in addition to the chunk
また、すごい変更がw
大して大きくないような。.__vptrと.__monitorは今まで無かったのが(ry それより修正して欲しかったバグの修正ktkr
よくわからん・・・誰か要点を・・・
>>671 opEqualsの戻り値型が変わったことぐらいだろ。
stringzとかいう型出来ないかな 文字列が入ると最後に'\0'を埋めてくれて writeflnなどD用の時は'\0'を無視、 C用の時は'\0'を使えるという感じに もしくはC用の関数内では最後に'\0'が付加されるというような toStringzで事足りるんだけどな
>>673 リンケージによって文字列の内部構造が変化するのは便利かもだけど怖い
opEqualsとうとうboolになったのか。 パフォーマンスが云々うぉるたんが抵抗してたのは解決したんかな。 しかしTangoはどうあってもモジュール名のUpperCamelを止める気はないのだろうか。
>>675 いまさら変えられても混乱するしこのままでいいかなって最近思ってきた。
opAssign定義した構造体の連想配列に新しく要素を格納しようとすると落ちるのは何でなんだぜ?
独り言だけど、Win32 とのやり取りが面倒なので、 普通にマルチバイト文字が使えるようにして欲しい。 const char *track_name[] = [mbs"日本語",mbs"日本語"]; みたいな。
今更A関数なんて使わないっしょ。W関数で十分っしょ。とか言われてたなあ。
>>678 それはコンパイル時に文字コードが決まるの?それとも実行時?
CTFE-ableな変換関数をですね… const achar* track_name[] = [astring("日本語"), astring("日本語")];
もうShift-JISはやめようぜ
今更A関数なんて使わないっしょ。W関数で十分っしょ。
いまどきデフォルトエンコードがUFT-8じゃないOSが糞ということ
主要なソフトがsjisにも対応していればいいだけの話で 過去との互換性を気にするならば 最低限のテキストエディタのメモ帳ぐらいが対応すればいい話 win用で人気のあるテキストエディタはutf8とか対応してるしな
はやくstdoutにフィルターをかぶせられるようにしてほしい。
クラスに単純な値コピーをさせる方法ってありましたっけ
>>688 ああそういうことができるんだね
でもできないんだね
>>689 あったっけ?なかったような
中文やらハングルやらが扱えないようにおれは A のAPIでやってるぜ。
692 :
デフォルトの名無しさん :2008/07/12(土) 01:28:36
だいぶ前に出てて挫折してた
「dsource.orgのWin32Api Bindingsをdmd2.0でコンパイルすると出るエラー」
が、いつの間にかなくなってるッ!!
>>340 (いつからなおってたんだー!?)
やっと2.0系に復帰できるワァ
>>692 半年前には大丈夫っだった気がするが、
使ってるAPIの差かもしれん
>>692 半年前には直ってたものを壊れた瞬間に知るとかw
型なのに型として認識してくれなくてやってた苦肉のtypeof(型)ができなくなってるね 元々の問題が修正されたのならいいのだけど
DMD 2.017 リリース
699 :
デフォルトの名無しさん :2008/07/12(土) 15:04:08
Webから画像ダウンロードできたりしますか
できる。
>>678 だからUTF-8でない文字列をchar*に入れるなとあれほど…
mbsはubyte*にするべきだったりするの?
charはutf-8って規格で決まってるからな−。 それ以外が入ってるのは気持ち悪いというか、間違っているという話。
もうstd.encodingがあるしやるならその上に作るべきでは
>>705 wstring toUTF16(in mbchar[] s, in uint codePage=0)
{
mbstring sz = (s ~ cast(mbchar)'\0').idup;
wstring result;
result.length = MultiByteToWideChar(codePage, 0, cast(char*)(sz), sz.length, null, 0);
MultiByteToWideChar(codePage, 0, cast(char*)sz, sz.length, cast(wchar*)result, result.length);
return result;
}
invariantであるresultに書き込もうとしてるのはおかしいな。
キャストしてしまってるから本来検出されるはずなのエラーがでなくなってる。
MultiByteToWideChar(codePage, 0, sz.ptr, sz.length, result.ptr, result.length);
でコンパイル通るように直したほうがいい。
708 :
デフォルトの名無しさん :2008/07/13(日) 01:23:06
Dで外部アプリの実行とかってどうやればできますか。
>>707 ノ
>>708 import std.process;
std.process.system("dir");
>>706 正直申し上げますと、あれインターフェイスが糞すぎる
>>709 あ・・・ありがとう。
CreateProcess使ってできてやったーとか思ったらそんな簡単に・・・
std::basic_stringの仕組みを丸ごと移植したらどうかと思うのだが
>>707 > MultiByteToWideChar(codePage, 0, sz.ptr, sz.length, result.ptr, result.length);
> でコンパイル通るように直したほうがいい。
え・・・そんなんできんの・・・
OpenGLのポーティング、D2.0でもデフォのまま使えるようになったのね さっき最新取ってきて直そうと思ったら、既に修正済・・・感動した
Linux系でD言語やろうと思ったらここ見ればいいってHPないですかね。
>>716 MultiByteToWideChar(codePage, 0, sz.ptr, sz.length, result.ptr, result.length);
キャストなしのこれをコンパイルエラー出さずに書くやり方があるのかなと
もうperlみたいにしてしまえ
tangoのProcessってサンプル使ってもうごかないんすけど。
よくあること
Executeしないと動かなくなってた><
HttpClientのGetResponseが爆発してて自分の手に負えません。 だれか画像ゲットのやりかた教えてください。
1年ぶりに着たけどやっぱ仕事では使えなさそう。 俺と同じ。知ってた。
>>720 本当に良くあるから困る
stdioのwriteflnの時は俺がラリった
ioを自分で作成して出力せにゃいかんのかと思ったり
725 :
722 :2008/07/13(日) 09:29:22
Descentが教えてくれる関数一覧を信じすぎました。 事故解決。
だから安定版ならD1.0があると(ry
D1.0系列って本当に安定してるの?
仕様は安定してるよ。
>>726-728 わらた
このままバージョンが変わらないでいてくれたら
D-1とかD-2とかいう扱いでコードの配布が安定できて嬉しいな
D2.0が安定化するころにはD3.0が登場してて阿鼻叫喚になってると予想してみる
メジャーバージョンアップ=仕様の確定=完全な互換性の断ち切り
phobos vs tango d1.0 vs d2.0 で組み合わせが四通りあるから困る d1.0+phobosで開発してきたが、tangoのFiber使いたい俺としては せめてphobosとtangoが共存してくれれば...
DだとFizzBuzzを最小何文字で作れるんかな ちなみに俺は140文字だった
>>730 それは
>>731 から本望 QED
>>732 tangoがphobos準拠じゃないのが悪いんだよ
なんで自作ライブラリごときが標準ライブラリと共存できないんだってことだよw
tangobosは?
>>737 tangoはGCや配列キャストなどの言語の基幹部分も独自に持っていて、
phobosを置き換えるのが目的で作られてるから、共存できなくて当然。
>>736 切り詰めて87文字
しかも数字が表示できない、中括弧使うと文字増えるしなぁー
import std.stdio;void main(){int i;while(i++<100)writef(i%3?"":"Fizz",i%3?"":"Buzz");}
>>740 printf使えばもっと短くできるんじゃない?
>>739 じゃあphobosが言語の基幹とライブラリの機能分担に失敗してる?
>>741 これで99文字
void main(){for(int i;i++<100;)printf("%.*s%d",(i%3?"":"Fizz")~(i%5?"":"Buzz"),!(i%3&&i%5)?0:(i));}
こっちが別案(100文字ジャスト)
void main(){int i;char[]s;while(i++<100)printf("%.*s%d",s=(i%3?"":"Fizz")~(i%5?"":"Buzz"),s?0:(i));}
どっちもゴミが入るし83文字なんて…
>>732 D言語研究室にファイバあった。
前に試したけど、ファイバの部分だけならコンパイル通るようにするのはそれほど難しくない。
d で windows アプリケーションを作るときに XP のビジュアルスタイルを当てる方法をおしえてください
マニフェスト作ればいいんじゃないの。 詳しくしらんが。
%03dとかやれる関数ってないっすか。
std.string.format
std.c.stdio.sprintfでおk
tangobos で tango と phobos を同時に使うと、無駄に富豪的な気分がするぜ
tangoではないんでしょうか。 char[] format(char[] format, ...) { Sprint!(char) sp = new Sprint!(char); return sp.format(format, _arguments, _argptr); } とかやっても%がそのまま出力されちゃうんですが。
>>751 tangoのフォーマットはC#と同じなのでそのようにやると良い。
>>750 同時につかえるやつなんだ!しらんかった
両ライブラリの最新に対応してるのかなぁ
てかObjectクラスが違うはずなのに大丈夫なのかな
tangoの方のオブジェクトが使われるはず。 問題が出たとしても、そういうことの解決をやるのがtangobosっていう擦り合わせのプロジェクトですよ。
やっぱ、tangobosって方向性として間違ってるよなw
>>745 main.exeが実行ファイルだとしたら、以下の内容をmain.exe.manifestとして保存して実行ファイルと同じフォルダに入れておけば、どんな言語で作ってもXPビジュアルスタイルになる。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
name="main"
processorArchitecture="x86"
version="1.0.0.0"
type="win32"/>
<description>main</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="x86"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
>>752 そうだったんですか。
ありがとうございました。
760 :
デフォルトの名無しさん :2008/07/15(火) 05:11:03
ディレクトリ系の例外拾うと、システムの日本語が入ってるせいか文字化けするんですが、 誰か治し方しりませんか。
連投ですいません。
auto http = new HttpClient( HttpClient.Get, "
http://localhost/test.jpg " );
http.open();
HogeClass _this = this;
DataOutput stream = new DataOutput(new FileOutput( this.current.toString()~"hoge.jpg" ));
if( http.isResponseOK )
{
int len = http.getResponseHeaders.getInt( HttpHeader.ContentLength, int.max );
http.read( (void[] data)
{
stream.write(data); //○
_this.addPicture(data);//X
_this.last = data;//X
}, len );
}
stream.flush();
stream.close();
http.close();
Dlした画像のデータをvoid[][]dataで保存しておきたいのですが、
無名関数を出たとたんにDLしたデータが壊れてしまってるようです。
何が駄目なんでしょうか?
dataをdupしたら解決しそうな気がする
だめですた・・・・・
voidはどうすればキャストとかできるんでしょうか。 中身をのぞいてみようと思ったんですが、何にもキャストができません。 あと、 無名関数内の引数dataのlengthは1716でlenは4323でした。
Voidはキャスト可能でした><
>>764 無名関数が複数回呼ばれることを理解してない、ということかな?
無名関数内の引数dataは実際のデータが小分けになっている。
複数回呼ばれたときのdataを全部連結すると、お望みのデータになるよ。
>>767 おおおおう。
できました。
ありがとうございました。
>769 std.string.toString() 使えば、toStr 要らなくね?
配列の末端から取り出すのって皆さんどうやってますか?
リバースして、ふぉーいーちにかけるか、ふぉーで配列の要素数-1から逆順でとる。 それ以外ってあるかなぁ。
foreach_reverseがあるのに,なんでわざわざreverseするのん?
/home/d/dsss/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libDG-tango-io.a(tango.io.Conduit.o): In function `_D5tango2io7Conduit7Conduit5errorMFAaZv': Conduit.d:(.text+0x134): undefined reference to `_D5tango4core9Exception11IOException7__ClassZ' Conduit.d:(.text+0x151): undefined reference to `_D5tango4core9Exception11IOException5_ctorMFAaZC5tango4core9Exception11IOException' /home/d/dsss/lib/gcc/i686-pc-linux-gnu/4.1.2/../../../libDG-tango-io.a(tango.io.Buffer.o): In function `_D5tango2io6Buffer6Buffer5errorMFAaZv': Buffer.d:(.text+0x1580): undefined reference to `_D5tango4core9Exception11IOException7__ClassZ' Buffer.d:(.text+0x159d): undefined reference to `_D5tango4core9Exception11IOException5_ctorMFAaZC5tango4core9Exception11IOException' collect2: ld はステータス 1 で終了しました Command /home/d/dsss/bin/rebuild returned with code 65280, aborting. Error: Command failed, aborting. これはいったい何をぐぐったらわかるんでしょうか。
>>775 ldの引数で、-lDG-tango-ioの右側に-lDG-tango-coreが書いてない、ということだな、そのエラーメッセージは。
ldはライブラリの依存関係に沿って引数を書かないとリンクエラーになる。
>>778 777じゃないが俺が代弁しよう。きっとこういいたかったに違いない。
while (v.length)
{
func(v[$-1]);
v.length = v.length-1;
}
781 :
777 :2008/07/18(金) 13:13:09
>>778 ごめん、末端から「順に」取り出すのね。
勘違いしてました
>>779 エスパーすぐる!
フォローまでしていただいて・・・
782 :
773 :2008/07/18(金) 16:54:03
foreach_reverseって実装されてたのか。 ROMってるだけだと疎くなっちゃうね。正直すまんかった。
かなり昔からある気がするが…
>>776 使ってるのはdsssなんですが、直すにはどの辺り調べるといいんでしょうか
785 :
776 :2008/07/19(土) 00:21:44
>>784 dsssは使ってないから、正確なところはわからない。
もし、読み込んでいるdsss.confにbuildflags=-llDG-tango-core -llDG-tango-io ... のような記述があるなら、書いてあるライブラリの順番が問題なので、それを依存関係に沿って(左のライブラリが右のに依存するように)並び替えればよいのだけど……。
Cと比べてどっちが速いの?
>>786 ・両方ネイティブコード吐くし、どっちがあらゆる面で速いとは言えない。
・メモリ周りはGCある言語のほうが現実的に速くなるよ、と公式では主張されている
・コンパイル速度はDのほうが遙かに速い
・VC++なんかの商用コンパイラのほうが最適化は賢い(んじゃね?
・最適化部は同じだろうし、dmdならdmcと、gdcならgccと同じようなパフォーマンスになる(んじゃね?
下二つは適当。
>>786 向き不向きがあるけど、開発速度はDのほうが圧倒的に早い…
という比較があった気がした。
ある課題をいろんな言語で解くコンテストがあって、それでDがGCと契約のおかげでいい成績出したって内容だった気がする
実行速度はライブラリの差が大きいだろうな 複雑な数値計算とかなると、もう
>>789 C++でどうしても生産性があげれなかったヘタレな俺
現状どうみても D>>C++ です。 本当にありがとうございます。
IDE欲しくてDescentに挑戦したけど、どうにもコンパイルできなかった。 143あたりの手順も試してみたけどダメだった。結局makeに逆戻りしちゃった。 なんか導入しやすいIDEないかな?2.0系使えるやつ
Poseidon
gdc(mingw)0.24でgc_initを呼ぶと即座に落ちる。 _minitもundefinedと言われるし・・・ Win32 のサンプルが動かないとか心が折れそう。
>>794 WinMainを使わずにmainを使えばいい。
インスタンスハンドルが欲しければGetModuleHandleで得られるし。
796 :
794 :2008/07/22(火) 00:15:22
>>795 本当はDLLを作りたいんだけど、DllMainのgc_initでこけてたので、
前段階としてWinMainで実験してみて、うまくいってないという話。
DLL以外ならmainでいいんだけどね。
紛らわしくてスマソ。
> Ignore all the people who tell you it can't be done. > Telling you it can't be done means you're on the right track. らしいですよ。
799 :
794 :2008/07/22(火) 20:06:30
自己解決。 スレ汚し失礼しました。
自己解決したらちゃんと解決方法も書きなさい
801 :
794 :2008/07/22(火) 21:21:15
うお、まだ配布されてなかった すまn
804 :
デフォルトの名無しさん :2008/07/23(水) 19:58:27
>>797 そういえばウォルタンの顔を見たことがなかったという衝撃
805 :
デフォルトの名無しさん :2008/07/23(水) 21:59:17
髭がないのがD言語普及の妨げになってるんだよな。
やはりここはウォルたんにも髭を・・・・・
ハゲると言語仕様が複雑に・・
ウォルたんの頭髪大ピンチ!
髭を剃ることを暗に明に強制されるような環境で、 好きに言語を設計するような仕事はできないという点では明察なんだよな。 その意味でウォルたんは好きに言語を設計してると思うから問題ない
いくらなんでもこじつけだろと思ったが三行目で吹いた。 確かに好きに設計してるなwwww
をるたん・ぶらいと
うぉるたんって60才ぐらい?
永遠の17歳
caltechを1979に卒業と書いてあるので、 だいたい50〜55くらいの範囲だな
仲いいなお前らwww
この一連の流れを/.本家へ投稿してみたいところだな
バージョンアップがこなさすぎる… 最後にリリースされたのいつだよ…
一連の流れから分かったこと ・D言語に足りないのは髭
じゃあ今度からD言語ではhogeの代わりにhigeを使えばいい、というわけか。 module walter.hige; int hige(){ return 0; }
じゃあDのマスコットキャラに髭つけようぜ
かっけーじゃん
髭の長さ=Dのバージョン
Visual studio並のIDE欲しい・・・
IDEがあればD言語かつる っていうか今や普及にIDEは必須だぜ・・・
struct type { typeof(this) opAssign(type other) { return this; } } int main() { type[string] map; type hoge; map["name"] = hoge;//Error :ArrayBoundsError return 0; } 何でエラーになるの?教えてエロい人!
=演算子が関数呼び出しにハイジャックされてるからじゃねーの?
>>821 この間2.017がでたところじゃないか
VSのプラグインみたいなのでどこまでできるの? 前にインテリセンスをがんばってた人がいたけれど.
IDEなんて不要。何の役にも立たない。 そんなのにリソース割かれてコンパイラの完成遅れられたら困る。
完成・・・だと・・・ッ!?
>>830 map["name"] = hoge;
は
map["name"].opAssign(hoge);
と解釈される。
map["name"]でエラー
>>835 そもそも完成なんて概念は存在しないというのは言ってはいけないのかもしれんが言っちゃった
>>835 >>797 より
>Do you still consider D to be a language "under development"?
> A language that is not under development is a language that is not being used.
> D is under development, and will stay that way as long as people use it.
> C++, Java, Python, PERL, etc., are also widely used and are still under development.
「IDE? もうあるじゃん」的な発言からも分かるように、なんとなく、
うぉるタンにはDをみんなに広めてやろうっていう野心が足りないんだな。
生粋の技術屋なんだな
うぉるたんには髭の生えた参謀役が必要なんだな
Tango 0.99.7 Dominik released
Dらしいboost::tupleを作ったはいいけど、コード補完のメンバ一覧が出たとたんIDEが落ちるw
このスレよりもD言語について盛んに議論されてる場所ってある? 少なくともうぉるたんについてはこのスレが一番だと思うが。
日本にはないと思う
D1.028 phobos の std.cover の setDestDir(char[]) 関数なんだけど、 void setDestDir(char[] pathname) { srcpath = pathname; } になってるんだけど、 dstpath = pathname; だとおもうんだ。 みんなの環境はどう?
>846 2.017のPhobosでも同様になってる。 よく見つけた。Bugzillaへ行っとけ!
>847 アカウント無いし、作りたくないから頼んだ。 dstpath を修正しても何の効果もないからなんとかしろーってのもいっといてplz
めんどくさ std.coverなんて使ってないしどうでもいい
ながれにWWWW
最近、D言語を勉強しようかなーと悩んでるんだが D言語ラブな人にD言語の魅力を語ってほしい ちなみに今までは、基本的にスクリプト言語(Ruby)でいろいろやってました C言語は大学の演習のみ、C++やC#は未経験
>>851 Rubyで間に合ってたならそっち使ってた方がいいと思う
D言語の凄まじさはC++をある程度やってないとわかりにくいんじゃないかな?
API叩きたいとかでも色々ポーティングしなきゃならない状況だからね〜
ruby使ったこと無いから具体的に比べてはワカンネ(実際のところスクリプトメインに使ってて不満がないならrubyと比べてのメリットは少ないんじゃね? という気はする) 一般的な部分では、スタンドアロンの実行ファイルとか、ネイティブ吐く故の速度とかか。必要ないなら必要ないかなあ。 でも個人的に最大の魅力は更新待ちのwktk感。 既存のコード通らなくなる変更躊躇わないからなうぉるたん。標準ライブラリが壊れたりするんだぜ? (ちなみに当方ややM)(でもこのスレに仲間は多いと思ってる)
Ruby使いこなせてるなら、Rubyで十分。 スクリプト言語以外をそんなに触ってないなら、静的型付けとかの不自由さを感じるかも。 Dの良いところはスクリプト言語でもないのに、いろんな機能を使えるところ。他の言語に比べて多機能だと思う。
>>851 俺の場合、WindowsとLinuxの両方で使うというのがあったから、Dという選択になった。
Windows環境だけというのなら、C#の方がライブラリその他安定していて、いいと思う。
散々言われていた起動の遅さも、いつの間にか気にならないくらい速くなってるし。
ただ、LinuxのmonoはD以上に地雷が多すぎなんで、マルチプラットホームならDかなと。
C++はコンパイル速度が速ければ使うんだが、Dの速さに慣れちゃうとその遅さに耐えきれなくなってしまう。
まあ、上記はC並に速く実行する言語が使いたいという前提あっての話だから、多少遅くてもいいというのであれば、Javaでもいいのかもしれない。
Dの欠点は標準ライブラリが信用できないこと。
標準ライブラリを自力で何とかできないとDを扱うのは難しい。
>>853 > でも個人的に最大の魅力は更新待ちのwktk感。
ナカーマ
通らなくなったコードを逐一直してまったくもううぉるたんたらおちゃめなんだからぁ的なアレ
仕事仲間には絶対したくないけどねっ
参照型をサポートする タプルを関数から返せるようにする opCastをまともにする うぉるたん頼むからこのへん実装してくれ><
int& a; みたいなやつじゃね
<俺:妄想> int a; ref(int) b = a; // 型コンストラクタ ref(int) func(ref int p) { // 参照渡し・参照戻し return p; } auto c = func(a); // is(typeof(c) == ref(int)) </俺:妄想>
htodをもう少しどうにかしてほしいな。 手直し箇所が多すぎて、気軽にCのライブラリを使いたいと思えない。
Tangoユーザの方0.99.7はどうよ?
>865 まかせた
>>864 とりあえずなんかMemory.diでエラーが出る。
ちょっとソースのぞいてみたらなんか明らかにおかしいところがあった
130: enum BlkAttr; : uint
131: {
まったくDの開発陣は・・・テスト自動化しろよな せっかく言語がunittestとかDbCとか用意してるのに全然活用してないじゃん うぉるたんがたまにテスト通さないのは破壊的な変更しまくるからだろうけど
869 :
851 :2008/07/27(日) 12:55:38
いろいろな意見ありがとうございます とりあえず、更新を待ってwktkする言語だというのは伝わってきた 面白そうなので少し触ってみようと思います
もし、うぉるたんが死んだり、引退したりしたら、Dも終わるのか? うぉるたんの跡を継ごうっていう人は出てくるのだろうか。
きっとD++がでるよ。
>>868 激しく同意。単体テスト用意しれと思うなぁ。
復帰テストはしているようだけど膨大だからかなりの時間かかってそうだし。
単体テスト以前にコンパイルしてないんじゃ…
>>862 それは
static int a;や
int* a;と似たような宣言で
ref int b; がスマートな気がする
その場合は
a == c って事でいいのかな
ポインタを使わないようにした代わりにこれがあればポインタの代用がかなり効きそうだな
GC周りに矛盾が生じないなら入れてほしいな
>>874 int* a;
はどっちかっていうと、
const int a; // constは変数を修飾
よりは
const(int) a; // constは型を修飾
に近いんじゃない?
それで、refは変数の情報な気がするから、ref(T)はいらないと思う。
876 :
デフォルトの名無しさん :2008/07/27(日) 19:58:19
dmd2.017 + dsource.org->Win32api Bindings で、ウィンドウプロシジャの中から例外を投げて、 main関数に書いたcatchで拾おうとすると失敗するんだけど、こういうもんだっけ?
>>876 そういうもん。
コードの流れは、
メッセージループ -> | user32 | -> ウィンドウプロシージャ
なんで、例外は戻ってこれない。
878 :
876 :2008/07/27(日) 20:17:30
>>877 即レス感謝。
前いけてた気がしたのは漏れの気のせいでした。
べんきょんなったす。
えぇぇ、メッセージループの外のcatchで例外とれてるんだけどこれは何?
writeflnとかで自動的にtoString()が呼び出されると、メンバのアドレスが変っちゃうんだけどなぜ? 明示的に呼び出せば、そんなことにはならなかった アラインメントの問題?GCの問題?
882 :
880 :2008/07/27(日) 21:34:07
値渡しされてるだけだったorz 正直すまんかった
>>881 ちなみに双方向リンクリスト、つまりSTLのlistみたいなやつ
Dの頭のままC#でdelegate使おうとしたら いちいち宣言しなきゃいけないって面倒だなとおもた
C#3.0からFunc<,>とか使えるんじゃなかったっけ。
GTK On Dって名前にすれば GOD ってライブラリ名にできるのにそういう風にしないのは やはり向こうは日本と神の感覚が違うから気軽に使えないのかな
こういう場合onっていう言い方は正しいのか? あんまり聞かない気がする。
じゃ featuring だ
overとか
ならopponだ … oppon 〜は「…を〜と組み合わせて」という意味になる今作った単語
oppai なんでもできる証拠なの〜
GTK of D
Tango の 0.99.7 でバックスラッシュを含んだパスが蹴られるようになったけど、さすがに面倒だぜ。 import tango.io.Console; import tango.io.FileSystem; import Path = tango.io.Path; void main(char[][] args) { auto dir = Path.parse(FileSystem.toAbsolute(Path.standard(args[0]))).path; Cout(dir).newline; } 自分の実行ファイルのディレクトリのフルパスが欲しいとき、もうちょと短く書けないかな。
std.openrjって、どうしてあるの?誰が使ってるの? というか、動かないんだけど
もうなくなるor/andなくなったんじゃなかったのか
>893 記述が長ったらしい代わりにバイナリが小さくなるのがTangoの芸風でしょ。 ちなみにPhobosなら import path; して dirname(rel2abs(args[0])) だ。
1.0 と 2.0 の違いって何? C# の 1.0 と 2.0 ぐらいちがったりするの?
dmd1 致命的なバグが無い限り更新されない dmd2 前進的で素晴らしい変更によってソースを書き直す必要が出来る このスレを読む限りMは2を使った方がいいらしいぞ
最近はライブラリも2に対応してるし、1を使う理由ってあんまない気がするなあ。 安定性求めるなら他の言語を当たったほうがいいだろうし。
DMDScriptが使いたいだけで1使ってます
>>900 喧嘩売られてるような気がするのは俺の気のせいだろうな
移行しない理由が聞きたいんだよな
何が言いたいのかさっぱり理解できない
gdc(mingw)をうまくビルドできるならば 2.0に乗り換えてみたいところだがね。 エラーが回避できなくてあきらめた。
>>902 popenだけはdmd1にも入れてほしい
ところでお前ら typeof(*this)って使ってるかな? クラス名とどっちがいい?
ジェネリックコードじゃなければクラス名の方がいい 時期尚早な過最適化は悪 by Effective C++ ?
TangoやDWTが1にしか対応してないから2使えない、って人もいるんじゃね。 >909 "premature optimization is the root of all evil." なら、出典はKnuth様 (1974年)。
先進的な変更で言語がよくなってそれと同時に自分のコードがかっこよくなる この喜びが毎月のように得られるのはDくらい それが私がDを使う理由・・・信じて
static foreachまだなのかなあ。 そんな複雑な変更でもない気がするんだけど、 うぉるたんは他にやりたいことあるんだろうか。
DMDってテンプレート再帰でタプル作るとホントすごいメモリ喰うな…
D言語はアセンブリの夢を見るか
gc切って、delegateぶん回したらすんごいメモリをくう・・・ あたりまえかもしれんが、scopeとかで回避できんから すんごい困った
あ、これ俺も遊んだwww 結構楽しいんだよなこれ
PC初期に近いの面白さだよね。
俺の1時間を奪う憎い奴だ
template Hoge(){ if(true){} } void f(){ mixin Hoge!() } なんでif使えないの〜泣
template mixin は宣言しか書けないのね
Lisper C++er Der なんちゃって、えへへ
>923 PythonistaにならってDistaはどう? すくなくとも発音はしやすいよw
typeof(*this) opDot() { return *this; }
痔主多? やDなぁそんなの
D Langer
1Der 2Der
3ダー!!
猪木?
>>928 むしろグローバル変数いらなくね?
あと例えばプロパティはsynchronized付きになるとか(俺には善し悪しがよくわからんけど)
これからのマルチコアの世界に向けて最適化していった方がいいのかも
locklessがもてはやされる時代に標準でsynchronized付きとか狂気の沙汰としか。
そういうもんか マルチスレッドプログラミングの安全性ももっとコンパイル時に保証できないのかな
各スレッドが触る変数を確定できるかどうかが勝負という感じかなあ。 pureなら触る変数はプロシージャからのスタックの積み方で決まるから、 そのへんはもう少し楽になる気がする
Martianじゃないか?いろんな意味で。
static typeof(this) opCall(T...)(T args) { return new typeof(this)(args); } newすら書くのが面倒。そんなあなたに
pure判定が通るなら原則として大丈夫だと思う。副作用がないということだし。 もうすこし緩めるとスレッドローカル変数しか触らなければ安全だと思うが、これは未実装。
>937 ああ、そっちの方が全然いいですね。 ところでGtkDのRC1が8月1日リリース予定なわけだがwktk
こうか
template Constructor{
>>938 }
class A{
mixin Constructor;
}
void main(){ A x = A(); }
そういえばstructとclassをコンパチブルにできるのかなー
構造体のコンストラクタってまだないの?
>>942 ずっと無いと思うよ?
「構造体はPODであるべき」って頑なになってるから。
static opCallで代用するしかないんじゃね
バグかなバグかな? --- main.d --- import func; void main(){ line(); } --- fund.d --- void line(uint lineNum = __LINE__){ } $ dmd main.d func.d __LINE__ Internal error: e2ir.c 612
いけね、ファイルを分けなくても再現した。 void line(uint lineNum = __LINE__){} void main(){ line(); }
2007年のカンファレンスで構造体にコンストラクタつけるとかなんとか言ってなかったか? 俺の記憶違いかな?
リテラルあるしなあ……。
gdcのsvnで手に入る一番新しいやつ。 std/c/windows/com.d interface IUnknown { HRESULT QueryInterface(IID* riid, void** pvObject); ULONG AddRef(); ULONG Release(); } ではなくて、 interface IUnknown { static HRESULT QueryInterface(IID* riid, void** pvObject); static ULONG AddRef(); static ULONG Release(); } が正しいような気がする。 後者じゃないとビルドできないし。
>>948 何で前者でエラーになるのか知らないけど、staticは無いと断言できる。
大体staticで何をカウントしてるんだ
comが何なのか良く知らないので、 エラー回避のためにstaticにしたんだが、 やっぱりおかしいのか。 libphobos/std/c/windows/com.d:240: error: '*LTHUNK0' aliased to undefined symbol '_D3std1c7windows3com9ComObject14QueryInterfaceMWPS3std1c7windows3com4GUIDPPvZi' libphobos/std/c/windows/com.d:240: error: '*LTHUNK1' aliased to undefined symbol '_D3std1c7windows3com9ComObject6AddRefMWZk' libphobos/std/c/windows/com.d:240: error: '*LTHUNK2' aliased to undefined symbol '_D3std1c7windows3com9ComObject7ReleaseMWZk' みたいなエラーがでるんだが、 LTHUNK0なんてソースのどこにも出てこないし謎。 試しにいろいろいじって、たまたまstaticにしたらうまくいったという話。 まあ、comプログラミングなんかしないから、 別に通ればなんでもいいのだが。
953 :
デフォルトの名無しさん :2008/08/03(日) 13:39:36
さっきちょっと思いついたんだけど変数の変更を一時的に禁止する様な機能ある? const(hoge, fuga) { // hoge, fugaは変更禁止 } // 変更OK
void main() { int hage = 42; (const typeof(hage) hage = hage) { writeln(hage); // 42 hage++; // error }(); } dirtyすぎる…
最近ここで晒されるソースを見ても何がなんだかです。
>>953 pureとか予約語になってるんだし,要望したら入れてくれるんじゃね?
957 :
953 :2008/08/03(日) 14:41:00
>>954 バグ回避目的なのに手段が真逆に向かっている様なw
ああ、bugzillaに投稿とかのほうがよかったんだろうなぁとか 思ったけど、いいや。やる気ないので、スマヌです。
これじゃ、何かいてるかわからないな。 >846 >847 >848 ここらへんの話です。 暑くて駄目だwww
一時変数の名前はhigeを使ってください
>>953 既出みたいなもんだけど関数のconst引数じゃダメなの?
class A{const void pp(){}}
void f(const A a){
a.pp;
}
void main(){
A a = new A;
f(a);
}
値型でもこう int i=1; g(i); void g(const ref int i){ i++; // error }
sakuraiさんが久しぶりにDの話題してるの見たw
>>965 D1.0のデリゲートもレキシカルクロージャじゃないだけで、ちゃんとしたクロージャだよ。
もっとも、環境を持ち運ばないから変数aの寿命が来た時点でクロージャは無効になる。
967 :
966 :2008/08/03(日) 19:40:15
ちなみに補足しとくと、一個目のコードは「たまたま動いてるだけ」のケース。 aのスコープは終わってるので本来は無効。
968 :
965 :2008/08/03(日) 19:45:50
>>966 さんくす。よくわかった。
>「たまたま動いてるだけ」のケース。
こういうのがバグの温床になるんだよな…
この前すっげー下らないスレをマ板に誤爆したから立てられない、スマン GCをマイクロ秒指定で動作させられるといいな 例えばだが genCollect(1000); で最大で1秒間GCに処理を渡す 戻り値はGCにかかった時間、失敗したら0とか-1だとか 重いけど合間を縫ってGC動かしたい という時に便利 ↓次スレよろ
ERROR:新このホストでは、しばらくスレッドが立てられません。 またの機会にどうぞ。。。 デフォルトの名無しさん (1) しょぼーん ↓次スレよろ
名前つき引数って採用できないのかなあ…
構造体リテラル使ってお茶を濁すとか
構造体リテラルは普通の関数呼び出しの構文だから名前つけれないよ… 名前かけるのは構造体イニシャライザか連想配列リテラル… 構造体リテラルと構造体イニシャライザの構文合わせて欲しかったんだけど、もうむりなのかなあ。
ああ構造体イニシャライザか間違えた D言語に不可能という文字はない(破壊的変更に関しては) 売り込めばあるいは
this(typeof(this) other) { this.tupleof = other.tupleof; } typeof(this) dup() { return new typeof(this)(this); } 埋め支援
978 :
デフォルトの名無しさん :2008/08/06(水) 13:41:55
979 :
デフォルトの名無しさん :2008/08/06(水) 14:03:36
980 :
デフォルトの名無しさん :2008/08/06(水) 14:05:27
981 :
デフォルトの名無しさん :2008/08/06(水) 14:05:40
982 :
デフォルトの名無しさん :2008/08/06(水) 14:07:59
983 :
デフォルトの名無しさん :2008/08/06(水) 14:07:59
984 :
デフォルトの名無しさん :2008/08/06(水) 14:07:59
985 :
デフォルトの名無しさん :2008/08/06(水) 14:07:59
986 :
デフォルトの名無しさん :2008/08/06(水) 14:07:59
987 :
デフォルトの名無しさん :2008/08/06(水) 14:08:00
988 :
デフォルトの名無しさん :2008/08/06(水) 14:08:00
989 :
デフォルトの名無しさん :2008/08/06(水) 14:08:00
990 :
デフォルトの名無しさん :2008/08/06(水) 14:08:00
991 :
デフォルトの名無しさん :2008/08/06(水) 14:08:00
992 :
デフォルトの名無しさん :2008/08/06(水) 14:08:01
993 :
デフォルトの名無しさん :2008/08/06(水) 14:08:00
994 :
デフォルトの名無しさん :2008/08/06(水) 14:08:01
995 :
デフォルトの名無しさん :2008/08/06(水) 14:08:02
996 :
デフォルトの名無しさん :2008/08/06(水) 14:08:02
997 :
デフォルトの名無しさん :2008/08/06(水) 14:08:02
998 :
デフォルトの名無しさん :2008/08/06(水) 14:08:02
999 :
デフォルトの名無しさん :2008/08/06(水) 14:08:02
1000 :
デフォルトの名無しさん :2008/08/06(水) 14:08:02
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。