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)
528 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:30:56 ] 連想配列のlengthは読み取り専用だから>>261 は動かなくて当然だけど、 >>514 は連想配列か普通の配列かの判断が甘いから起こるのかな。 typedefすれば確実に普通の配列だとわかるからlengthに値をセットできる、と。
529 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 00:47:32 ] >>528 その理屈はおかしい、 >>261 のaは連想配列ではなくて動的配列だし、 typedefすることによって型の曖昧さが減るということもありえない。
530 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 07:09:37 ] 実行環境がLinuxだからとかではなくて?
531 名前:518 mailto:sage [2008/06/24(火) 08:01:25 ] 一応説明すると、 配列のところ読んだら連想配列も動的配列も長さ0で初期化されるとあったから ふとtypedefするときに初期値を新しく指定できるっていうのを思い出して試しただけだったり (最初は適当な配列で初期化しようとしたけど、連想配列リテラルがよく分からないからnullにしたら動いた) 試しにtypedefの = null を削るとcodepadでもTimeoutする 何で初期値指定すると動くのかとかはよく分からんが
532 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 15:15:58 ] >513 できました!ありがとうございます。
533 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:30:23 ] >>531 本来、nullと長さ零の配列は同じ扱いのはずなんだけどねえ
534 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 21:55:41 ] 全く同じわけではないらしい void main() { int[] a = null; int[] b = [1,2,3]; b.length = 0; assert(a == b); // success assert(a is b); // fail }
535 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 22:30:46 ] >>533 最初の頃はそういってたけど、いつの間にか仕様が変わったらしい。
536 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 11:08:17 ] 下記のように場合に、インナークラスから自身が持つフィールドと同名の 親階層のフィールドにアクセスしたい場合の方法ってありますか? 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 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 11:28:43 ] >>536 ttp://www.kmonos.net/alang/d/2.0/class.html#nested
538 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 11:50:47 ] >>537 ありがとうございます。 this.outer.Value_ でいけました。
539 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 13:42:23 ] そういえば outer ってキーワードなのな
540 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 20:34:50 ] conceptまだー?
541 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 01:31:03 ] image.blog.livedoor.jp/warosmania/imgs/0/6/063e2fb7.jpg
542 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 01:38:53 ] 何やらブラクラ危険と専ブラが教えてくれるのだが
543 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 08:44:44 ] >>542 心霊写真と見せかけてしばらく見てると白粉野郎がアップになるやつ。
544 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:03:15 ] しばらくってほど時間が経過しないのがなんだかな じーーっくりと見させてからやった方がダメージ大きいのに
545 名前:デフォルトの名無しさん mailto:sage [2008/06/26(木) 16:27:51 ] 専ブラによってはアニgifのサムネイルが最後の1枚になってたりして効果ない びびったけど
546 名前:デフォルトの名無しさん [2008/06/28(土) 02:31:24 ] >>541 びびった。だがD関係ねーや。 あるいはこれがまだ見ぬヲルタンの素顔なのか?
547 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 02:58:59 ] ウォルたんにヒゲはあるのだろうか
548 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 04:10:10 ] テンプレートって計算完備?
549 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 06:08:29 ] 折りたたむだけ
550 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:30:05 ] hoge hige hage
551 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:40:23 ] 朝起きたら枕元に美少女死神が立ってて鎌で殺してくんねえかなあ…はぁ…
552 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:45:54 ] Constraintsって何か意味あるんですか? static ifで同じことができる気がするんですが
553 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 17:48:19 ] >>552 分けてかけることに意味があるんじゃない? よくわからんけど。
554 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:03:45 ] >>553 うーん、わざわざ構文拡張してまでやることなのかな… まあよく考えたら将来的な理由かもしれないし、 あんまりこだわらないことにします
555 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:36:32 ] スクリプト言語ひとつ覚えたんで、次は念願のコンパイル型言語を――と思って Dを狙ってるんですが、このスレ見る限りやめたほうがいいような気がしてきました。 この言語将来性あるんでしょうか? こんなに利用者にコケにされてる言語はじめてみた。
556 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:41:27 ] このスレは信者だらけだから、少なくともコケにはされてないだろ。
557 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:43:11 ] ……コケにされてるか? むしろこのスレでは愛されてると思うんだがな。 まあそれはさておき、バイナリ吐く言語使いたいなら素直ににC/C++やった方がいいと思うんだ
558 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 21:49:54 ] >555 初のコンパイラ方式をDにするのはやめたほうがいいのではないかと。 CかJavaかC#が良いと思う Dは、ある程度以上の実力者が戯れるのには最適な言語だと思う
559 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:00:03 ] いろいろできたのう // 特殊化 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; }
560 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:04:41 ] Java出身者にはテンプレートが魔法に見えるから困る これだけでチューリング完全とかw
561 名前:デフォルトの名無しさん mailto:sage [2008/06/28(土) 22:11:52 ] なんというか、There's more than one way to do itって感じになってきたな…
562 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 00:37:59 ] もともとそういう志向はなきにしもだったからな でもテンプレート周りとかconst周りはmore than one wayだけでもないぜ。 コンパイル時に決定可能かどうかという重大な違いがある
563 名前:555 mailto:sage [2008/06/29(日) 00:48:50 ] 色々ありがとうございます。 言語仕様や標準ライブラリにいろいろけちつけるのは愛の鞭だったんですね。 初のコンパイラ型言語ってわけでもないので(Cを一通り。MinGWのWindows SDKにあちこち不備があるのが鬱陶しくなってやめた) 忠告を聞かずにDの世界に飛び込んでみます。
564 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 00:55:09 ] >不備があるのが鬱陶しくなってやめた ここがひっかかるw Dはそんなのの塊のような気がす
565 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 01:02:32 ] ゲーム作るのでなければwxDを使えばいくらか幸せになるかと
566 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 01:24:57 ] >>564 > >不備があるのが鬱陶しくなってやめた > ここがひっかかるw w まああの頃とは一味違うつもりなんで……不備は自分でどうにかできる、といいな。 >>565 GUIツールキットってメモリ喰いであまりいいイメージないんですよね。 せっかくWindows API結構覚えてるんで生で頑張ります。 と、ここまで書いてちょっと調べてみたらwxWidgetsって普通のGUIツールキットとはちょっと違うんですね。これは素敵かも。
567 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 11:58:28 ] メモリの配置を覚えるためにもやっぱC/C++あたりを使うのがいいだろうな CはやることやったらすぐC→C++でもいいと思うし
568 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:46:39 ] C++は時間の無駄だと思ってるからやっぱりDで
569 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 12:55:40 ] Dこそ時間の無駄で終わらなければよいが…って思ってる いつか仕事で使える日が来ることを期待してるが
570 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 13:11:16 ] 仕事で使わせてくれる会社に入ればいい
571 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 13:26:44 ] Hoge hoge = new Hoge(); SetWindowsLong(win, GWL_USER_DATA, &hoge); ってかんじでウィンドウにインスタンスをひも付けさせたら しばらくは使えるんだけど、そのうちインスタンスが まともにとれなくなるのはやっぱりGCのせい?
572 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 13:53:34 ] >>571 yes. どこかに参照を残しておかないとなくなる。
573 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 14:36:45 ] カーネルオブジェクトの中にある参照をGCが見つけられるわけがない
574 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 15:06:22 ] DのGCって、再配置型?
575 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 20:16:29 ] >>571 そもそもDのクラスは参照型なので、やるとしても Hoge hoge = new Hoge(); SetWindowsLong(win, GWL_USER_DATA, cast(void*)hoge); こうじゃないか? &hogeだとhogeの寿命が来た時点でダメになる気がする。
576 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 21:58:12 ] >>575 GreenPadのソースみながらウィンドウプロシジャ周り(0x042444c7の)をDでやろうとした時に引っかかったw 冷静になって考えれば簡単なミスなんだが。結構考え込んだ気がする。
577 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:25:48 ] GWL_USER_DATAでぐぐったらこのスレが出た。 9時間弱しか経ってないのにgoogleすごいな
578 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 22:31:21 ] 最近のゴッゴル先生とか凄いよな… 足りない情報を探そうと思ったら〜というのを探してますっていう昨日の自分の書き込みがヒットしたり…
579 名前:デフォルトの名無しさん mailto:sage [2008/06/29(日) 23:56:57 ] 2chで質問して反応がないので、後日検索すると 自分の質問が検索結果のTOPにでる悲しさ
580 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 04:32:39 ] 最近のゴッコル先生は2chのクローリング頻度をやたら上げてるからな 2chで質問してから2時間くらいで自分の質問が引っかかったことがある しかし自分のブログは一切かからない
581 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 06:23:57 ] 更新頻度でクロール頻度も変えてたりするのかね
582 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 08:54:49 ] switch〜case で break 書かなきゃ下に降りちゃうの? こんなとこまでCを真似なくていいのに
583 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 09:08:02 ] caseで複数条件に対して一つの処理にしたいときにできないと困るじゃない
584 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 09:40:12 ] >>541 見て心臓が痛くなったんだけど訴えたら勝てるかな
585 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 09:54:58 ] すぐ下でびっくり系のブラクラって説明されてるのにクリックするなよ
586 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 10:17:15 ] 2ちゃんねる鉄の掟. 出されたご飯は残さず食べる。 転んでも泣かない。 おいら(ひろゆき)のギャグには大爆笑する。
587 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 12:46:30 ] >>583 switch(n) { case 1: ... case 2,3: ... case 4,5,6: ... } でいい
588 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 12:50:23 ] そんなことよりもほかの言語との整合性が取れなくなって余計なヒューマンエラーが発生することのほうが問題。 って我らがうぉるたーたんのお達しだ。諦めておけ。
589 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 12:52:13 ] まぁ、違う仕様にするならキーワードを case じゃなくて when にするとか しないと混乱するしな。
590 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 13:54:04 ] 個人的にはswitch_breakみたいな名前でも欲しい でも、無くてもそんなに困らないし、 そんなことよりライブラリをどうにか…
591 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 20:41:27 ] case 0..10とかできないのかな。VBみたいだけど。
592 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:14:06 ] いよいよ ... がほしくなる
593 名前:デフォルトの名無しさん mailto:sage [2008/06/30(月) 23:23:22 ] vbといったらcase is
594 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 01:54:49 ] MPDさんのウィンドウは閉じないww
595 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 01:55:25 ] 誤爆すまぬ
596 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 03:47:38 ] >584 はbreak; って書かれても fall thru しちゃういけない子
597 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 05:58:54 ] switch (url) { case ブラクラ: if (res!=584) throw new bad_res; } こうですか?わかりま(ry
598 名前:デフォルトの名無しさん mailto:sage [2008/07/01(火) 06:10:32 ] res = 584;goto case ブラクラ;
599 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 10:50:14 ] nullオブジェクトにアクセスしたときにAccess Violationになりますが、 このときにうまくスタックトレースを取る方法がありますでしょうか。 flectionedを使うと例外の場合のスタックトレースは取れたのですが……
600 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 16:43:35 ] そこはddbgじゃねーかな
601 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 17:13:59 ] 関数内で定義したローカル変数のポインタを返しても大丈夫ですか? int* Func(){ int Num = 10; return &Num; } みたいにした場合にスコープを抜けてもアドレスは有効なのでしょうか。
602 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 17:22:57 ] 今年のD言語カンファレンスは、スピーカが集まらなかったので中止に lists.puremagic.com/pipermail/digitalmars-d-announce/2008-July/009696.html il|li orz il|li
603 名前:601 mailto:sage [2008/07/02(水) 17:45:01 ] 自己解決。 良いわけないですね。コンパイルエラーになりました。
604 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 17:49:37 ] >>602 あらぁ…w
605 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 20:06:05 ] 東京でやってくれるなら喋りに行くのに。
606 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 20:37:56 ] ネタがないっす
607 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 20:40:31 ] 英語ミリ
608 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 21:52:24 ] >>602 え?どうせ行くつもりなかったけどいつ募集してたの?
609 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 21:57:19 ] >>608 普通にずっとNGで募集してたと思うが。
610 名前:デフォルトの名無しさん mailto:sage [2008/07/03(木) 21:56:38 ] 更新まだー?
611 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 01:03:37 ] おまいらNGって何で読んでる?
612 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 02:46:14 ] 俺はfirefox
613 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 06:42:09 ] thunderbirdで読んでる
614 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:28:12 ] 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); } のような事をやりたいのですが。
615 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 16:58:48 ] 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とかいまさら使いたくないし
616 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 17:08:14 ] 時間ないから簡単に 前者はmixinで文字列生成 後者は static bool Func(int Value)(int Src){return Src < Value;} eliminate!(Func!(10))(Nums) とか? 試してないから間違ってたらごめん
617 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 17:10:44 ] ええい mutable typeからinvariant typeへは明示的な変換が必要だからidup string s = stream_.readLine().idup;
618 名前:615 mailto:sage [2008/07/04(金) 17:45:28 ] >>617 っていうか標準ライブラリなんだからinvariant仕様に直しとけと言いたい Fileをカプセル化した自前クラスで美味しくいただけそうです
619 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 21:35:03 ] std.stringは全部をconst(char)[]にしてもらいたい 更新まだかなぁ・・・
620 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 23:50:07 ] >>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); }
621 名前:デフォルトの名無しさん mailto:sage [2008/07/04(金) 23:55:51 ] >>616 後者は動きました。 >614のコードにはめると eliminate!(Func!(Value))(Nums) で動きますね
622 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 01:33:35 ] Valueを用意する必要がないのでは? あえて定数に名前を付けたいのなら enum Value = 3; をおすすめ
623 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 01:34:07 ] あと std.bind はずっとぶっこわれ中
624 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 11:41:28 ] lazyな引数を関数外部に持っていく方法あったら教えてくれ〜
625 名前:デフォルトの名無しさん mailto:sage [2008/07/05(土) 13:46:31 ] 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); のようなことがやりたいのです。
627 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 01:47:05 ] 謎さんとこのstd.expressionとか。
628 名前:デフォルトの名無しさん mailto:sage [2008/07/06(日) 01:49:21 ] phobosのstd.algorithmはコンパイル時に決定してる関数しか受け付けないから不便だな。 とっとと、static引数導入してオーバーロードで関数ポインタとかも取れるように整理してほしいわ