1 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:09:54 ] プログラミング言語 D について語るスレッドです。 過去スレは >>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)
784 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 00:55:00 ] >>783 うちの std.c.stdio にはないけど?(dmd1.010)
785 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 01:05:30 ] >>781 確かに click は + - でしか反応しないけど afterSelect / beforeSelect を使えばいいのでは?
786 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 04:06:04 ] bud を導入して実行してみたらsc.iniが見つからないと言われました。 bud.exe とソースコードをdmd.exeと同じフォルダに入れたら成功したので 環境変数の問題だと思うのですが、どうすればいいのでしょうか。 Error: bud:Unable to find Config File 'sc.ini' in [.\,,C:\Documents and Settings\ユーザ名,C:\作業フォルダ\]
787 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 05:43:48 ] >>784 すいません。間違えました。 filenoでした。 extern(C) int fileno(int); とかやってもだめでした。
788 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 05:48:57 ] fileno()は大抵マクロ 非標準だし
789 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 06:15:47 ] じゃあDで標準入力をバイナリモードで開きたい時はどうすればいいのですか?
790 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 07:36:26 ] さあ。phobosにはそんな概念ないからの。
791 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 12:04:17 ] どうせ構造体の中の変数1つ拾ってるだけだろうから、 そういうインライン関数作っちゃえ。
792 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 14:01:38 ] version(Win32) stdout._flag |= _F_BIN; としても効かんな。なんでだろ
793 名前:783 mailto:sage [2007/04/10(火) 16:03:35 ] とりあえずDMCのstdio.hをのぞいてみると、filenoで参照しているのは構造体の_fileメンバだたt。 といわけでこんなプログラムを書いてみた。 import std.c.stdio; version(Windows) extern(C) int setmode(int, int); char[] readStdIn(ulong size) { char[] buf; char c; version(Windows) { int O_BINARY = 0x8000; setmode(stdin._file, O_BINARY); } while(buf.length < size && (c = getchar) != EOF) buf ~= c; return buf; } void main() { char[] str = readStdIn(500000); FILE* fp = fopen("output.jpg", "wb"); fwrite(str.ptr, str.length, 1, fp); fclose(fp); } test.exe < input.jpg とやってみても壊れたファイルしか出力されませんでした。 テキストを入力して実験した結果、バイナリモードに切り替わっていないようです。 同じようなCのプログラムを書いてみたところ、 BCCならきちんとバイナリモードになっていましたが、DMCはテキストモードのままでした。 どうやらDMCのバグか仕様の予感です。
794 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 16:12:57 ] Cライブラリの問題な気が
795 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 16:22:51 ] そもそも標準入出力がテキスト以外を扱うように出来てるかが問題だな。
796 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 16:44:24 ] つまり解決策無し?
797 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 16:51:53 ] phobosをコンパイルしなおせばいけるんじゃないか?
798 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 17:02:34 ] >>793 で試したCのプログラムがちゃんと動くようなCライブラリとリンクしてやれば、うまくいきそうな気がするなあ。
799 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 21:49:11 ] つまりまだニヤニヤする以外の目的で使うなって琴田。
800 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:15:02 ] そうでもないか
801 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 02:34:20 ] import std.cstream, std.c.windows.windows, std.stream; extern (Windows) HANDLE GetStdHandle(DWORD nStdHandle); const STD_INPUT_HANDLE = -10; const STD_OUTPUT_HANDLE = -11; void main() { auto din2 = new File(GetStdHandle(STD_INPUT_HANDLE), FileMode.In); auto dout2 = new File(GetStdHandle(STD_OUTPUT_HANDLE), FileMode.Out); auto buffer = new ubyte[256]; while (true) { auto len = din2.read(buffer); if (len == 0) break; dout2.write(buffer[0..len]); } } こうか?
802 名前:783 mailto:sage [2007/04/11(水) 08:03:20 ] >>801 あ、できた。 つまり標準入力をバイナリモードで得たければOSのAPIを叩けということなんですね。 ありがとうございました。
803 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 09:20:55 ] D言語はあんまりわからんけどC/C++ @Win32 なら freopen("CON","rb",stdin); でいけるからこれでいいんじゃね?
804 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:43:55 ] D言語っていつのまにやら、Version1.0になってたんだね。 1.0越えたら手を付けてみようと思ってたんで、今後このスレにはお世話になると思います。 よろしくお願い
805 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 21:45:28 ] 名前だけ 1.0 になったけど、 今までと変わらず仕様変更してます。 どう見ても名前だけです。 本当にありがとうございました。
806 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 22:53:44 ] 1.010で-v付けても1.0互換じゃなくなっちまったしなw
807 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:02:34 ] >>806 -v1 が1.0互換で、 -v はverboseなんじゃないの?
808 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:07:31 ] 1.*って以上の意味はないんだろうな…
809 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 23:09:52 ] >>807 すまんそのとおり
810 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 01:04:09 ] >>803 標準入力とCONでは意味が違う。 リダイレクトやパイプ越しのケースがあるからな。 Cランタイムライブラリに依存せず標準入力から読み出したければ GetStdHandle(STD_INPUT_HANDLE)でハンドル取ってきて ReadFile() これでいい。
811 名前:デフォルトの名無しさん [2007/04/12(木) 07:44:57 ] D言語関連の和書って、まだなにもないんだっけ?
812 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 07:48:56 ] ググったらパーフェクトガイドとかってのがでてきたけど、古い上に売れ切れてるし。
813 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 08:01:35 ] >>812 むっちゃ古い k.inabaさん以外全部沈没
814 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 08:05:18 ] コンパイラが0.106とかの時代だからまだ新しい方じゃない?
815 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 08:16:10 ] inabaタンが、頑張ってくれてるみたいだから一括ダウンロードしてみたけど これ壊れてない? 目次だけで内容が見れないんだけど。 vista で見てるからかなぁ?
816 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 11:57:09 ] 新しいキーワードのmacroってなに?
817 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 12:41:12 ] For the future (unimplemented) AST macro feature.
818 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:29:12 ] >>815 ttp://support.microsoft.com/kb/902225/ → 方法2
819 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 13:55:14 ] What's New for D 1.011 Apr 11, 2007 New/Changed Features Extended Codeview symbolic debug output with LF_OEM types. Extended Dwarf symbolic debug output with DW_TAG_darray_type, DW_TAG_aarray_type, and DW_TAG_delegate types. Added keywords ref and macro. final classes cannot be subclassed. final for variables now works. ref now works as a replacement for inout. Fixed so multiple type inferring declarations like auto a=1,c=2; works. Bugs Fixed Fixed problem with overloading of function templates that have the same template parameter list, but different function parameters. Fixed problems with type deduction from specializations that are template instances. Fixed assert template.c(2956) s->parent Got .property to work for typeof. Fixed bug in DW_AT_comp_dir output for some linux versions. D.announce/8027 D.announce/8047 D/51800 Bugzilla 1028: Segfault using tuple inside asm code. Bugzilla 1052: DMD 1.009 - aliasing functions from superclasses may result in incorrect conflicts Bugzilla 1080: Failed to link to std.windows.registry Bugzilla 1081: with using real and -O option, dmd generate bug code Bugzilla 1082: The .offsetof property yields a signed int, a size_t would be more appropriate Bugzilla 1086: CodeView: missing line information for string switch Bugzilla 1092: compiler crash in ..\ztc\cod1.c 2528 Bugzilla 1102: switch case couldn't contain template member Bugzilla 1108: Indexing an int[] not evaluatable at compile time Bugzilla 1122: dmd generate bad line number while reporting error message
820 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 14:02:31 ] 今になってrefを導入してくるか……っ! 「inoutはrefに置き換えるかもしれません」って確かに言ってたけど!
821 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 14:13:22 ] コード書き換えの嵐ktkr いつかはやらなくちゃだったかもだけど、1.00になったときがよかったなぁ
822 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 14:46:21 ] それでこそD言語
823 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 15:32:12 ] D 0.1011 でいいんじゃね?
824 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:14:34 ] >>823 なんか二進数みたいに見えてきた・・・orz
825 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 16:16:16 ] 実は16進数で 0.D0.1011
826 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 18:17:07 ] >>825 その投稿時間はネタに合わせたのか
827 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 19:49:04 ] >>825 みらくるだなぁ
828 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 20:44:25 ] >>825 の16揃いはバネを使ったインチキだったので 警察に捕まりました。
829 名前:デフォルトの名無しさん mailto:sage [2007/04/12(木) 20:50:07 ] >>825 上手いねえ
830 名前:815 mailto:sage [2007/04/12(木) 21:57:56 ] >>818 d
831 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 06:46:32 ] ドキュメント生成が見た目いまいちなんですけども標準以外でツール作られてたりしないの?
832 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 10:49:14 ] Doxygen は、Dに対応してるらしいぞ。 見た目はdmdでも、.ddocファイルで指定すれば、在る程度好きなようになるでしょ。 .ddocでユニークな文字列を埋め込んでおいて、スクリプトなどで再加工するとか…。
833 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 13:44:06 ] 1.012きた バグ修正オンリーか
834 名前:デフォルトの名無しさん mailto:sage [2007/04/13(金) 16:27:23 ] digitalmars重すぎる。ミラーとか無いのかな?
835 名前:デフォルトの名無しさん mailto:sage [2007/04/14(土) 09:08:50 ] >>831 candydocとかいいかんじかも。
836 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 01:22:12 ] すみません。 最近始めたものですが、無名クラスについて教えていただけないですか。 Java で書くと以下のようになるものは、Dだとどのように書けば良いのでしょうか。 Player player = new Player(new Strategy(){ public void method() { }});
837 名前:デフォルトの名無しさん mailto:sage [2007/04/15(日) 01:39:16 ] auto player = new Player(new class Strategy { public void method() { } });
838 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 05:31:38 ] >>835 サンクス。 無駄に格好いいなこれw
839 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 12:23:53 ] DでAjaxやってるひといますか?
840 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 13:23:20 ] DとAjaxに何の関係が? DでCGIするって話?
841 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 17:45:13 ] CGI用のFrameworkっぽい物あったっけ?
842 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 21:41:05 ] ttp://www.wikiroom.com/sakurai/index.php?FrontPage ここくらいしか知らない
843 名前:デフォルトの名無しさん mailto:sage [2007/04/16(月) 21:52:10 ] dsource.orgにあった気がする。
844 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 03:52:07 ] GWTみたいなのをDでやりたいんです
845 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 04:19:04 ] Dのような低レベル言語でWebアプリ作るの大変そうだな〜。 PHPとかとはまた違った面白さがありそうだが。
846 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 04:49:42 ] いやD言語は高レベルだし。ライブラリが揃ってないのが激しく面倒だけど。
847 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 09:23:20 ] これが歳の差か
848 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 09:26:47 ] Dは中レベルだよ。
849 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 10:03:03 ] Dでファイルのアップに対応したCGIライブラリ作ったけど、 1.4MB以上のファイルを食べさせるとしぬという素敵仕様になってしまったorz
850 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 10:06:31 ] Dで使えるODBCアクセス用クラスみたいなのありますか
851 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 10:15:44 ] 言語仕様の変更が怖くて D でライブラリ作る気しないなあ。
852 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 11:47:19 ] あなたにはD言語はおすすめできません
853 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 12:18:31 ] >>850 Cで使えればDでも使えますが ttp://www.kmonos.net/alang/wnd/topics/ddbi.ja.html こんなのもあります
854 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 12:21:48 ] しかしinout->refの変更は結構痛いなw DMD1.012だとDirectXのヘッダーとかDFLとか使えなくなったし 自分ですぐ直せるけど早く公式の方で対応されないかなー
855 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 12:27:00 ] Tango 0.97 RC1 has been released.
856 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 13:08:24 ] s/inout/ref/g で直しとけ
857 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 17:06:36 ] さらにs/ref/inout/gで直さなきゃならないなんてことは無いよな?
858 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 17:09:29 ] もしかして、参照も導入されることになったの?
859 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 18:31:30 ] ?
860 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:44:52 ] 文字列をコードとしてミックスイン なんていう機能があるんですか。
861 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:46:16 ] はい。あるんです。
862 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:52:28 ] なんかリフレクションできそうだな。 これでjarみたいなリンクが出来たら主戦言語にかえるかも。
863 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:55:12 ] flectioned
864 名前:デフォルトの名無しさん mailto:sage [2007/04/17(火) 19:55:34 ] >>856-857 s/ref/ref_/g s/inout/ref/g としないと死ねるぞ
865 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 16:53:15 ] std.boxerでバグ見つけた Mac OS X 10.3.9 PowerPCなんだけど4bytes未満のデータをboxするとデータが壊れる。
866 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 17:09:49 ] Box box(TypeInfo, void*)のコード読んでみたらどうみてもstd.stdarg使ってないな。 しかもリトルエンディアン前提でコード書いてやがる。まあ仕方ないか。
867 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 19:15:01 ] 既出かもしれないが、 void func(void[] v) { } void main() { func(cast(void[])['a']); } で落ちる。
868 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 19:58:24 ] これだけで落ちるな。 void main() { void[] v = cast(void[])['a']; } 配列リテラルを void[] にキャストするのが無理っぽいね。
869 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 19:59:08 ] というか、 void main() { cast(void[])['a']; } これだけでいいか。
870 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 20:16:15 ] 落ちないなあ… dmd v1.012 windows xp
871 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 20:27:51 ] >>867-869 落ちない gdc 0.23 @ Mac OS X 10.3.9 PowerPC
872 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 21:27:12 ] ああ、コンパイラ古いからなのか? gdc 0.21 @ MacOSX 10.4.9 Core 2 Duo
873 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 23:53:54 ] 可変個引数テンプレートで悩んでいます。 class foo(T...) { int opApply(int delegate(ref T) dg) { int result = 0; return result; } } void poo() { foo!(int) hoge; foreach(int i ; hoge) { } } Compile Error: function foo!(int).foo.opApply (int delegate(ref (int))) does not match parameter types (int delegate(ref int __applyArg0)) foreachを動作させるにはどうすればよいのでしょうか? どなたかご教授お願いいたしますm(_ _)m
874 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 00:07:34 ] class foo(T...) Tが複数なんだから int opApply(int delegate(ref T[0]) dg) あと foo!(int) hoge; は auto hoge = new foo!(int); それともタプルをforeachで回したいのかな
875 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 00:12:36 ] foo!(int)とやればforeach(int n; hoge)に対応できて、 foo!(int,int)とやればforeach(int i, int n; hoge)に対応できる、 ってやりたいんじゃない?
876 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 00:19:47 ] >> 875 はい、そのとおりです
877 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 07:41:46 ] そこで文字列mixinですよ import std.metastrings; template F(int i,T...){ static if(T.length == 0) const char[] F=""; else const char[] F="ref T["~ToString!(i)~"]" ~ (i+1==T.length?"":","~F!(i+1,T[1..$])); } struct A(T...){ mixin("alias int delegate("~F!(0,T)~")dg_t;"); int opApply(dg_t dg){ return 0; } } void main(){ A!(int,char)X; A!(int)Y; foreach(int x,char c;X){} foreach(int y;Y){} }
878 名前:873 mailto:sage [2007/04/19(木) 12:38:15 ] >> 877 ありがとうございます!無事動作しました。 ただ、 (i+1==T.length?"":","~F!(i+1,T[1..$])); だと期待する動作ではなかったので(引数が一つ足りない)、 (i==T.length?"":","~F!(i+1,T[1..$])); とさせていただきました。 文字列mixin、すごいですねえ!!
879 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 14:57:54 ] 頼むから>>の後にスペースを入れないでくれ
880 名前:873 mailto:sage [2007/04/19(木) 15:26:42 ] >>879 はっっ ごめんなさい
881 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 15:31:09 ] gdc固有のバグは何処に報告すればいいんだ?
882 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 17:27:22 ] インターフェーステンプレートなんてものも出来るのか・・・
883 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 18:49:12 ] >>881 バグ報告? 自分で修正してパッチ公開だろ。 そのコードが良かったら誰かがいつかマージしてくれる。
884 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 18:51:00 ] >>881 bugzilla
885 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 06:24:59 ] DFL 0.9.5.03 リリース DMD 1.013 リリース
886 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 07:33:15 ] > DMD バグ潰しか
887 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 08:44:43 ] DFLキター
888 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 11:54:54 ] あぁ・・昨日アップデートしたばかりなのに・・・
889 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 13:49:00 ] 毎日アップデートするのを楽しむのじゃ
890 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 15:57:00 ] >>889 D言語ってそうゆうワクワク感がいいですよね。 アップデートを確認してバグが大量にフィックスされていた時は いつも感動の連続ですよ。
891 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 15:59:11 ] 結局ダメ言語
892 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:55:55 ] Richard Deyman って誰?
893 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 22:02:00 ] readlnがバグってるの早く直してほしいな
894 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 00:49:55 ] 久しぶりにJavaで仕事したらスイスイ書けてこんなに便利だったのかと改めて思った Dにも頑張って貰いたい
895 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 00:58:13 ] 便利なのはEclipse
896 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 10:41:01 ] IDE マダァ?(・∀・ )っ/凵⌒☆チンチン
897 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 11:06:36 ] >>896 CodeBlocksがまあまあ使える