1 名前:デフォルトの名無しさん [2008/04/14(月) 15:16:22 ] プログラミング言語 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フロントエンド) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF) 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の入門講座) ttp://www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画) ttp://www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games) ■ IDE ttp://dronten.googlepages.com/dscite (DSciTE) ttp://forums.codeblocks.org/index.php?board=20.0 (Code::Blocks) ttp://www.dprogramming.com/entice.php (Entice Designer) ttp://www.dsource.org/projects/descent (Descent) ttp://www.dsource.org/projects/poseidon (Poseidon)
51 名前:デフォルトの名無しさん [2008/04/19(土) 21:57:26 ] dmd1.028 static assert(is(void function()==function)); // static assert is false なぜさ?
52 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:00:16 ] >>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 この違いが分かるように教えてくれまいか
54 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:02:57 ] >>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 ありがとうございました。
57 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:30:38 ] 俺も前それで1時間くらい悩んでしまったwww
58 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:35:25 ] >>57 typeidで確認しろwww
59 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 11:54:17 ] 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());}
60 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:07:10 ] それと配列でもこういうときは.idupできないけど .dupとcast(invariant(TYPE)[])でいいのかな? invariant(A)[] g(const(A)[] a){ //return a.idup; // error return cast(invariant(A)[])a.dup; }
61 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:09:27 ] >>60 いや、よくない。 const(A)[]であるaの参照がどこかにある限り、 a.dupの要素のメンバは変更されうるから、 何らかの方法でAをディープコピーしないといけない。
62 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 13:43:53 ] .dupってディープコピーじゃないの?
63 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 14:04:39 ] std.contractだかなんだかにあるやつが 結局>>60 な感じだったとおもったが
64 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 14:36:43 ] >>62 まさか。全く同じ内容の配列を複製するだけだよ。 >>63 assumeUniqueだよね。 これはプログラマの良心によってinvariant性を担保するもので、 >>60 のような場合に使うのは不味いね。
65 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:13:19 ] D言語っていろんな仕様のバージョンがあって、 自分に合ったものを選んで使えば良いときいたんですけど本当ですか?
66 名前:60 mailto:sage [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 mailto:sage [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 mailto:sage [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 mailto:sage [2008/04/20(日) 16:57:23 ] opCloneが未定義のときにconst/invariant -> mutable opInvariantCloneが未定義のときにmutable/const -> invariant に変換しようとしたときは今までどおりエラーになって 参照型メンバのディープコピー忘れを防止・・・とか なんていうかGCばんざい __EOF__
70 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:02:49 ] >>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に関しては自己解決した。 お騒がせしました。
73 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 16:59:42 ] 静かだな
74 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 17:23:06 ] そろそろ更新くるんじゃないかな
75 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 19:50:57 ] 何か難しいことでもしてるのかな
76 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:21:55 ] いきなり3.0とかかw
77 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:24:42 ] そして3.1でブレイクだな
78 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:26:22 ] 次は95とかですかね
79 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:30:41 ] えっ、2095年?
80 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:51:05 ] 3/1に3.1、9/5に95ですね、わかります。
81 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 00:17:30 ] え、それだけ言っておいてD2.013はスルーですか…? Version D 2.013 Apr 22, 2008
82 名前:デフォルトの名無しさん [2008/04/25(金) 01:24:24 ] >Html source files are now deprecated. え?アレ? 密かに期待してたんだが、、俺だけだった?
83 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 01:51:11 ] ・opDotはopCastのように盲目的に特定の型のインスタンスへ転送する機能 ・switchのcaseはconstかinvariantな整数型変数なら定数じゃなくともOK ・HTMLファイルにD言語のソース埋め込める機能は黒歴史 ・pureとnothrowは書くだけ書けるようにしておいたけどまだ何も機能しないよ ・synchronized文あるからvolatile文は非推奨 ・__thread記憶クラス実装したけど、言語上での表現はたぶん別の形になるよ ・関数オーバーロードで、派生クラスはより近い祖先の引数型にマッチするようになったよ あたりが主な変更? opCastといいopDotといい謎な仕様だと思った。 HTML埋め込みは、Dコンパイラにやらせるべき仕事じゃなかったんだろうな、と思った。
84 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 02:43:05 ] opDotはalias thisみたいな匂いがするね
85 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 04:47:03 ] >>83 switchのcaseはさりげなく面白い変更だな。 同じ動作だが基準がインスタンスごとに変えられるようになるのかな?
86 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 06:25:57 ] switchはどうせなら文字列でも出来るほうが面白そうな気がする
87 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 08:45:43 ] >>81 気づいてたら教えてくらさい
88 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 13:23:23 ] 何故だかキャッシュされてて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用ライブラリが書ける。
89 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 13:43:07 ] >>86 switchの条件に文字列指定は前から出来るけど・・・ >C/C++と違い、 文字列もswitch文で使用できます。 って書いてるし。
90 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 13:47:28 ] >>89 >>86 はそういう意味じゃないだろ >>83 の「switchのcaseはconstかinvariantな整数型変数なら定数じゃなくともOK」に対して,「const/invariantな文字列をcase文に使えたら面白い」という話だろ
91 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 14:21:51 ] まあ多分こっちの意図と違う事言ってるだろうなと思いつつ勢いに任せて書いた。すまぬ。
92 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 07:31:21 ] switch caseのconst変数について。 スタックにあるconstな変数は受け付けますが、 ヒープにある可能性のあるものは全部NGかなという感じです。 関数内(ネスト関数の外側関数含む)でconstな変数は受け付けますが、 クラスフィールド上でconstなものは受け付けません。
93 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:02:04 ] D面白そうだからやってみたいんだけどオススメの本あったら教えて 英語か日本語の本で
94 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:13:24 ] 他の言語知ってるなら言語仕様のページ見るだけで十分だと思う。
95 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:19:32 ] >>93 日本語の本で一番新しいのは『D言語パーフェクトガイド』。ただし古くて何の役にも立たない。 英語で最近出たのは『Learn to Tango with D』。まだ読んでないから内容の是非はわからない。
96 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 14:21:23 ] D はリアルタイムで言語が大きく変わるから ついていくには本なんて役に立たない
97 名前:93 mailto:sage [2008/04/27(日) 14:24:10 ] learn to tango->ダンスの本かと思ってスキップしてた amazonで買った
98 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 15:08:48 ] Dの本って出版された時点で時代遅れになってそうだな。
99 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 15:10:25 ] D 1.0 で止まっていいのなら何とかなりそうではあるが・・・ D 2.0 に興味があるなら本は無駄だと言わざるを得ない
100 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 15:30:26 ] opDotって委譲しやすくするって認識でおk?
101 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 15:31:24 ] >>100 No. 単一の型にしかforwardできないから何の役に立つのかさっぱり分からない。
102 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 15:38:18 ] o.m が o.opDot!("m") にでもなれば、いろいろ面白そうなのにな。
103 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:24:46 ] >>102 なんにつかえるかわからんけど、おもしろそう
104 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:26:07 ] >>102 関数の引数のstaticが来たらopDot("m")でいい気ガス。
105 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:05:18 ] >>103 ActiveXのレイトバンディングとかに使えるかも。
106 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 03:29:47 ] クラス関数を列挙して、それに対応する配列の擬似プロパティ版関数を作るテンプレートってありますか? 下記のような…… class Foo { void fun(int n); ... } ↓ void fun(Foo[] foos, int n) { foreach(foo; foos) fun(n); } ...
107 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 18:42:57 ] 作れないことはないと思うけど、すごく汚いものになる気がする
108 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 19:25:13 ] __traitsのallMembersやderivedMembersでメンバの名前を得られるから、 それらを関数かどうか判定して、それにあった関数定義を生成して…、 という形になるんじゃないかな。
109 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:29:22 ] >New/Changed Features >Hidden methods now get a compile time warning rather than a runtime one. これうざす。 親クラスの関数をFinalにして回避してるんだけど そもそもおれのクラスの設計がいけてないってことなのかなぁ・・・
110 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 22:06:04 ] >>109 警告メッセージに「オーバーライドしてんのにoverrideついてないよ」 って書いてあるから、素直にoverrideつけりゃいいんじゃなかろうか。
111 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 06:18:29 ] >>110 このケースのことじゃなかろうか class A { int foo(int a) } class B : A { int foo(int a,int b); } 名前が一緒で引数の取り方が違う場合
112 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 17:04:35 ] >>111 勘違いしてたわ。 なるほどオーバーロードの関係ね。 www.kmonos.net/alang/d/2.0/function.html で、 オーバーロードの解決時に基底クラスの関数を含めるにはalias使えとあるから、 class A{ int f(){ return 3; } } class B:A{ alias A.f f; int f(int x){ return x*x;} } たぶんこんな感じでOK
113 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 21:44:13 ] >>112 わっ本当だ! ありがとうございます! aliasの役割っておおいですね・・・
114 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:02:51 ] 使う場面は様々だけどそのスコープの特定の名前セットに 名前を追加するという役割は同じだよ
115 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:53:51 ] dHell+DMD1.0でゲーム作るの楽しい!!! /+D言語でハンガリアン記法どうしようか・・・うーむ+/
116 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 02:28:55 ] >>115 dHellってdHell2じゃなくて? 無印の方はSDLとほぼ同等だと思ってたが システムハンガリアンだったらダメ絶対 アプリケーションハンガリアンだったら推奨 ameblo.jp/argv/entry-10031517216.html
117 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:01:33 ] アプリケーションハンガリアンもtypedefがあるからあまり必要無いんじゃない?
118 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 11:48:18 ] >>117 え?
119 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 12:21:11 ] >>118 Cとかと違って,違う型として扱ってくれるからじゃない? 全て上手く行くかどうか分からないけども
120 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:57:22 ] データの目的を変数名に入れなくても、typedefで型のほうを目的固有にできるって話じゃね。 ttp://www.radiumsoftware.com/hungarian_notation.html この例なんかは、安全な文字列型と危険な文字列型を用意すれば解決するようにも思える。
121 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:29:48 ] >>120 のリンク先では「(C++で)いちいちウィンドウ座標とレイアウト座標を 別のクラスにするのは大仰すぎて非現実的だからアプリハンガリアンがいいよね」 と言いたいようだけど,ただ視覚に訴えかけるだけじゃなくて それぞれを暗黙的に変換されないようにするべきだと思う. typedefがあるD言語では仕組みは簡単だし 実は同じ型だから変換のコストは安いからもってこい typedef Point LayoutPoint; typedef Point WindowPoint; とか typedef /*unsafe*/string safeString; とか. D言語ではアプリハンガリアンでさえいらず型システムに任せられる気がしてきた
122 名前:117 mailto:sage [2008/04/30(水) 17:31:07 ] >>118 すまん言葉足らずだった >>119-120 が言っている通り なるべくならコンパイルエラーで検出できるようにした方が間違いが無いだろうし オーバーロードが出来るから処理も分けやすい 全てのケースで置き換えられるとは言わないけど 大体はtypedefが使えると思う
123 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 17:40:46 ] 文字コード別に文字列型を定義してしまっても良い気がする。
124 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 18:29:26 ] >>123 こんなのはしてみたけど typedef char mbchar; alias invariant(mbchar)[] mbstring; 文字列同士の連結に ~ じゃなくて連結関数を使わないといけないのがネックだった
125 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 19:42:24 ] ただの配列だから~演算子で連結できるだろ
126 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 19:44:23 ] >>124 charは既にUTF8って意味を持ってるから、ubyteを基底にするべきだろうね。
127 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:04:38 ] 配列でptrを使わずに&演算子で出てくるのは配列の最初の要素へのポインタと配列の長さを格納した8バイトのデータ?
128 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:21:27 ] >>125 あ,ゼロ終端の配列にするからいけないのか thx >>126 間違えた.元々 ubyte にしてました
129 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 20:25:35 ] >>127 &演算子が返すのは、配列の参照が保持されている場所のアドレスか、 配列の先頭の要素のアドレス。動的か静的かで挙動が異なる。
130 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 21:15:10 ] >>116 すまん、dHell2の方だった アプリケーションハンガリアンってあるのか・・・ システムハンガリアンしか知らなかった・・・thx!!
131 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 21:59:30 ] >>114 なるほど
132 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 22:43:31 ] >>122 なるほど、得心しました。 単純にアプリケーションハンガリアンはレビュアーの為でもあるんでそっちまで否定されてるのかと思い込んでました。
133 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 07:09:09 ] >>124 文字列型はinvariant(char)[]でもう確定なのかな せめて一段aliasがあればな… ていうかWindowsでUTF8が(ry
134 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 10:37:10 ] ところで、charがUTF-8の文字という意味を持っているなら、 なんで、toMBSzとかはchar*を返すんだ? ubyte*を返すべきなんじゃないか?
135 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 13:11:56 ] まったくその通りだと思います
136 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:05:51 ] D はじめますた。 winxp で eclipse + descent + dmd 1.028 + dsss 最新版 + ddbg 最新版で なんとかコーディング → ビルド → デバッガが走るという、IDE の最低限要素を実現出来たばっかり。 で、 import std.stdio; void main() { printf("test"); printf("hello, D"); // この行にブレークポイント } このコードでブレークポイントの部分で止まったときに eclipse のコンソールに、標準出力に出力されたであろう test って文字列が出てこない。 出てこさせる方法は無いですか?
137 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:22:47 ] fflush(stdout);
138 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:26:06 ] >>136-137 std.stdio.flushall(); てのなかったっけ
139 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 15:32:06 ] >137 >138 出てこないみたいです。
140 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 16:49:44 ] あーーーわかりますた。 標準出力用のコンソールが、eclipse の外のウィンドウで出てたです。 気がつかなかったー。
141 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 17:36:59 ] ワラタ
142 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 20:25:08 ] >>136 その実現する過程をぜひ教えてほしい・・・
143 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:28:47 ] eclipse は元から入ってました。 で、descent を入れました。 eclipsewiki.net/eclipse/?D%B8%C0%B8%EC%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3 コンパイラが別途必要なのを気がつかなくて入れてなかったので、 あとから dmd と dmc をいれました。ふつうはルートに展開するらしいけど、ルートが嫌だったので、c:\d に展開。 ->c:\d\dmd ->c:\d\dm dsss を入れます。 ->c:\d\dsss ddbg を入れます。 ->c:\d\ddbg パスを設定します。 DMD_HOME=c:\d PATH=〜〜〜〜;%DMD_HOME%\dmd\bin;%DMD_HOME%\dm\bin;%DMD_HOME%\dsss\bin;%DMD_HOME%ddbg\bin; コンパイラの設定。 eclipse で ウィンドウ>設定 を開いて、ツリーから、D -> Installed Compilers を選択 追加を押して、Compiler home directory に、dmd を展開したディレクトリ(c:\d\dmd) を設定 すると、他の情報もなんだか良い感じに設定されているので、おもむろに OK デバッガの設定 www.dsource.org/projects/descent/wiki/DebuggingPrograms
144 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 22:38:59 ] ビルダーの設定 D のプロジェクトのプロパティを開いて、ツリーから ビルダーを選択 新規ボタンを押して、プログラムを選択して、OK メインタブーーーーーーーーーーーー ロケーション:c:\d\dsss\bin\dsss.exe 作業ディレクトリ:${project_loc} 引数: build 更新タブーーーーーーーーー 完了時にリソースを更新をチェック 選択されたりソースを含むプロジェクトを選択 再帰的にサブフォルダーを組み込むをチェック おもむろに OK dsss のコンフィグ D のプロジェクトのディレクトリに、dsss.conf を作成。 [main.d] // ← main() を含むソースファイル buildflags=-g -Isrc\\ // ← コンパイラに渡すオプション だいたい、こんなかんじです。
145 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 23:44:39 ] 乙です
146 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 06:26:21 ] >>143-144 うわ、ありがとう!!
147 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 18:23:04 ] Descent ver あがってるね。
148 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 19:33:18 ] 型タプルの各型の文字列表現が欲しいんだが可能でしたっけ?
149 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 20:10:02 ] stringof プロパティを使えば出来るかと ttp://www.kmonos.net/alang/d/2.0/property.html 動作例 これでいいのかな? ttp://codepad.org/7jPFcZXj
150 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 21:44:48 ] >>148 じゃないけど…おれもちょっとそれは悩んでたことがある。結局あきらめたけど。 >>149 ttp://codepad.org/JLIVZDYF こんな感じに、モジュール名まで考えたときに stringof だと都合が悪いんだよね… mangleof と demangle でいけないかと思ったけど、これもなんかうまくいかないし… どうすればいいんだろう?
151 名前:デフォルトの名無しさん mailto:sage [2008/05/02(金) 23:24:11 ] 1.0から0.2を5回引いても0にならないのはどうにかならないんでしょうか・・・。