1 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 23:00:35 ] プログラミング言語 D (D Programming Language) について語るスレッドです。 過去スレは >>2 ■本家 ttp://www.digitalmars.com/d/ ttp://www.kmonos.net/alang/d/ (和訳) ■コンパイラ ttp://www.digitalmars.com/d/dcompiler.html (DMD, 本家) ttp://dgcc.sourceforge.net/ (GDC, gccフロントエンド) ttp://gdcmac.sourceforge.net/ (GDCのmac用バイナリ) ■参考URL ttp://f17.aaa.livedoor.jp/~labamba/ (D言語研究) ttp://dsource.org/ (dsource) ttp://tinyurl.com/3da5oa (C/C++に疲れた人のD言語) ttp://www.kmonos.net/alang/wnd/ (わかったつもりになるD言語) ttp://shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか) ttp://shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座)
313 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 22:38:20 ] 逆逆。むやみにインライン展開されて逆に遅くなってるだけ。
314 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:37:29 ] -inlineつけたらどこまでインライン展開されるの? main以下全部ってわけじゃないよね
315 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:37:29 ] いやいや、例えば配列の境界チェックありで要素を取り出そうってので以下のような コードでテストしたらテンプレート化したほうは確実に遅いんだよね。-inline つけてもつけなくても。 size_t at(T)(T[] a, size_t i){ if( i < a.length ) return a[i]; else throw new ArrayBoundsException(null, 0); } void main() { char[] a = new char[64 * 1024 * 1024]; auto begin = timeGetTime(); for(size_t i = 0; i < a.length; i++) { if( i < a.length ) a[i] = a[i]; else throw new ArrayBoundsException(null, 0); } Stdout.format("{}", timeGetTime() - begin).newline; begin = timeGetTime(); for(size_t i = 0; i < a.length; i++) { a[i] = a.at(i); } auto end = timeGetTime(); Stdout.format("{}", timeGetTime() - begin).newline; }
316 名前:315 mailto:sage [2007/12/19(水) 23:40:33 ] で、上のコード実行すると最初のテンプレート化してないほうが 75ms ぐらいで、 下のテンプレート化したほうが 350ms ぐらいだった。-inline つけてもつけなくても一緒。 -inline つけたやつを逆汗したら当然展開されていなかった。
317 名前:デフォルトの名無しさん mailto:sage [2007/12/19(水) 23:50:00 ] どうでも良い事でスマソ。 逆アセって事は、直接アセンブラを吐けないコンパイラなの?
318 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 00:47:37 ] ?? もっと平易な表現でお願い。
319 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 06:44:43 ] マイクロソフトって単位?
320 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 10:02:05 ] >>317 gdcは吐けるdmdは吐かない
321 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 22:01:20 ] dsss + Tango でリソースファイルをリンクするのにはどうするの? dmd-win-tangoとかdsss.confとか見たけどよくわからんかった…(´・ω・`)
322 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 22:48:22 ] >>320 thanx
323 名前:デフォルトの名無しさん mailto:sage [2007/12/20(木) 23:09:21 ] dmdの場合はオブジェクトファイルをdmのobj2asmにかければ大丈夫じゃね?
324 名前:デフォルトの名無しさん mailto:sage [2007/12/21(金) 13:48:13 ] 更新まだかなぁ・・・
325 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 00:40:57 ] >>324 じゃあこれで。 Tango 0.99.4 Frank has been released.
326 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 18:32:51 ] D言語ってJavaのJFrameみたいに簡単にウインドウ出せるの?
327 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 19:14:41 ] AWTのD-portingのDWTを使ってみるとか。
328 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:04:45 ] DFLならこう // www.dprogramming.com/dfl.php import dfl.all; int main() { Form myForm; Label myLabel; myForm = new Form; myForm.text = "DFL Example"; myLabel = new Label; myLabel.font = new Font("Verdana", 14f); myLabel.text = "Hello, DFL World!"; myLabel.location = Point(15, 15); myLabel.autoSize = true; myLabel.parent = myForm; Application.run(myForm); return 0; }
329 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 00:43:29 ] tango の最新版、日付・時刻関連が少しすっきりしたけど、まだ手の入る余地がありまくってるな。
330 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 03:17:45 ] >>327 DWTはSWTよ あと開発止まってるぽい
331 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 04:52:40 ] とりあえずTango0.99.4のtango.util.Convertの792行目あたりがあやしい。 returnで返さないっぽい
332 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:06:20 ] DFLは付属のdfl.exe使わされるのが嫌で使ってないなあ dmd.exeだけでできたい!
333 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 14:08:07 ] dmdでも長ったらしいオプションつけるか、応答ファイル書くかしておけばいけるでしょ。
334 名前:デフォルトの名無しさん mailto:sage [2007/12/23(日) 22:14:13 ] 寧ろDFLのモジュールとlib以外の使い道知らんかった
335 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:57:56 ] ヲルたんからのクリスマスプレゼントwktk
336 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:36:16 ] 実際もうじき約一か月たつし、先月と先々月の更新の日付から見たら夢見てもいいかも? とりあえず全裸待機。
337 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:37:06 ] 風邪ひくぞ
338 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:44:08 ] いい子にして早く寝ないとな… をるたんのとこでは今何時かしらないけど
339 名前:デフォルトの名無しさん [2007/12/25(火) 22:36:46 ] >>110 でも出てるけど Assertion failure: 't->deco' on line 608 in file 'mtype.c' はいつなおるんだあああ
340 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 07:10:52 ] 全裸待機。 この前のカンファで目玉はなんだっけ あまり意味なさそうな static foreachしか覚えてないw
341 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 11:36:34 ] const属性を考慮してphobosが書き換えられているようだ
342 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 11:57:38 ] >>340 macro ADL 拡張メソッド static引数(関数テンプレートの糖衣構文) メンバの委任 コンパイル時に全てのcaseが網羅されているか検証するfinal switch あたりだったか。
343 名前:331 mailto:sage [2007/12/26(水) 21:03:27 ] Tango0.99.4のtango.util.Convertの792行目あたりがあやしいかったのは、rev3066で直ったみたいだ。 しっかし、Tangoもどこまでやったら1.0出す気なんだろ。 まぁ確かにもっとインターフェース良くなるところは多いと思うけど。
344 名前:デフォルトの名無しさん mailto:sage [2007/12/26(水) 23:55:05 ] 2.0で追加されたphobosのライブラリを 1.0でも使えるようにするプロジェクト std2 が dsource にできてるね
345 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 00:14:25 ] それよりアップデートはまだなのか
346 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 20:34:53 ] extern(C++)便利だなこりゃ
347 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 21:19:39 ] >>346 あれってC++のソースのコンパイルをmsvcではなくdmcでしなきゃいけないんだよね? そう思ってstlportのセットアップが面倒で試してないんだが面白そう
348 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 21:27:47 ] C++のobjもOMFとCOFFって分け方でいいの? DMDはOMDってことになるのかな?
349 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:29:41 ] >>347 いやいや、VisualStudioで作成したやつだよ。 〜.libをlink.exeにくわさないとだめだけど
350 名前:デフォルトの名無しさん mailto:sage [2007/12/27(木) 22:43:51 ] 正確には dmc も msvc も同じ修飾名を使っているので問題がない。 Linux ではどうなってるかしらん。
351 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:18:13 ] extern(C++)といえば、interface宣言を使ってC++のオブジェクトをDからアクセスできるようになったけど、これの場合はCOMと同様にC++マングルは関係なくなるのかな?
352 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:40:44 ] いえす。C++マングリング規則にD側が合わせることになる。
353 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:41:45 ] COMインターフェイスってどういう条件で普通のインターフェイスからCOMインターフェイスになるの? IUnknownを継承するだけでいいの?
354 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 00:58:33 ] >>352 ? DのinterfaceがC++のオブジェクトモデルと互換性があるということで、実際のシンボル名関係なしにVTbl手繰ってメソッド呼べるのかなぁと思ってたんだが、この場合でもあの_ZN3なんとかみたいなシンボル名からメソッドを呼び出しているの? >>353 MS用語でいう"カスタムインターフェイス"ならIUnknown継承だけでCOMインターフェイスだったと思う。 実際にCOMコンポーネントとして使えるようにするにはいろいろ登録したり、QueryInterfaceの動作要件とかあったはず。
355 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 07:58:40 ] >>353 extern(Windows)なinterfaceだったと思う。
356 名前:デフォルトの名無しさん mailto:sage [2007/12/28(金) 11:02:18 ] >>353 IUnknownって名前のインターフェイスを継承するだけでいいみたい。 interface IUnknown { } interface ITest: IUnknown { } void main(){ ITest o; delete o; //Error: cannot delete instance of COM interface ITest }
357 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 07:09:33 ] COMインターフェースが何に使えるかおすえて
358 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 08:44:34 ] DLL を通してクラスを提供可能。
359 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 13:30:23 ] news://news.digitalmars.com:119/fl2jnu$1i6p$1@digitalmars.com > Subject: During these holiday times... > From: Walter Bright > Date: 2007/12/28 19:38 > > ...we should take a moment to reflect on the important things in life. > > uk.youtube.com/watch?v=s_QpBhdvK2Q
360 名前:デフォルトの名無しさん mailto:sage [2007/12/29(土) 19:47:29 ] えw
361 名前:デフォルトの名無しさん mailto:sage [2007/12/30(日) 01:03:28 ] >>349 ごめんできない // cpp.cpp #include <iostream> #include "cpp.h" void Cpp::func() { std::cout << "call Cpp::func()" << std::endl; } Cpp* newCpp() { return new Cpp; } void deleteCpp(Cpp* instance) { delete instance; instance = NULL; } これをmsvcでコンパイルして cpp.lib もしくは cpp.obj を作った
362 名前:361 mailto:sage [2007/12/30(日) 01:04:06 ] // main.d extern(C++) { interface Cpp { void func(); } Cpp newCpp(); void deleteCpp(Cpp instance); } void main() { Cpp cpp = newCpp(); cpp.func(); deleteCpp(cpp); } >dmd -c main.d >link main.obj cpp.lib OPTLINK (R) for Win32 Release 7.50B1 Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved d_to_cpp.lib Error 43: Not a Valid Library File --- errorlevel 1 何がまずいですか?
363 名前:361 mailto:sage [2007/12/30(日) 01:06:09 ] 間違えた C++のソースはcpp.cppじゃなくてd_to_cpp.cpp
364 名前:349 mailto:sage [2007/12/30(日) 07:27:19 ] ごめん、 libにくわすんじゃなくて implib.exe だった C:\dm\bin\implib.exe /s $(OutDir)\$(TargetName).d.lib $(TargetPath) こういうことをやってます。 で出力された 〜.d.lib を lib.exe でリンクね
365 名前:デフォルトの名無しさん mailto:sage [2007/12/31(月) 21:25:36 ] 皆さんよいお年を をるたん来年もよろしく 2008.1.1の更新きたい
366 名前: 【小吉】 [2008/01/01(火) 03:26:27 ] あけおめ アップデート期待age
367 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 09:51:38 ] あけおめ をるたんところは、夕方ごろ年明けだよね。
368 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 11:10:14 ] ああ、アメリカかあ。生アメリカだよなあそこ。いいなあ。。。
369 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 12:05:15 ] D3.0が出ると聞いて
370 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 14:32:33 ] D 0.2008 になると聞いてやってきました。
371 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 17:57:30 ] 今年こそは伝説のIDEが現れますように
372 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 19:55:39 ] その前に伝説の言語仕様が現れないと
373 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 20:34:40 ] 2.009ktkr…なにこのがっかり変更数 裏で何か巨大なものを作ってると思って待つしかないか…
374 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:40:06 ] これはがっかりすぎる…
375 名前:デフォルトの名無しさん mailto:sage [2008/01/01(火) 21:44:13 ] CTFE周りのバグフィックスはまあ嬉しい
376 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:31:55 ] 新バージョンへの期待大きすぎワラタ > Redid const/invariant semantics again. やり直し…? どう変わったのかよく分からないや。
377 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 00:57:17 ] >>110 が直ってないし・・・
378 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:01:54 ] >>376 void f(const(int) x); void f(int x); のオーバーロードが出来るようになってるのは確認した。 invariant(int) i; i = 4; もできなくなってるから、トップレベルのconst/invarinatの扱いが変わったみたいね。
379 名前:378 mailto:sage [2008/01/02(水) 01:06:56 ] invariant T var; invariant(T) var; ドキュメントによれば、この二つが完全に等しくなったみたいだね。 やっと気持ちの悪いねじれが解消された感じ。ようやくだけど。
380 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:16:41 ] 全く同じ関数が二つ以上あっても呼ばれなきゃエラーにならなくてワロタ。
381 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:20:05 ] >>380 おおほんとだ。 リンカエラーにはなるけど、コンパイラはお咎めなしなんだな
382 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:31:48 ] Manifest Constant enum string s = "hoge"; もはやenumの意味が消失してしまってる…
383 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 01:42:20 ] だめだ…をるたたん止めないと… class C { } void main() { const(C) c; c = new const(C); // error!!! }
384 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:15:44 ] struct A {} A a0; const A a1; a0= a1; //Error: cannot implicitly convert expression (a1) of type const(A) to A をるたん・・・
385 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:40:31 ] >>384 それは今まで出来たのがおかしい気がする。
386 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:49:24 ] >>385 >>384 じゃないけど、構造体の代入はビットコピーなんだからできないとおかしいだろう。
387 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 02:51:46 ] >>386 例えば、Aがint*型のメンバを持ってたとしたら、 const(int)*からint*への暗黙の型変換が起きてしまうと思うのだけど。
388 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 03:00:16 ] >>387 そういや、そうか。すんません。
389 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 08:53:49 ] >>387 const(int*)にならないの?? おれがわかってないのか??
390 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 09:19:51 ] >>384 Replace: > const(C) c; > c = new C(1); // error with: const(C) c = new C(1); だってさ ttp://www.digitalmars.com/pnews/read.php?server=news.digitalmars.com&group=digitalmars.D.announce&artnum=10964
391 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 10:01:38 ] >>390 ん? それ>>383 のだよね。
392 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 12:27:38 ] >>387 ポインタを含む場合だけエラーってのでいいと思うんだけどなあ。
393 名前:390 mailto:sage [2008/01/02(水) 12:31:13 ] >>391 そそ、ごめん
394 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 16:11:30 ] >>377 これなおらなきゃまともに窓作れないよ・゚・(つД`)・゚・
395 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 17:28:04 ] >>392 そんな例外はかえって必要ないだろう。
396 名前:デフォルトの名無しさん mailto:sage [2008/01/02(水) 22:25:48 ] budで-Xphobosつけないとphobosのソースもコンパイルされるという事実に気づいた 自動で付いてるもんだと思ってたのに・・・ひどい!
397 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:37:47 ] char[] hoge = new char[100]; と char[] hoge; hoge.length = 100; ってなんか違うことってある?
398 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 03:54:26 ] 意味的には違わないはず。生成されるコードは知らないけど。
399 名前:デフォルトの名無しさん mailto:sage [2008/01/03(木) 23:57:30 ] 構造体をcast(const)できないんだけど、どうすればいいんだ。
400 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:45:20 ] >>399 コードplz あとそれどんなときに必要?
401 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 01:52:26 ] struct S {int i;} void main() { auto a = [S(0), S(1)]; auto b = [cast(const)S(0), S(1)]; // Error: no property 'opCall' for type 'const(S)' } const(S)[] 型の配列リテラルが欲しいんだ。
402 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:12:20 ] >>401 これじゃダメ? import std.stdio; struct S{int i;} void main(){ const x = [S(0), S(1)]; writefln(typeid(typeof(x))); // (const(const(main.S)[2]) } 配列リテラル周りはいつもバグに悩まされるから使わない方が トラブルに遭わずに済んでいいかと
403 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:25:51 ] const(S) a = S(0); const(S) b = cast(const(S))S(0); 確かに、暗黙に変換できるのに、明示的にキャストできないのは気持ち悪いな。
404 名前:402 mailto:sage [2008/01/04(金) 02:26:57 ] どうもconst(S)とS(0)を同時に実現できないみたいなので下のzのようにするしかないんじゃない? import std.stdio; struct S{int i;} void main(){ const x = [S(0), S(1)]; writefln(typeid(typeof(x))); // (const(const(main.S)[2]) auto y = [S(0), S(1)]; writefln(typeid(typeof(y))); // main.S[2] const s = S(0); auto z = [s, S(1)]; writefln(typeid(typeof(z))); // const(main.S)[2] }
405 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 02:33:45 ] これでおk auto a = [delegate const(S)(){return S(1);}(), S(2)];
406 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 06:02:12 ] 似たようなやり方を前にも見たような気がする
407 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 21:56:14 ] phobosに16進文字列を整数に変換する関数ないの?
408 名前:デフォルトの名無しさん mailto:sage [2008/01/04(金) 22:37:09 ] と思ったけど、CTFEできないといけないから、いらないや
409 名前:デフォルトの名無しさん mailto:sage [2008/01/06(日) 22:58:00 ] もしかして引数なしの関数って、() なしで名前だけで呼び出せるのか
410 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:47:20 ] yes. プロパティっぽく扱えるようになってる。
411 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 00:48:22 ] >>408 それくらいの関数って作れなかったっけ?
412 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:23:48 ] yes. プロパティのための構文糖。
413 名前:デフォルトの名無しさん mailto:sage [2008/01/07(月) 01:24:57 ] リロし忘れてたごめんorz 答え方まで似てるってのが笑える。