D言語 Part22
レス数が950を超えています。1000を超えると書き込みができなくなります。
0001デフォルトの名無しさん
2009/06/22(月) 01:38:41過去スレ、関連スレは >>2
■前スレ
http://pc12.2ch.net/test/read.cgi/tech/1234363551/
■本家
ttp://www.digitalmars.com/d/
ttp://www.kmonos.net/alang/d/ (和訳)
■コンパイラ
http://www.digitalmars.com/d/dcompiler.html (DMD, 本家)
http://dgcc.sourceforge.net/ (GDC, gccフロントエンド)
http://www.dsource.org/projects/ldc (LDC, バックエンドにLLVM)
■参考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/candcpp2d (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)
0855デフォルトの名無しさん
2009/09/05(土) 17:49:11循環参照するクラスたちをファイルを分けずにひとつにしてしまうと動くことがある。
これ自体はもっと以前からあるバグのようなのだが、評価順が変わって顕在化するようになった模様
http://d.puremagic.com/issues/show_bug.cgi?id=3286
0856デフォルトの名無しさん
2009/09/05(土) 20:06:23Error 42: Symbol Undefined __d_array_bounds
リンクエラーの原因がわかりません。
どうすればいいのでしょうか?
Error 42: Symbol Undefined __d_assert_msg
Error 42: Symbol Undefined __tls_array
Error 42: Symbol Undefined _D11TypeInfo_Aa6__initZ
Error 42: Symbol Undefined __d_arrayappendT
Error 42: Symbol Undefined __adEq2
Error 42: Symbol Undefined _D3std9algorithm12__ModuleInfoZ
Error 42: Symbol Undefined _D10ModuleInfo6__vtblZ
0857856
2009/09/05(土) 20:07:340858デフォルトの名無しさん
2009/09/05(土) 20:15:59今のコンパイラのバージョンのランタイムライブラリで一般のライブラリをコンパイルしてないかじゃないかな
とりあえず環境を一から構築してみるといいかも。
0859デフォルトの名無しさん
2009/09/05(土) 23:52:21あー情報後だしになって申し訳ないですが、DLLを作ろうとしていて、そこで問題があったっぽいです。
試しにDllMainを普通のmainにしたら、意味のわからないリンクエラーはなくなりました。
ありがとうございました。
0860デフォルトの名無しさん
2009/09/06(日) 00:44:54まあ多分この問題はすぐに解消されるだろ
と信じていよう
0861デフォルトの名無しさん
2009/09/06(日) 00:55:090862デフォルトの名無しさん
2009/09/06(日) 08:56:490863デフォルトの名無しさん
2009/09/07(月) 04:58:11ありそうでなかったような気がしてきたんだが…
0864デフォルトの名無しさん
2009/09/07(月) 05:32:12version (HOGE) {}
else { ... }
/(^o^)\
0865デフォルトの名無しさん
2009/09/07(月) 08:48:11ifにifnとかないし
ってことで納得しといて
0866デフォルトの名無しさん
2009/09/07(月) 09:59:350867デフォルトの名無しさん
2009/09/07(月) 16:09:490868デフォルトの名無しさん
2009/09/07(月) 16:34:13あれは static unless が欲しいという話だ
0869デフォルトの名無しさん
2009/09/07(月) 16:43:51でも、 version(!HOGE) みたいなことができたら嬉しいのは、確かに思うこともある。
0870デフォルトの名無しさん
2009/09/07(月) 16:59:49version(Hoge){}else{
...
}
でも別に困りはしないが不格好ではある
構文もversion(!HOGE)しか思いつかないが ! の意味としっくりこないのが悔やまれる
0871デフォルトの名無しさん
2009/09/07(月) 20:02:52template FC() {
void fieldCount() {writeln(this.tupleof.length);}
}
void main() {
class Test1 { mixin FC; int a, b, c; }
class Test2 { int a, b, c; mixin FC; }
class Test3 { int a; mixin FC; int b, c; }
(new Test1).fieldCount;
(new Test2).fieldCount;
(new Test3).fieldCount;
}
出力結果
0
3
1
なん…だと…?
0872デフォルトの名無しさん
2009/09/07(月) 20:58:20その場所までに定義された分だけ見た値が返ってくるのか。
関数名をthis.tupleof.lengthに依存するようにしたら、同じクラス中で何度もmixinできるな。
コンパイル時のクラス定義時にはそのへんのプロパティは参照できず、
このfieldCountのような場合はちゃんとまともな値を返す、ってのが正しい動作かな?
0873デフォルトの名無しさん
2009/09/08(火) 01:11:39ってsの型どうなんの?
0874デフォルトの名無しさん
2009/09/08(火) 01:30:38const(string) == const(immutable(char)[])
0875デフォルトの名無しさん
2009/09/08(火) 20:03:58template W(T, T U) { string W = U.stringof; }
enum En { A }
void main() {
writeln(W!(int, 123)); // "U"と出力
writeln(W!(string, "str")); // "U"と出力
writeln(W!(En, En.A)); // "En"と出力
}
この3番目が"En"になるのは何でなんだぜ?
0876デフォルトの名無しさん
2009/09/08(火) 21:07:400877デフォルトの名無しさん
2009/09/09(水) 00:48:39テンプレイト以前にそもそも、En.A.stringof が En.A になるはずなのに
En になっちゃってるね。バグだと思う。報告よろ。
0878デフォルトの名無しさん
2009/09/09(水) 07:30:100879デフォルトの名無しさん
2009/09/09(水) 13:06:32class C { double d; }
void main() {
while (1) {
scope t = new C; // クラスインスタンスならスタックに割り当てられて
//scope t = new double; // プリミティブ型がスタックに割り当てられないのは納得が行かん
Thread.sleep(10000);
}
}
0880デフォルトの名無しさん
2009/09/09(水) 14:18:320881デフォルトの名無しさん
2009/09/09(水) 15:10:04仕様によれば、scope変数の初期化にnew式を使う場合は、
クラスに限らずスタックに割り当てることになってるからバグだな。
報告しといてちょ
0882デフォルトの名無しさん
2009/09/09(水) 15:30:19ほう
そんなのあったのか
0883デフォルトの名無しさん
2009/09/09(水) 16:44:53よくしらべたなぁ・・・
0884デフォルトの名無しさん
2009/09/09(水) 20:21:510885デフォルトの名無しさん
2009/09/09(水) 21:29:550886デフォルトの名無しさん
2009/09/09(水) 21:51:36ライブラリ用のプロジェクトを作ってそこにソースを置いて、sc.iniのDFLAGSにパスを通したのですが、コンパイルはできてもリンクエラーが出てしまいます。
どうやればいいのでしょうか?
0887デフォルトの名無しさん
2009/09/09(水) 21:57:45なぜかないと思う
0888デフォルトの名無しさん
2009/09/09(水) 22:00:37そんなもんparse!int("0xffff")とかで…
できないね。変態度が足りん
>>886
importはincludeと違ってそのまんまコピーしてくるわけじゃないからなあ
dmd a.d library.d
みたいにいちいち一緒にコンパイルするか、自動的に依存するファイルを探してくれるbudみたいなツールを使うか、
ライブラリを作ってDFLAGSでリンクするように設定するか
となるとimportするだけで使えるライブラリって無理か
0889デフォルトの名無しさん
2009/09/09(水) 22:02:03ttp://d.hatena.ne.jp/haru-s/20060921/1158843229
をさらにいじってこうしてる
long hexToDecimal(char c) pure
{
return hexToDecimal([c]);
}
long hexToDecimal(in char[] str) pure
{
long sum;
foreach(char c; str)
sum = sum*16 + ((c|0x20)-'0')%('W'-'0');
return sum;
}
0890デフォルトの名無しさん
2009/09/09(水) 22:06:23#includeするだけで使えるライブラリ?
これの出番かw
mixin(import(filename.d"));
0891デフォルトの名無しさん
2009/09/09(水) 22:14:27見るからに邪悪すぎるwww
0892デフォルトの名無しさん
2009/09/09(水) 22:23:33ありとあらゆる関数をテンプレートにすればいいよ.
0893デフォルトの名無しさん
2009/09/09(水) 22:27:04なんかリンクする必要があるなら、ちゃっかりライブラリ側でpragma(lib,"foo.lib");とかやっちゃえばいい気がする。
0894デフォルトの名無しさん
2009/09/09(水) 22:47:02{
return "Hello,world!";
}
T func(T : int)()
{
return -1;
}
void main()
{
string str = func();
writeln(str);//Hello,world!
}
これが動いたらやりたいことが色々できるんだけど無理かなぁ
0895デフォルトの名無しさん
2009/09/09(水) 22:57:02とかの時だけ特別にエラーでいいからやってほしいよな
0896デフォルトの名無しさん
2009/09/09(水) 23:03:40autoを例外にすればやってやれないことはないと思うんだけどな
0897デフォルトの名無しさん
2009/09/09(水) 23:17:22>>888
C++のようにはいかないんですね。
>>890
それはちょっとw
>>892-893
なるほど。テンプレートだけならいけるんですね。
0898デフォルトの名無しさん
2009/09/09(水) 23:53:57Error: no object files to link
というエラーが出たんですが、これはどういう意味なのでしょうか?
0899デフォルトの名無しさん
2009/09/10(木) 00:15:45例外指向プログラミングときいて!
0900デフォルトの名無しさん
2009/09/10(木) 00:30:180901デフォルトの名無しさん
2009/09/10(木) 02:07:19左辺値から右辺値を推論って最近話題だよね
0902デフォルトの名無しさん
2009/09/10(木) 07:35:41parse!int("0xff")に統合して欲しいところだが
N進数文字列から数値への変換関数とどちらがいいか・・・?
toは数値からN進数文字列への変換関数としても使えるようだ
0903デフォルトの名無しさん
2009/09/10(木) 13:49:03baseを指定した場合はプレフィックスでエラー
がいいと思う。
0904デフォルトの名無しさん
2009/09/11(金) 17:15:450905デフォルトの名無しさん
2009/09/11(金) 18:16:590906デフォルトの名無しさん
2009/09/11(金) 19:03:490907デフォルトの名無しさん
2009/09/11(金) 19:28:02もっとも、そのままじゃD2で動かんが。
0908デフォルトの名無しさん
2009/09/11(金) 19:42:15openglの奴は修正なしでD2でも動いたよ
0909デフォルトの名無しさん
2009/09/11(金) 19:49:000910デフォルトの名無しさん
2009/09/11(金) 20:06:200911デフォルトの名無しさん
2009/09/11(金) 20:22:350912デフォルトの名無しさん
2009/09/11(金) 20:25:26void main(string[] args) {
string dir = std.path.dirname(args[0]);
}
これmain以外の所から取れるんだろうか?
0913デフォルトの名無しさん
2009/09/11(金) 21:03:12Windowsではmainのargを初期化するのにGetCommandLineWを使っているから
argv[0]は完全修飾のファイルパスになるけど、
PosixではCランタイムに依存しているので必ずしもディレクトリ部がついているとは限らないし
そこにファイル名が入ってすらないかもしれない。
正確を期すならばGetModuleFileNameを使ったり、Linuxなら/proc/self/exeのリンク先を見たりするのがいいと思う。
OSXやFreeBSDはしらない。
0914デフォルトの名無しさん
2009/09/11(金) 22:53:19WSAAsyncSelect(SOCKET, HWND, u_int, long); は
WSAAsyncSelect(SOCKET, HWND, u_int, int); じゃないかと思うんだが、どうだろう。
0915デフォルトの名無しさん
2009/09/11(金) 23:14:14って文法上は認められてるみたいだけどこれいくつになるの
0916デフォルトの名無しさん
2009/09/12(土) 00:10:20整数リテラルの説明のBNF?表記だけみればそうかもだけど
>整数の途中に文字 '_' を入れることができます。 この文字は単に無視されます。
て説明されてて、dmdはちゃんとしたエラーだしてるから、
文法上許してない、でいいんじゃね?
0917デフォルトの名無しさん
2009/09/12(土) 00:39:40複数のソースをビルドする時、手動でコンパイル引数を入力するしかないのでしょうか?
ctrl+クリックでソースを複数選択した状態でビルドしても、1つのソースしかビルドされていないみたいです。
0918デフォルトの名無しさん
2009/09/12(土) 01:20:070_
はどうかな
文法上は10進数じゃなくて8進数になるはずだけど
0x_がエラーならこれもエラーなのかな
でも0_がエラーで1_はOKってのもなんか変だよな
あと _._ は浮動小数点数になるのかな
_1._2は浮動小数点数1.2なのか_1オブジェクトの_2メンバなのか
よく読むとこの辺の文法ツッコみ所満載だな
0919デフォルトの名無しさん
2009/09/12(土) 01:30:31ヒント: 字句解析と意味解析は別
0920デフォルトの名無しさん
2009/09/12(土) 01:33:59そのりくつはおかしい
http://www.kmonos.net/alang/d/2.0/lex.html
ここを読めばわかる
0_ は _ が無視されてただの 0 なので、整数リテラルの、Decimal
_._や_1._2は、 _ から始まるため、 Identifier
0921デフォルトの名無しさん
2009/09/12(土) 01:44:20いやいや、そこの文法に忠実に従うとそうなるっていう話なんだけど
Decimalは「0」一文字か、NonZeroDigitから始まる必要があるから
0_ はDecimalではない
一方「_」はOctalDigitなので0_はOctalに適合する
したがって0_ はOctal
一方、DecimalFloatは「DecimalDigits . DecimalDigits」で、
「_」はDecimalDigitなので _._や _1._2 はDecimalFloatに適合する
もっとも _ や _1 がIdentifierに適合するのは確かだけど、
字句解析はmaximal munchルールだから先読みしてやはり _1._2 はDecimalFloatに適合する(>>919の指摘通りですね)
スペース入れて 「_1 . _2」ならIdentifier2つとドットになるんだろうけど
0922デフォルトの名無しさん
2009/09/12(土) 01:55:120923デフォルトの名無しさん
2009/09/12(土) 02:00:44._e+_f
がFloatLiteralに適合してしまう
0924デフォルトの名無しさん
2009/09/12(土) 03:36:01実装を変えたのにドキュメントはそのままの箇所も結構あるし。
0926デフォルトの名無しさん
2009/09/13(日) 13:40:19・リテラル先頭に'_'はおけない(Identifierになるから)
・DecimalDigits,HexDigits,OctalDigits,BinaryDigits は
'_'以外の該当文字が必要('_'のみで構成されるのは不可)
って感じ?
(BNFでない説明も読めば、あまり勘違いしそうにないような
気もするけど)
0927デフォルトの名無しさん
2009/09/13(日) 14:14:22モジュールのスコープ解決演算子 '.' を使ってモジュール全体のスコープから_0というIdentifierを探すのか、
0.0 という意味の double型の浮動小数点数リテラルなのか、
仕様を全部読んでもどっちが正しいのかわからないような。
0928デフォルトの名無しさん
2009/09/13(日) 16:07:420929デフォルトの名無しさん
2009/09/13(日) 18:10:01._1 は数字であって欲しくないなあ
0930デフォルトの名無しさん
2009/09/13(日) 18:35:260931デフォルトの名無しさん
2009/09/13(日) 18:54:48あ?
0932デフォルトの名無しさん
2009/09/13(日) 21:38:150933デフォルトの名無しさん
2009/09/13(日) 22:03:00ttp://www.digitalmars.com/d/2.0/function.html
main() Functionの例古すぎじゃね?
0934デフォルトの名無しさん
2009/09/14(月) 19:00:210935デフォルトの名無しさん
2009/09/14(月) 20:55:280936デフォルトの名無しさん
2009/09/14(月) 20:57:170937デフォルトの名無しさん
2009/09/14(月) 21:01:110938デフォルトの名無しさん
2009/09/14(月) 21:04:330939デフォルトの名無しさん
2009/09/14(月) 21:56:14mixin(parse!(import("mymodule.pd")));
とかしてやるわけか。
0940デフォルトの名無しさん
2009/09/14(月) 22:07:330941デフォルトの名無しさん
2009/09/14(月) 22:19:180942デフォルトの名無しさん
2009/09/14(月) 22:28:060943デフォルトの名無しさん
2009/09/14(月) 22:56:550944デフォルトの名無しさん
2009/09/14(月) 23:54:10version1.6.1を使ってみたところ上手くhtmlを吐いてくれない。。
0945デフォルトの名無しさん
2009/09/15(火) 00:18:30-Dすれば?
ソースが複雑だとDMDですら落ちるけど。
0946デフォルトの名無しさん
2009/09/15(火) 01:01:36レスthx
オプション知らなかった、試してみます。
0947デフォルトの名無しさん
2009/09/15(火) 04:38:29いちいち module や import などで A. って付けないといけないですか?
だとしたらメンドクサイ・・・。
0948デフォルトの名無しさん
2009/09/15(火) 05:57:57-IA
0949デフォルトの名無しさん
2009/09/15(火) 07:11:590950デフォルトの名無しさん
2009/09/15(火) 07:22:510951デフォルトの名無しさん
2009/09/15(火) 09:49:30俺ケータイなので
誰か次スレ立てておk
0952デフォルトの名無しさん
2009/09/15(火) 13:20:29なるほど、どうもありがとう!!
0953デフォルトの名無しさん
2009/09/16(水) 03:39:32消したら?
0954デフォルトの名無しさん
2009/09/16(水) 03:53:00C++のデストラクタのようなものを期待してれば裏切られる。
Dのクラスオブジェクトのデストラクタは、
Javaや.NETでいうファイナライザに相当するもの。
レス数が950を超えています。1000を超えると書き込みができなくなります。