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)
593 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 11:15:18.32 ] >>590 そんなんじゃ「そうじゃねーよ俺は便利に使ってんだよ」と反論できちまう せめて「typedefあるとコンパイラの実装が超大変になるんだよ、わかれよ」くらい言ってほしい
594 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 11:43:45.05 ] strong typedefはまともにやるとめんどくさいからな。 t f(t, t)って関数があってtからuを新たに作ったときに、t f(u, t)として使えるのが正しいのか t f(u, u)が正しいのかu f(u, u)が正しいのか。
595 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:11:48.42 ] ユーザ定義リテラルがあれば 複素数をビルトイン型にしなくてもいいような気もする (パフォーマンス的には分からんが)
596 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:14:25.88 ] >>594 やっと納得した uがどこまでtか微妙なのが仕様的に面倒なのね あれ、でもenum…
597 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 12:56:34.72 ] >>595 複素数がライブラリに移動したときにその話はあった 結論から言うとcomplex型とimaginary型を併用することでパフォーマンス的にも問題なく解消する ただし記述が面倒だからユーザー定義リテラルが必須
598 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 19:54:02.30 ] ユーザー定義リテラルを入れたいから複素数リテラルをなくしたのか? ユーザー定義リテラルを入れなくても、複素数リテラルがあれば、複素数についてのパフォーマンスは元々解決されていたんでしょう。 なくす必要性がまだ見えないんだよね
599 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 20:07:50.18 ] コンパイラ組みこみじゃなく、 ライブラリの存在を前提としたシンタックスシュガー化するということかと。 Dならstring→immutable char[]が似ているし、 C#のstringはSystem.Stringの別名だ(と思う)し。
600 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 20:17:25.54 ] ユーザー定義リテラルって何ぞ・・・? ガクガクガタガタ
601 名前:デフォルトの名無しさん mailto:sage [2011/12/23(金) 20:19:04.64 ] C99が複素数を言語組み込み、C++が複素数をライブラリ提供してるけど gccはバイナリ互換性を持たせるために、「コイツは内部的に複素数だ」ってpragma用意してるよね。 Dの複素数もC99の複素数とバイナリ互換性を持ってるはずだが、ライブラリ版はどうなってるんだろう。
602 名前:デフォルトの名無しさん mailto:sage [2011/12/24(土) 03:55:23.75 ] >>599 そうするのはなぜだか知ってますか? ユーザー定義リテラルを導入するならば複素数だけ優遇する必要がないから?
603 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 04:15:55.26 ] octal!100はどうするんだよ…。 octだったかな
604 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 12:14:29.54 ] dlang.org てのがまた出来てる こっちに移るんかな
605 名前:デフォルトの名無しさん mailto:sage [2011/12/25(日) 17:11:57.58 ] 当面の間はミラーリングして様子見じゃないの
606 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 01:33:27.78 ] const(char[])がconst(char)[]に暗黙変換されるようになったんだってな。なんか不具合出ないのかな
607 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 07:19:58.60 ] 仕様も見ずに言うけどref引数だと変換されないんだよね?
608 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 20:31:46.19 ] ちょっと生理させてくれ const(char)[]:中身を書き換えられない配列 const(char[]):?? Cのchar a const[] ?? いやそれじゃchar a[]と同じか
609 名前:デフォルトの名無しさん [2011/12/26(月) 23:07:10.07 ] const(char[]) a, b; a = b; が出来ないんじゃなかった?
610 名前:デフォルトの名無しさん mailto:sage [2011/12/26(月) 23:17:27.56 ] ・・・えっち
611 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 02:56:23.39 ] 月桂冠
612 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 08:42:56.37 ] 厶板ではここが一番落ち着く
613 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 11:50:14.46 ] わかるわ 俺もD言語に全く興味ないのに覗いてるしな
614 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 12:05:34.60 ] あれ、俺がいる
615 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 13:37:36.63 ] 逃げない奴はよく訓練されたD言語erだ
616 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:03:32.31 ] D言語が落ち着くまで待ち続けるぜ
617 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:08:22.82 ] UFCSとラムダ式が入るらしい まだまだ若者には負けんよ
618 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:21:05.99 ] UFCSって何?
619 名前:デフォルトの名無しさん mailto:sage [2011/12/27(火) 21:22:04.16 ] Windows版64bit対応くらいしてくり
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 }