1 名前:デフォルトの名無しさん mailto:sage [2011/08/24(水) 06:02:12.35 ] プログラミング言語 D (D Programming Language) について語るスレッドです。 ■前スレ D言語 Part27 hibari.2ch.net/test/read.cgi/tech/1303022487/ ■本家 www.digitalmars.com/d/ www.d-programming-language.org/ (ドキュメント) www.kmonos.net/alang/d/ (和訳) ■コンパイラ www.digitalmars.com/d/dcompiler.html (DMD, 本家) dgcc.sourceforge.net/ (GDC, gccフロントエンド) www.dsource.org/projects/ldc (LDC, バックエンドにLLVM) ■参考URL f17.aaa.livedoor.jp/~labamba/ (D言語研究) f17.aaa.livedoor.jp/~labamba/?D%B8%C0%B8%ECBOF (D言語BOF) dsource.org/ (dsource) tinyurl.com/candcpp2d2 (C/C++に疲れた人のD言語2.0) www.kmonos.net/alang/wnd/ (わかったつもりになるD言語) shinh.skr.jp/d/ (SDL, SDL_*, OpenGL, GLU, glutのポーティングとか) shoo.s20.xrea.com/shoo/programing (D言語とTangoの入門講座) www.nicovideo.jp/mylist/4453698 (D言語で作られた芝ゲー niconico動画) www.asahi-net.or.jp/~cs8k-cyu/ (ABA Games) dusers.dip.jp (D言語友の会) www.wish.sakura.ne.jp/desuno/game/Drawing (PrincessDrawing! D言語で作られた横スクロールSTG)
620 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:23:30.80 ] Universal Fire Contol System
621 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:47:40.01 ] これで敵軍も拾った武器で戦えるようになるね! っておい
622 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 10:39:17.88 ] 2.057でもHello, World1MBのまま?
623 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 13:05:42.51 ] import std.stdio; void main() { writeln("hello, world."); } ↑に -O -relese -inline 付けて 933404byte=911.5kbyteだった
624 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 14:06:17.81 ] クソだな
625 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 15:43:07.33 ] >>622 2.058から220KBに減るよ
626 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 15:50:05.25 ] 別にでかくても実害ないとは思ってるが、小さいバイナリ好きなのもちょっとわかる
627 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 15:58:44.05 ] >>625 リリース直後にそういう話が出てたから対応済みかと思ってたわ 2.057 に移行する意欲が減退・・・冬眠でもするか
628 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 16:43:49.87 ] サイズってそんなに重要? 配布するにしても7zとか使えば誤差みたいなもんだと思うんだけどなあ
629 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 17:50:25.84 ] その辺はPyの文法が許せるかとか MyClassName instance = new MyClassName(); の冗長性が許せるかとか そういうレベルの話だと思う。 気にする人もいればそうでない人もいる。
630 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 17:52:43.48 ] 小さいプログラムだと結構嫌だな、サイズでかいの まあそういうのはDなんか使わないでスクリプト言語でも使ってろって話なんだけど
631 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 18:46:43.46 ] 公開したり、他の人へあげるの、躊躇するよね 大した機能もないのに1MBだと、何か仕込んでるじゃないと勘ぐられそうでw
632 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:04:03.41 ] upx使うと147kbまでがっつりと減った。 こっちはこっちで抵抗あるとは思うが、いちおう。 しかし900kbってなんかDelphiを思わせるサイズだ。 Dってアルファベットになんか呪いでもあるのかとw
633 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:13:50.50 ] Deburin
634 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:19:14.70 ] そのファイルサイズ、大きいように見えるでしょ? でも、実際にはOSのシステムファイルと共通してる部分が多いから、実際にはそんなにサイズは食ってないんです。
635 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:41:09.33 ] いや表示されてるだけサイズ食ってるだろw ゼロパディングされてるわけでもあるまいし
636 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:41:48.93 ] 実際に900KB食ってるだろ
637 名前:デフォルトの名無しさん mailto:sage [2011/12/28(水) 23:43:30.61 ] これが本当のエクササイズ
638 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 09:47:22.63 ] upx使うと減るってことは冗長な記述が多いってことか……
639 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 12:49:18.74 ] Dは大らかな人達が開発してるんだよ ファイルサイズくらいどうってことないよ
640 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 15:14:24.01 ] 649 デフォルトの名無しさん [sage] 2011/12/29(木) 14:50:37.28 ID: Be: 学生プログラマ日本一決定戦(予選は社会人も参加可) ttp://codevs.jp/howto.html 現在予選開催中 応募締切 2012.1.6 12:00 おもしろいことやっているじゃん。誰か今から参加しろよ。
641 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 17:12:06.58 ] >>640 盛り上がってないからって あちこちで宣伝すんなよ
642 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 19:03:34.97 ] >>635 バイナリエディタでexe見てみたら、ゼロばかり並んでるw
643 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 20:32:50.15 ] タワーディフェンスだと・・・? codevs.jp/rule.html
644 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 20:40:47.22 ] Watch out, or you may attract a thunderbolt!!
645 名前:デフォルトの名無しさん mailto:sage [2011/12/29(木) 22:13:18.43 ] 久々にJavaScriptで書いてみたが、コンパイル時型チェックがないのは面倒ではあるな 大規模プログラミングでこれは使えないだろうとは思った。
646 名前:デフォルトの名無しさん mailto:sageman [2011/12/30(金) 12:35:56.70 ] だが、それがいい
647 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:45:55.76 ] 近頃のDはコンパイラアップデートしても割とすぐコンパイルできる代わりに 端々で以前と違う挙動をしてアプリをバグらせてくれる これはいいものだ
648 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 13:54:14.69 ] 年内今日明日で何か作る
649 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 17:31:39.90 ] import std.xml; import std.stdio; void main() { auto doc = new Document(new Tag("root")); auto e = new Element("elem"); e.tag.attr["attr"] = `"quot"`; // '"'入りの文字列 doc ~= e; writeln(std.string.join(doc.pretty(1),"\n")); } $ dmd -run x.d <root> <elem attr=""quot"" /> </root> 以前std.xmlで属性がエスケープされないって話があって、確か直ったはずなんだけど どうして戻ってるの…
650 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 18:11:03.14 ] std.xmlってなくなるんじゃないの?
651 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 18:21:06.27 ] Cのlongと同じ型!みたいなエイリアスが詰まったモジュールとかありませんか?
652 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 19:21:53.92 ] >>650 無くなるのはいいけどいつまで経っても無くならないなぁ 代替手段ができるまではちゃんとメンテしてほしす
653 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 21:13:57.83 ] >>651 Cはプリミティブ型のバイト数決まってないから無理
654 名前:デフォルトの名無しさん mailto:sage [2011/12/30(金) 21:54:49.34 ] >>653 だからこそdmcの型と対応するaliasが欲しいって話じゃね?
655 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 01:31:26.59 ] version か何かで分岐すれば良い
656 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 01:55:24.04 ] それをユーザ側でいちいち用意するのは馬鹿らしいってことじゃないの? intptr_tはあるけどな
657 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 08:00:29.16 ] 使う人いるのか、いないだろうな 他のライブラリポーティングするにしても大抵Uint8とかGLintみたいにそのライブラリ固有で型定義してるし
658 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 08:35:48.82 ] typedef long HogeLibInteger; D語に訳すにはどうすればいいんでしょうか
659 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 09:26:42.03 ] alias long HogeLibInteger;
660 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 15:51:22.55 ] typedefがオワコンになった今、今更キーワードaliasをtypedefに戻せない辺りに哀愁を感じる
661 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 16:02:11.71 ] 3.0に期待
662 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 16:30:12.61 ] @strong alias こんな感じで
663 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 20:10:52.35 ] どっちでもいいけどななー typedefに戻すメリットもたいしたものないし
664 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 21:16:57.34 ] typedefってJavaのgotoみたいな永久欠番になるのかな
665 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 21:18:15.30 ] 3.0開発し始めたら アンドレイ「いいこと考えた。1行で完全に新しい型を定義できる機能とか新しくね?」 ウォルたん「いいね!なぜかtypedefってキーワードが空いてるからそれ使おう」 ってなるよ
666 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 21:38:40.28 ] typedefの代わりに、structで包めばいいかな
667 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 21:55:14.94 ] 別にstrong typedefは新しい機能でもなんでもないぞ。C言語由来の型システムとはなじまないってだけで。
668 名前:デフォルトの名無しさん mailto:sage [2011/12/31(土) 23:28:12.64 ] リファクタリング...ひらめき...実装...リリース!
669 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 01:23:56.49 ] 灰になった!
670 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 04:42:41.23 ] 代替手段ができるまではメンテして欲しいよな
671 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 09:48:04.67 ] 代替手段ができるできる詐欺である可能性もあるからな そろそろD言語も元年を標榜してみる?
672 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 20:42:49.91 ] -propertyへの対応で元日終わりそう
673 名前:デフォルトの名無しさん mailto:sage [2012/01/01(日) 21:34:04.83 ] あれ? int func1() { return 1; } @property int func2() { return 1; } void func3(int i) { } @property void func4(int i) { } void main() { int i; // i = func1; // -propertyだとコンパイルエラー i = func2; func3 = i; // コンパイルできる… func4 = i; } これってそういう仕様なの?
674 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 05:53:20.19 ] Dって引数以外でref変数あるの?
675 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 10:10:17.53 ] >>674 関数の返り値はrefにできる。 変数自体には指定できないけど、ポインタやクラスで代替可能。
676 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 10:50:07.97 ] ありがとうございます。おとなしくポインタ使います
677 名前:デフォルトの名無しさん [2012/01/02(月) 11:24:20.97 ] ポインヨだろ 間違えるな
678 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 14:35:37.56 ] ポインティーヌ
679 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 18:08:52.92 ] >>673 https://github.com/D-Programming-Language/dmd/pull/279 パッチを出したがまだマージされていない
680 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 18:17:05.66 ] >>649 ざっとstd.xmlのコード見てみたが、 > e.tag.attr["attr"] = `"quot"`; // '"'入りの文字列 はTagクラスのpublicなattrフィールド(連想配列)に直接値を設定しているから、 encode/decodeとか何も動かない。 つまりそんな機能は元から無い様に見える。
681 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 19:20:56.52 ] Tagクラスの toNonEndString のところ decodeじゃなくて、encodeにすべきなんじゃないのか?
682 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 20:03:47.76 ] >>681 ああ、そっち(出力)の方か。確かにそこをencodeにすると、 outputがエンコードされるようになるな。 誰かbugzillaにレポート投げてくれればfixされるかも。
683 名前:デフォルトの名無しさん mailto:sage [2012/01/02(月) 22:54:27.85 ] >>679 やっぱバグなのね。ありがと つまり次のバージョンでもう半分の-property地獄を体験することになるわけだな これだからDはやめらんねぇ!
684 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 00:42:58.19 ] std.xml Commentクラスのコンストラクタ内 × if (content == "-" || content.indexOf("==") != -1) ○ if (content == "-" || content.indexOf("--") != -1)
685 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 05:59:45.30 ] おお やっぱ消えると分かっていてもメンテしてくれないと困るな
686 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 06:00:41.72 ] あるいはguthubで特定のソースに対するpatchを簡単に絞り込めないのかな
687 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 14:21:43.58 ] ネスト関数に事前条件無しで事後条件書くと構文エラーになるけど、 事前条件有りで事後条件書くとコンパイル通って動くんだけど、なんか理由があるのかな?
688 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 21:12:23.26 ] >>687 手元で試したら全部通ったけど、どんなコード書いたの?
689 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 22:31:29.87 ] >>688 void main() { string foo() //in //{ //} out (result) { assert(result.length == 0); } body { return null; } } __EOF__ このままコンパイルしようとすると構文エラーで通らない。コメントアウトすると通る。 ちなみにコンパイラはDMD64(v2.057)をUbuntu向けパッケージからインストールしたもの。
690 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 22:35:18.75 ] エラーメッセージはこんな感じ d.d(7): found 'foo' when expecting ';' following statement d.d(7): expression expected, not ')' d.d(7): found 'out' when expecting ')' d.d(8): found '{' when expecting ';' following statement d.d(11): Declaration expected, not 'body' d.d(14): unrecognized declaration
691 名前:デフォルトの名無しさん mailto:sage [2012/01/03(火) 23:08:59.74 ] それ多分ウォルターの自作自演だから
692 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 00:21:59.25 ] >>689 パーザーの問題。DMDのパーザーは手書きだからこういう抜けが未だにある。 in/outなしでbodyだけ付けるのも同じようにrejectされるな。 原因は判ったのでパッチを書いておくが、bugzillaはどうする? 自分で投げてみるいいチャンスかも。
693 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 00:32:34.95 ] ちなみにテストコードはこれ void main() { size_t foo() in{} out{} body{ return 0; } // OK size_t bar() /*in{}*/ out{} body{ return 0; } // NG1 size_t baz() /*in{} out{}*/ body{ return 0; } // NG2 }
694 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 03:41:31.25 ] あ、仮引数の省略ってできたっけ?
695 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 03:42:00.71 ] あと使わない実引数の省略もか
696 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 09:52:43.56 ] >>694 仮引数の省略は不可。 一応、可変個引数で似たようなことは出来るが、余計めんどくさい・・・ >>695 デフォルト引数が設定されている引数については省略可。
697 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 12:15:29.91 ] いやそうでなくて、変数名の省略
698 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 13:06:37.84 ] 変数名省略できる言語なんかあるのか?
699 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 13:13:57.12 ] timerStart( 1000, (Timer,EventArgs){ doSomeThing(); } ); こういうのが書ければいいってことでしょ
700 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 13:17:33.72 ] 長い変数名を書くのが面倒で、短い変数名にしたいって事なら、alias使えばおk。 クラスや構造体の参照を簡略化したいなら、with文を使うのもあり。 型名を書くのを省略したいという事なら、残念ながらDでは出来ません。 関数オブジェクトを簡単に作りたいなら、関数リテラルを使えばおk。 型が違うだけで、処理の内容が同じ関数を書くのが嫌という話なら、テンプレートを使えばおk
701 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 13:36:24.87 ] >>697 void foo(int, long){ ... } みたいに、通常の関数で型だけを書いて仮引数名を省略することは可能。 これはC言語系列のsyntaxを受け継いでいる。 >>699 2.058からは関数リテラルで仮引数名の省略は出来なくなる。なぜなら 関数リテラルのパラメータ型推論・funciton/delegate推論が入ったため、 (a, b){ doSomethig(); } で、a,bが型名か仮引数名かパース時点では判明しないため。 →2.057までは型名として、2.058以降は仮引数名として扱われるようになる >>700 上に書いたとおり、関数リテラル限定で型名を書くのを省略できるようになる。
702 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 14:02:36.29 ] >>701 なんで通るんだろうと思いつつ。 で、どうやって引数の値にアクセスするのよ? ideone.com/6NLyf 誰だ、型名省略できるって言ったやつ。 まあ、戻り値の型は省略できるけどね。 ideone.com/AXEQu
703 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 14:49:02.14 ] >>702 上:コールバック関数やデリゲートに渡すやつで 「関数の型(引数リスト)が決められているけど 引数は結局使われない」というケース。>>699 はその例 下:2.058(次期リリース)以降の話。
704 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 15:44:02.20 ] >>702 C言語やってないだろ!引数を参照しないとコンパイル時に警告でるからそれ対策で型名だけにするってよくやるよ
705 名前:デフォルトの名無しさん mailto:sage [2012/01/04(水) 23:44:58.41 ] >>704 そうそれが知りたかった
706 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 01:32:26.19 ] >>689 issueとパッチのPullRequestを出しておきました。 d.puremagic.com/issues/show_bug.cgi?id=7218 https://github.com/D-Programming-Language/dmd/pull/608
707 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 09:25:27.92 ] >>704 しらねーよ!悪かったな!
708 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 17:24:31.05 ] >>706 マージされた https://github.com/D-Programming-Language/dmd/commit/4d93bbf53cba3eb19733d2e5cd209b67034f2d10
709 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 19:10:11.82 ] はやっ どうなってんだ
710 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:12:29.93 ] はやすぎる(笑)
711 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:23:18.36 ] ム板では結局ここが一番落ち着く
712 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:29:57.36 ] 上に同じこと書いたのを完全に忘れていた もう駄目かな…
713 名前:デフォルトの名無しさん mailto:sage [2012/01/05(木) 23:45:00.75 ] ・基本的にWalterは毎日commitを行っている ・PullRequestも最低1つぐらいは一日にマージされる ・Parser関係のfixは理解しやすい&影響範囲も限られる →変更の規模としては小さい部類なので比較的早くにマージされる まあ、パッチの規模がでかいと逆に半年ぐらい放置状態になるんだけど。
714 名前:デフォルトの名無しさん mailto:sage [2012/01/06(金) 06:30:57.53 ] 他の言語と違ってここのはコンパイラの修正がユーザーに近い時点で行われてるから 根強いファンが絶えないのも頷けるなw
715 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 14:40:44.35 ] dwt2もgithubに移行か
716 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 18:03:48.52 ] dwt2 もろくにメンテされてなかったけど 移行してマシになるの?
717 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 20:18:31.68 ] 一応メンテはされてるんだけど オフィシャルへの反映が遅い…
718 名前:デフォルトの名無しさん mailto:sage [2012/01/08(日) 23:41:55.28 ] ハードウェアがより高性能に進化、ソフトウェアがより多機能に進化、 それに命令や操作をする人間は進化するどころか文化や人格を決め付けや思い込みで否定する争いを始めた
719 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 01:26:59.13 ] DはマルチメディアやGUI関連に弱すぎる
720 名前:デフォルトの名無しさん mailto:sage [2012/01/09(月) 02:04:44.28 ] 質問です。 std.randomのuniformのboundariesを指定したいときはどうすればよいのでしょうか。