1 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:16:30 ] プログラミング言語 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://www.sun-inet.or.jp/~yaneurao/dlang/ ttp://wisdom.sakura.ne.jp/programming/d/
2 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:17:02 ] ■過去スレ Part14 pc11.2ch.net/test/read.cgi/tech/1184807424/ Part13 pc11.2ch.net/test/read.cgi/tech/1177499924/ Part12 pc11.2ch.net/test/read.cgi/tech/1171037394/ Part11 pc10.2ch.net/test/read.cgi/tech/1165621441/ Part10 pc8.2ch.net/test/read.cgi/tech/1158013550/ Part 9 pc8.2ch.net/test/read.cgi/tech/1146656260/ Part 8 pc8.2ch.net/test/read.cgi/tech/1137068104/ Part 7 pc8.2ch.net/test/read.cgi/tech/1122912733/ Part 6 pc8.2ch.net/test/read.cgi/tech/1109933426/ Part 5 pc5.2ch.net/test/read.cgi/tech/1102785854/ Part 4 pc5.2ch.net/test/read.cgi/tech/1091185216/ Part 3 pc5.2ch.net/test/read.cgi/tech/1079068715/ Part 2 f3.aaacafe.ne.jp/~null/cache/1079280501.html Part 1 pc5.2ch.net/tech/kako/1003/10036/1003674814.html
3 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 20:17:33 ] ■関連スレ D言語なら俺に聞け pc11.2ch.net/test/read.cgi/tech/1108172110/ D言語を広めるスレ pc11.2ch.net/test/read.cgi/tech/1175432606/ D言語は多分コケると思っている人の数→ pc11.2ch.net/test/read.cgi/tech/1136288019/ 【次世代言語】D言語でOSを作ろう【Monaの移植?】 pc11.2ch.net/test/read.cgi/tech/1128794438/ バイナリをゲロる言語の魅力って何? pc11.2ch.net/test/read.cgi/tech/1160869311/ その他リンク 【Java/C/PHP/Perl/Ruby/Python/TeX】Eclipse M22 pc11.2ch.net/test/read.cgi/tech/1168166588/ eclipseってそんなに良いか?【エクリプス】 pc11.2ch.net/test/read.cgi/tech/1099300344/ 統合開発環境Eclipseプラグイン開発QA pc11.2ch.net/test/read.cgi/tech/1081517094/ "Code of the Nerds" Digital Mars C/C++ pc11.2ch.net/test/read.cgi/tech/1044210976/
4 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 21:33:36 ] (new Otsu).res(1)
5 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 21:58:45 ] otu().dup().otu().otu().otu()otu().otu().print();
6 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 23:14:17 ] しまった言い忘れてた・・・ そろそろこの二つはテンプレから外さないか ttp://www.sun-inet.or.jp/~yaneurao/dlang/ ttp://wisdom.sakura.ne.jp/programming/d/ f17.aaa.livedoor.jp/~labamba/?%A5%EA%A5%F3%A5%AF%BD%B8#content_1_3 に載ってるもののうち下の4つを推薦しておくわ # C/C++に疲れた人のD言語 … haru氏 # わかったつもりになるD言語 … K.INABA氏 # D始めました。 … shinichiro.h氏 # D言語入門講座 … SHOO氏
7 名前:6 mailto:sage [2007/10/05(金) 23:20:38 ] アドレス載せるの忘れたのでテンプレ用フォーマットで再投下(最初のアドレスが長すぎる・・・) ttp://rayerd.ddo.jp/pukiwiki/ingwiki/index.php?C%2FC%2B%2B%A4%CB%C8%E8%A4%EC%A4%BF%BF%CD%A4%CED%B8%C0%B8%EC (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の入門講座) そして >>1 乙
8 名前:デフォルトの名無しさん mailto:sage [2007/10/05(金) 23:57:55 ] >>7 そういう時は、TinyURLで圧縮しとけば良いんじゃね? C/C++に疲れた人のD言語:tinyurl.com/3da5oa これからテンプレのWiki関係URLは圧縮しとけば良さげ。
9 名前:8 mailto:sage [2007/10/05(金) 23:58:51 ] ってぐわw ごめんwうまく展開できてないっぽいわw
10 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 00:02:01 ] あれ? 俺はちゃんと元のページに飛べたよ?
11 名前:8 mailto:sage [2007/10/06(土) 00:12:46 ] >>10 mjd? あれーオレだけなのかw 何故かindexに飛んじゃう・・・
12 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 02:22:03 ] じゃあテンプレのテンプレなw 誰か次スレ立てるときに覚えていたら思い出させてちょうだい プログラミング言語 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の入門講座)
13 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 04:10:02 ] 2.005来てるね
14 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 04:56:36 ] D 2.005 Oct 1, 2007 New/Changed Features * std.math.sin, cos, tan are now evaluated at compile time if the argument is a constant. * Added Cristian Vlasceanu's idea for C++ interface for 'plugins' * Overhaul phobox linux.mak and add documentation build logic * Massive additions to std.conv * Add writeln() and write() to std.stdio
15 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 07:31:24 ] * Add writeln() and write() to std.stdio これは地味だが良修正
16 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 07:40:16 ] >>C++ interface なにこれ C++のクラスがDLLでつかえちゃうのかしらん
17 名前:16 mailto:sage [2007/10/06(土) 07:44:43 ] 調べた。 感想:すげぇ・・・
18 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 08:15:28 ] やっと由美がかないそうだ
19 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 08:44:08 ] Tango 0.99.2 Don has been released.
20 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 09:20:17 ] Tangoの、0.99.9の次バージョンは何になるのだろうか
21 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 09:21:52 ] extern(C++) キタコレ!!!!
22 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 10:21:39 ] 乙
23 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 10:42:13 ] >extern(C++) これ、軽く祭りじゃねぇの
24 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:24:15 ] ライブラリ使えないし正直2.0は暫く見送り……と思っていた俺にもそろそろ『時期』って奴が来たのか?
25 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:36:36 ] おまいら、もっと騒げよ
26 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:53:41 ] >extern(C++) すげー けど、現状Cライブラリでなんとかなってるし リンクしたいC++ライブラリなんてないしな・・・
27 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 13:55:48 ] もれなくさげてるお上品なおまえらに萌えだ
28 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 14:10:38 ] D始まったな。 遊んでくるわ。
29 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 15:18:29 ] C++のライブラリをポートする必要がなくなったってこと? 誰かエロい人おしえてくれ。
30 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 15:35:41 ] ベターC++ときいて飛んできました
31 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 15:37:25 ] ついにポートする必要なくなったのかな。 本家BOOST使い放題ってこと?
32 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 15:39:25 ] boostは大部分がマクロやテンプレートに依存してるから無理だろ。
33 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 15:40:48 ] あらら。でも、視野ひろがったなぁ。
34 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 15:41:17 ] つwww.digitalmars.com/d/cpp_interface.html
35 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 16:05:26 ] htodのc++対応版が欲しくなるな。
36 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 18:02:24 ] ざっと見た感じできるのはここまでで extern(C++) { interfance CPP { ... } CPP getCPP(); } CPP cpp = getCPP(); こういうことはできないのか extern(C++) { class CPP { ... } } CPP cpp = new CPP; ここまできたらなんとかして欲しいけど無理か?
37 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 18:43:20 ] だれか >>34 の翻訳して
38 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:12:32 ] >>37 神修正につき翻訳中。 適当にばらしてinabaさんとこのdikiに書いておくわ。
39 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:14:44 ] DからC++が使えることよりも C++からDが使えることの方が嬉しい鴨試練
40 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:19:23 ] ---- C++ ---- #include <iostream> using namespace std; class D{ public: virtual int bar(int i, int j, int k){ cout << "i = " << i << endl; cout << "j = " << j << endl; cout << "k = " << k << endl; return 8; } }; D *getD(){ D *d = new D(); return d; } ---- D ---- extern (C++){ interface D{ int bar(int i, int j, int k); } D getD(); } void main(){ D d = getD(); d.bar(9,10,11); } 例にこんなのあるけど何かダサくね? D d = D::create(); とか無理なんけ?
41 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:21:00 ] ほいさ。逐次書いてます。 inabaさんとかぶらんように、下のほうから翻訳するかも ttp://www.kmonos.net/alang/dee/diki/?C%2B%2B%E3%81%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%EF%BC%88%E4%BB%AE%E8%A8%B3%EF%BC%89
42 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:23:51 ] >>40 >>36 とりあえず気持ちを繋ぎ止める為に身体を許したって感じだな
43 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:24:30 ] >>41 GJ!!! ありがとう!!
44 名前:デフォルトの名無しさん [2007/10/06(土) 19:36:39 ] 流れをぶったぎってスマン 以下のコードがdmd1.020では大丈夫だが dmd1.022 (1.021も?)では コンパイルエラーになった(【1】の const をはずすと大丈夫)。 ちなみにインデントには全角スペース使いました。 Main.d(29): mixin Test!(TestStruct(12)) does not match any template declaration ----------- Main.d ------------------------- private import std.stdio; template Test(alias test) { void test_func(){ test.hoge(); } } struct TestStruct { void hoge(){ writefln("hoge %d", a); } int a; } const TestStruct test_struct = {12}; // 【1】 mixin Test!(test_struct); void main() { test_func(); } ------------------------------------------------- ひとまず const 外してやり過ごす・・・。
45 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 19:38:13 ] 「{C関数}と{クラス}」 だと 「何のクラス」か分からなくなるので the とか it's とか冠詞が付くんじゃないかな よって誤植と推測
46 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 20:07:29 ] 翻訳はちょっと一休み。inabaさんのCとのインターフェースの翻訳を流用しながら書いています。 いつも使ってるvistaマシンがアップデートで死んでる。 親指シフターにローマ字入力はきついぜ。
47 名前:前スレ978 mailto:sage [2007/10/06(土) 20:44:49 ] dmd2.005で動かしたら動いた。 というか、なんか勘違いしてたかもw 前スレ>>979 レスthx!
48 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 20:51:15 ] >>40 これってC++側にvoid deleteD(D*t)用意しないとリークする? それとも、GCされるの?
49 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:05:23 ] C++オブジェクトをDのinterfaceとして取得する発想は盲点だった・・ ちょっと感動中。Cristian Vlasceanuさんとやら天才じゃね? さて、ありがたく和訳を読ませて頂きまする。 # ふつーのテキストが<pre>に包まれて # 横に長ーく表示されちゃってるのは # Dikiの仕様なのかしらん。
50 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:09:23 ] 草取りを除いて翻訳終わりました。>41のアドレスに。 >>40 DからはC++のクラス全体が見えているわけではなく、 ある型のインスタンスポインタと、その型の仮想関数テーブルだけが見えているようです。 したがって、 ・フィールド(メンバ変数) ・staticメンバ ・コンストラクタ、デストラクタ、変換(cast?)オペレータ、演算子オーバーロード、割り当て関数(newとdelete) これらはすべてアクセスできません。 多重継承したC++クラスのインスタンスも怪しいです。 >>48 リークします。 >40のC++側コードに追加するなら、 int removeD(D* obj){ try{ delete obj; } catch(なにがしか) { 例外を受け取ったらエラーコードをreturnする } return 正常; } とするべきでしょう。 多用するなら、D側でラッパとなるクラスを用意して、 そのデストラクタからC++のデストラクタとなる関数を呼び出すようにするしかないかと。 二重deleteの防止などはかなり面倒ですんで、C++側でshared_ptrかGCを用意する対策が必要でしょう。
51 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:12:17 ] >>50 d。 そうすると、既存のC++ライブラリをDから使いたければ、 C++でラッパーを書かないといけないんだな。 ちょっと面倒だね。
52 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:20:34 ] ダサい部分や面倒な部分も、 Dならどんどん解決策が出てくるに違いないとか思える気分だw D 2.0始まったな!
53 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:21:57 ] お前らテンションたけぇなぁ 自分の足の匂いでも嗅いで落ち付けよ ああ臭ェ
54 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 22:47:43 ] 構造体の扱いについていまいち不明な点があったので、訳註に加えました。 構造体扱いならメンバと非仮想関数にアクセスできる?(仮想関数にはアクセスできないが) >>49 # 仕様ではないでしょうか。とりあえずコピペでテキストエディタで折り返すと見やすいかと。 >50に追加。 非仮想関数にもアクセスできません。
55 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 23:03:40 ] vtblしか見えないのか。ちょっと使い道限られるなあ。
56 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 23:29:21 ] COMには最適w
57 名前:デフォルトの名無しさん mailto:sage [2007/10/06(土) 23:35:44 ] DCOMか
58 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:02:23 ] >>57 それは紛らわしすぎw
59 名前:44 [2007/10/07(日) 00:05:02 ] D1.022 にあるこれか Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param これはどういうこと?直ったのか?直ってないけど・・・。 仕様としてだめになったってこと??(regression:回帰、復帰、逆行、退化、退行) フォーラム読んでも結論がよくわからず・・・。誰かわかります?
60 名前:44 [2007/10/07(日) 00:10:33 ] こっちも関連あるかな。 Bugzilla 1456: Cannot use a constant with alias template parameters
61 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 00:27:53 ] regressionってのは「一回直ったバグが再発したよ」ってことだと思う
62 名前:44 [2007/10/07(日) 01:03:28 ] > 61 なるほど。じゃあいつか直るってことかな。 どうもありがとう。
63 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 10:39:16 ] >>59-62 「「一回直ったバグが再発したよ」っていうバグを直したよ」ていうのが > Bugzilla 1474: regression: const struct with an initializer not recognized as a valid alias template param これなので、直ってないのだったら報告した方がいいかも。 2.005だと直ってるぽいので1.x系の問題かな。
64 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 12:52:36 ] D言語研究、リンクがいくつか変なとこに書き換えられてる? FrontPageの差分を見るとそうっぽいんだけど、携帯からだとよくわからない…
65 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 13:43:15 ] >>64 直してみた
66 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 14:24:52 ] ブラウザの脆弱性を利用してキーロガーをトロイの木馬しようとしているのか 物騒な時代だな
67 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 18:46:37 ] >>65 おおお。ありがとう!
68 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:59:49 ] なんかバグ見つけた import std.stdio; void main(){ writefln(join("123", "456")); } string[] join(T ...)(T t){ string[] a; foreach(e; t){ a ~= e; } return a; } joinの返り値が壊れる D2.005
69 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 00:20:05 ] C++のクラスのメンバ変数だけど、無理やり構造体と同じ風にアクセス出来る気がする。 Dのクラスの場合、インスタンスのポインタから+8バイト位置から各メンバ変数並んでいるけど、 C++の場合、+0バイト位置から並んでいるみたい…。
70 名前:68 mailto:sage [2007/10/08(月) 00:30:51 ] 68はバグではなかったです。 お騒がせしました。
71 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 01:01:58 ] >>69 ABIの仕様次第なんじゃないのかそんなん
72 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 01:02:56 ] tango使ってみようと思ったらstringが未定義とか言われてしまった。 付属のdmdは1.0.21だから大丈夫なはずなんだけども。仕様?
73 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 01:38:52 ] stringはdmdじゃなくてtangoのobject.diの中身の問題だとおもうので、tangoの仕様なんじゃないかと。
74 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:50:05 ] static if(is(string)) alias char[] string;
75 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 10:56:11 ] >>71 マングリング規則や仮想関数テーブルの位置や順番すら処理系依存なんだから、 この際、特定のコンパイラ向けにとことん特化すべきじゃなかろうか。 dmdならdmc++の出力とだけリンクできればいいと思う。
76 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:15:47 ] いや、C++はpluginって書いてあるから、abiごとにplugin書かないといけないんだろ。 それより、C++から来た例外をどうキャッチするのかが気になる。
77 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:22:02 ] >76 仕様読んでから書け。
78 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:31:52 ] すまん、ちゃんとダメって書いてあったな>例外 pluginも、plugin"で"C++対応じゃなくて、plugin"のために"C++対応するんだな。
79 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 13:33:35 ] DMDScriptをD2.0対応にかきかけたが くじけそう・・・
80 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:22:48 ] Dにもユーザー定義リテラルください。
81 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:36:58 ] ありゃ。C++のマングリング規則ってはっきり決まってたっけ?って 思ってたら、やっぱdmc依存なん? 「C++ではマングリング規則がコンパイラ依存」なんて記述も見つかるし。 そうだとしたら「dmdはC++のマングリングを把握しています」なんて書いてあるけど、 微妙にJARO通報モノだったり? 訳注でも付けとこか。
82 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:37:12 ] stlのlistとかに相当するのって出来合いのあったっけ? boost::multi_indexが欲しいがこれは作るしかなさそう
83 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:45:14 ] >>82 コレクションクラスならtangoに入ってる。
84 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 23:51:47 ] >>81 Linux版のdmdでは以下のに対応してる。Windows版は知らね。 www.codesourcery.com/cxx-abi/
85 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:18:39 ] >>84 ありがとーぉ。dmcはWin32しか無いじゃないかーとか絶望するところだった。 ……でも正直書いてあることの意味がほとんど理解できませぬ。 C++ABIの標準を決めようって活動で、 g++とかはそれに従ったマングリングをすることもできる、って事? Win版に関しては、最後の 「時間がたてば、より多くのC++ ABIの側面が Dから直接アクセスできるようになるでしょう。」の一文に期待するしか?
86 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:22:33 ] >>83 ありがとうございます。 見てみましたがなんか微妙な使い勝手?
87 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:32:52 ] >>85 IA-64向けコンパイラでは標準、それ以外のアーキテクチャ向けでもg++とicpcがこのabiを元にした物を標準で使ってる。
88 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 01:35:09 ] ja.wikipedia.org/wiki/%E5%90%8D%E5%89%8D%E4%BF%AE%E9%A3%BE#.E3.82.B3.E3.83.B3.E3.83.91.E3.82.A4.E3.83.A9.E3.81.AB.E3.82.88.E3.82.8B.E5.90.8D.E5.89.8D.E4.BF.AE.E9.A3.BE.E3.81.AE.E7.9B.B8.E9.81.95 dmc++とvcはマングリング規則一緒っぽい。
89 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 04:47:57 ] DMDで64bit版あったらいいのにって思うのは俺だけ?
90 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 07:39:02 ] >>88 Wikipediaそんなのまでのってるのか・・・
91 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 12:37:34 ] オタクがおおい分野はとんでもない内容まで乗ってますよ。 どうせこの板の常連とかが書いた or 訳したんでしょう。
92 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 13:00:16 ] msvcとdmc++のマングリング規則が一緒でも オブジェクトファイルの形式が違うからリンクできないんだよね? C++って案外可搬性ないんだな
93 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 16:04:45 ] うぐぅ。Linux上でのC++との連携がうまくいかない・・。タコですんません。 >>84 で言うLinux版dmdて、 www.kmonos.net/alang/d/dcompiler.html#linux のヤツの事でOK? それともgdcとゆーやつを頑張ってコンパイルしなきゃダメ?
94 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 16:33:32 ] >>93 そのヤツでOKだけど www.digitalmars.com/d/changelog.html#new2_005 から落とさないとバージョン古いよ
95 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 17:50:24 ] インスタンスからstaticメソッドが呼べるのがちょっとううざったいというか、 演算子オーバーロードでstaticなのとそうでないのが区別できないのが困る
96 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 18:11:32 ] 関数でslice/range表現(x..y)を受け取りたい…… void func(real x..y); と関数を定義したいなあ、と。 タプルでもいいから。 末尾を含むかどうかはx...y表現を認めるかどうかは難しそうだけど。 機能の提案って本家のMLとかに流すんでしたっけ?
97 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 18:14:05 ] digitalmars.Dでいいと思う
98 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 18:15:24 ] そもそも range型があってもいいんじゃないかと思う
99 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 18:16:51 ] 実装されたときにx..yがx, yに展開されるようになると予想
100 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 18:19:00 ] 1..3 は Tuple!(1,2) じゃないといやだよう
101 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:11:28 ] 1..6はTuple![1,6)
102 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:34:40 ] >>101 対カッコの強調表示がむちゃくちゃになるのが難点
103 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:51:19 ] Tuple!("[1,6)");
104 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:28:19 ] それならTuple!("1..6")にしてやれよww
105 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:37:54 ] 一通りここでの議論を読んで、既出の議論がないか調べてみます。 ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=55946 x..yがx, yに展開されるだけだとsyntax sugerとしてもいまいち弱い感じがしますね。 (x, y]を表現できるリテラルはかなり少ないので、そのへんの書き方で文法を汚さずに追加できれば面白そうなのですが。 以前x<Range<=yと書くとRange型のインスタンスが生成されるクラスをC++で書いたのですが、 opCmpだとそれは許されないんですよねえ。
106 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:55:41 ] >>104 は?
107 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 22:56:03 ] 触ったらかわいそう
108 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:30:36 ] 先にちょいと提案したいことがあったので、そっちを提案してみる class Foo { enum EnumType { A, B, C } } void func(Foo.EnumType arg); こういう定義のとき、funcに列挙された値を与えるのに func(Foo.EnumType.A) とやたら冗長なので、 func(A) と書いて通るように識別子探索を拡張して欲しいと提案してみる。 これっていまのところ解決策はないですよね?
109 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:36:35 ] >>108 今後のプランの一つに入ってるって、どこかで見た気がする。 カンファレンスのスライドだったかなあ。
110 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:48:10 ] >>109 それはいいねえ。 早めに対応してもらいたい感じだ カンファレンスのログはあったと思うので、探してみる
111 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:54:26 ] だからslice/rangeはRangeオブジェクトリテラルにしようと(ry >>93 死ぬほどありがとう。おかげで悩みまくった数時間が気持ちよく無意味になりますた。 そしてdmdのバージョン出力をよく見てなかった俺めアホが! しかし完全にUTF-8化されているだけあって、Ubuntuじゃ文字化けしねぇなぁ。 Vista買ったのがバカらしくなってきたわい。 >>108 あー。それJavaでもC#でも同じ事思った覚えが。是非是非。
112 名前:111 mailto:sage [2007/10/10(水) 00:02:00 ] て、何自己レスしとんねん。 res[111].replace(">>93 ", ">>94 ");
113 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:20:15 ] >>110 d.puremagic.com/conference2007/speakers.html うぉるたたんのスライドのp35
114 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:29:17 ] 34だた
115 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:42:15 ] enumも今になってみると中途半端というかinvariantとかぶってるよな。 定数関連はinvariantに任せて、enumの方はシンボルってことで識別子名を 簡単に表示できるようになってくれればいいのに。 enum使うとデバッグ作業がめんどくさくて。
116 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 00:56:51 ] 次の更新→enum廃止
117 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:13:07 ] >>115 ありがとう。 enum以外にも魅力的な拡張が多くて目移りしますね。 第一引数が配列である関数をプロパティ的に扱える機能の拡張はいいですね。 ついでにクラス内の(public)メンバを列挙して、自動で配列プロパティに突っ込むテンプレートがあるとうれしいかも…… ついでにデリゲートもオーバーロードしたかったり >115 struct + invariant配列のほうが便利だったりしますね。パラメタ多いと。
118 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:20:35 ] そういえば、pp27あたりのstructがinterfaceを継承できるという案があるが、 あれはC++のクラスを利用する布石ではないかという希ガス まあ、便利なものはテンプレートの互換性がないと何も使えない気も……
119 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 02:00:48 ] delegateのcovariant/contravariantが早く欲しい その次は(環境を持ち運べる)closureかな
120 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 02:41:24 ] うひょー、D Conference 2007の資料、結構目を引く点山盛りな感じ。 英語未熟でおぼろげにしか解らないけど。 とりあえずヲルタンのを見てみただけだけど、要点だけまとめた簡潔なスライドだし、 翻訳する費用対効果は高いんじゃ、と無責任に言ってみる。 あと疑問ー。 www.kmonos.net/alang/dee/diki/?C%2B%2B%E3%81%A8%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9%EF%BC%88%E4%BB%AE%E8%A8%B3%EF%BC%89 の「Dのガベージコレクタで確保したメモリへのポインタを渡すには...」のくだり。 GCによる解放対策にだけ触れてる感じだけど、 GCって生きてるオブジェクトでも、移動してポインタ書き換えとかするよね? ほんとに安全にD外にGCポインタ貸し出すなら、GCを停止しないといけないんじゃ?
121 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 09:28:04 ] ttp://d.puremagic.com/conference2007/speakers.html とりあえず、はっておこう
122 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 09:30:02 ] >>120 オブジェクト/クラス単位でガベコレのON/OFFって出来なかったっけ
123 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 11:27:14 ] D Conference 2007.jp開かれないかな
124 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 16:28:12 ] >>122 カスタムアロケータを書くしかなかったと思う。
125 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:34:36 ] import std.stdio; void main(){ auto b = new B(); b.f(); } class A{ void f(){ writefln("A"); } } class B: A{ final void f(){ super.f(); writefln("B"); } } リリースビルドして実行するとBがダブって表示されるのですが、 これは正しい動作なんでしょうか? バグなのでしょうか?
126 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:34:57 ] カスタムアロケータたのCCCCCCCCCCCCCCC
127 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 01:00:16 ] コンパイル時に整数乱数が欲しいんだが、どうすればいいんじゃろう。
128 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 01:11:40 ] >>127 つ __TIMESTAMP__
129 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 01:14:30 ] thx そういえばそんなのあったなあ。 だけど文字列なのか…ちょっと厄介だのう
130 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 06:26:34 ] テンプレート内で文字列に変換するとき、迷ったらbox(...).toStringすればいいことに気づいた 便利だなこれ >>120 「開放する」の元の単語ははcollectであってdeleteやfreeじゃないので、 「処理する」「片付ける」のほうがいいかもしれませんね。
131 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 06:48:08 ] >>129 例えばこんな感じ hashの中身は、なるべくばらけが大きくなるような暗号系のアルゴリズムに近いほうがいいかも。 この値をキーにして、立ち上がりの早い擬似乱数生成器にかける方法もある いずれにせよインチキなんで、求める乱数性に応じて適当にやってみてください int hash(in char[] x) { int sum; foreach(c; x) sum^=cast(int)c*3; return sum; } static if( hash(__TIMESTAMP__) == 1 ) { }
132 名前:120 mailto:sage [2007/10/11(木) 10:47:31 ] >>130 おおう、対応どもです。しかしせっかく真摯に対応していただいて申し訳ないのですが、 私の言いたいことは翻訳の仕方に関してでは無く、書いてある内容そのものなのデス。 多分原文でも言ってることは同じで、翻訳には問題なかったんじゃないでしょか。 というわけで、改めて>>120 の疑問を書き直してみたり。 「Dでnewした領域のポインタをC++に渡してやってもいいけど、 途中でGCが走ってその領域がcollectされちゃうと、 いきなりポインタが無効になってC++側が困るよね。 だから以下ほげほげな方法で、GCのcollect対象にならないよう気をつけてね」 ってヲルターは言ってるけど、ポインタが無効になる要因ってcollectだけじゃないよね? www.kmonos.net/alang/d/garbage.html によれば、 > 4. 残ったメモリ領域のデータをコピーして使用領域をまとめる処理 (コピーGCと呼ばれます) が実行される可能性があります。 > ガベージコレクタは、オブジェクトをメモリ上の任意の位置に再配置することがあり... つまりcollect対象でない「生きた」領域を指すポインタだって、GCが走れば再配置によって無効になる可能性がある。 本当は「生かす」だけじゃなく、そのメモリ位置に「固定」する方法が必要なんじゃないか? ……って、アレ? このへん「Cとのインターフェイス」に書いてあることと同じじゃないすか。今気付いた。 今まで問題になったことなかったっけ? 再配置なんて実際には滅多に起こらないとか?
133 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 11:12:23 ] >>132 ・今のPhobosとTangoのGC実装はコピーGCじゃないので、再配置なんて実際には決して起こらない ・もし実装がコピーGCに変わったら、指摘されてる通りの問題は起きる ・そんときは std.gc.fix(void*) みたいな固定するメソッドが追加されるんじゃないかなあ(予想
134 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 12:11:03 ] Tangoのほうは仕様変更とかないの?
135 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 12:27:46 ] SDLのD2.0用のポーティングってある?
136 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 12:33:55 ] >>134-135 わかんね
137 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 13:33:07 ] >>133 managed C++ に、pinっていうのがあったなぁ (ピン止めという意味)
138 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 15:01:05 ] >I think Herb was talking about ADL. D doesn't have ADL, but the next update will include "overload sets" which, although very different, accomplish the same thing. 大風呂敷ktkr。非常にwktk。
139 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 15:28:15 ] だれかよんでくだしい
140 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 16:18:29 ] 私は、Herb(人の名前?)はADLについて話していたと思っている。 DはADLを持ってはいないが、次のアップデートの際には「overload sets」が導入されるだろう。 これはADLとは非常に異なるものの、同じことを実現するものである。
141 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 16:20:54 ] 誤訳や補足があればおながいします
142 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 16:31:43 ] 元の話よんでないけど文脈からして Herb = Herb Sutter (C++のえらいひと) ADL = Argument Dependent Lookup namespace Hoge { class X{}; void foo(X* x){} } foo( new Hoge::X ); // Hoge::foo って書かなくても、引数のクラスと同じ名前空間で // 定義されてるfooを勝手にコンパイラが呼んでくれるC++の機能 // 複数の名前空間にまたがって関数オーバーロード出来る かと。 Walterたんは昔ADLやるとカオスになるからやらないって言ってたけどどうなるんだろう
143 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 17:45:45 ] ネームスペースあえてつぶすようなマネはやめてほしいなぁ。。。 パールのお化けがでるよ?
144 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 17:47:13 ] (new Hoge.X).foo(); に限ってADLを行うようにすればいいんじゃね?
145 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 18:00:09 ] それは、配列のプロパティ的な引っ張り方だねぇ。 うーん。わかる人にはわかるって感じだなぁ。 むー、どうなるんだろうねぇ。
146 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 23:03:02 ] >>143 何にもわかってないなぁ。。。
147 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 16:05:48 ] >>146 もっとサンプルコードくれくれ。
148 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 19:10:29 ] この問題はこういうのだと把握 //b.d void func(string){} //a.d import b; void func(int){} void main(){ func(10); //オーバーロードと考えてこれを呼べてもいいだろうに //func("hoge"); b.func("hoge"); // 現状フルネームが必要 } ADLあんまり知らないんだが importされたモジュールのシンボルと真の意味で重複しなければ 呼び出し可能にするだけだと思うんだけどややこしいことが必要なの?
149 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 19:49:52 ] それちがくね?
150 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:27:50 ] あれ・・・違ったらすまそ ADLは引数の型の名前空間を見に行って関数を探すみたいだけど そんなややこしそうなことしなくても素直に考えたら a.func(int) を a_func_int として b.func(string) を b_func_string としておいて どこかで func(10) を見つけたら *_func_int のシンボルを検索し func("hoge") を見つけたら *_func_string のシンボルを検索するだけだよな? それでコンフリクトが見つかったらあいまいな関数呼び出しエラーにすればいいんじゃないのかと思って
151 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:40:39 ] なんかすごく勘違いしてる気がするぞ
152 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 20:55:03 ] ううむADLが何で必要なのか勉強してくるか・・・
153 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 21:35:52 ] てか調べてから家よ。 なんでお前の想像でレスを消費しなきゃなんないんだよ。アホかいな。
154 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 22:35:11 ] 低レベルな質問で申しわけないんですが、構造体データを std.file.read() や std.file.write() で読み書きするにはどうしたら 良いんでしょうか?というか、void[]型の使い方がいまいち分からない。
155 名前:154 mailto:sage [2007/10/12(金) 23:12:13 ] すいません、自己解決しました。 void[] は型のない配列だから、構造体もlengthが1の配列にして受け渡しすりゃ良かったんですね。
156 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:53:25 ] 自分でも試してみたけど、そういうmarshalっぽいのはすごい泥臭くなるのね。 毎回手で書くようなもんじゃないということなんかな。
157 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 01:15:38 ] 構造体をうにおんで囲んでryとか
158 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 02:06:38 ] 泥臭さもDらしさではある
159 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 02:29:16 ] (cast(ubyte*)&st)[0 .. st.sizeof] 共用体のほーがいいかもなー
160 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 03:11:03 ] YAMLの実装はありますか?
161 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 04:36:40 ] ttp://shinh.skr.jp/d/bogoyaml.html これ?
162 名前:デフォルトの名無しさん [2007/10/13(土) 22:42:49 ] >>135 DerelictのD2.0用のポーティングならある
163 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 05:50:56 ] そろそろ1系列から2に乗り換えようと思うんだが何がどう変わる?
164 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 06:24:42 ] その辺よくわかんなくてずっと1系列使ってる俺。 詳しい人誰か移行ガイドとか書いてくれないかなと思い続けている。
165 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 10:36:27 ] >>164 いいだしっぺの法則で是非 m(_ _)m constとか文字列のコピー、そのあたり型が厳格になったのが 違うと思う
166 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 13:16:58 ] 2.0 ちょっと使ってみた感じ ・doxygen 未対応(const な引数、戻り値を使うと正常にパースできない)。 ・各種ポーティングを2.0用に(若干)修正必要。 ・各種ポーティングに渡す時にキャストが必要。 例えばtoUTF16z()などの戻り値が(const wchar*)だけどポーティングのほうは(wchar*)なのでcast(wchar*)が必要 ・文字列リテラルが invariant なchar[] なので char[] s = "hoge"; とかやってると修正が必要。 だった。文字列リテラルはともかく、各ツールやライブラリが2.0用に対応してないと面倒くさくて適わない。 結局1.0に戻った。const/invariant/final は1.0に初めから欲しかったなぁ。
167 名前:166 mailto:sage [2007/10/14(日) 13:20:23 ] あと不安定だった。bindings の win32 は修正しないと無限ループ突入したし。
168 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 13:47:48 ] constといえば、 const(C) c; //Cはクラス というメンバ変数に代入しようと思ってもできない(言語仕様上できるはず)とか、 メンバ関数でfinal constってできないこととか、 「一度初期化したら変更しない。初期化はコンストラクタじゃないメンバ関数で行う」 ということをしたいときに、finalが使えないこととか、 使いにくい点が多数。 将来なんとかなるのかな。 あと、「あるオブジェクトが別のオブジェクトの参照をもつ」ということをたまにするけど、 そのとき、別のオブジェクトを変更しないときはそれにconstを付けたいと思うのが普通だと思う。 で、そうするとその別オブジェクトに含まれるポインタには全部constが付いてしまう。 例えば、別オブジェクトにHWND型の変数があって、それを取り出してAPI関数に 入れるときには、constが付いてしまっている。 何が言いたいのかというと、win32のバインディングを完全にD2.0に対応しようとするならLPCSTRをconst付きにするだけでは駄目だということ。 ポインタ型を引数に取る全ての関数について、正しくconstをつけないといけない。 でも正直、win32をポーティングしてる人たちがここまでやるとは思えないし、なんかconst周りは絶望感しか感じない。
169 名前:168 mailto:sage [2007/10/14(日) 13:52:10 ] あと、余談だけど、関数引数のinって値渡しだったんだな。 参照渡しだとずっと思ってた。 どこで勘違いしたんだろ。
170 名前:163 mailto:sage [2007/10/14(日) 14:09:05 ] >>166-168 とん。 結構めんどそうなのでもう少し様子見てみるわ
171 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 17:04:00 ] >>169 ポインタの値渡しだね。 1.0の in/out/ref は正直使いにくいと思った。 in でも参照先の値を変更することがいくらでもできるし。 const まわりはまだ検討が足りない気がするなぁ。
172 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 23:44:10 ] >>171 >ポインタの値渡し ? アセンブラでみるとポインタで渡すのが参照渡しとおもってたんだけど・・違うのかな。 >参照先の値を変更することがいくらでもできる castしてない?
173 名前:デフォルトの名無しさん mailto:sage [2007/10/14(日) 23:54:33 ] CTFEでForeachRangeつかえないのかな?
174 名前:168 mailto:sage [2007/10/15(月) 00:13:18 ] >>171 >ポインタの値渡しだね。 ただの値渡しだと思う。 デバッガで逆アセしたコード見てみたら、inがあってもなくても同じコードになってたし。
175 名前:171 mailto:sage [2007/10/15(月) 01:14:50 ] >>172 , 174 ああ、ごめん。俺が言ったのはクラスや配列を引数として渡すときのこと。 int などの基本型ならそのままの値渡し。
176 名前:デフォルトの名無しさん [2007/10/15(月) 20:42:17 ] /* 以下のコードがコンパイルエラーになるんだけどバグ? bug.d(12): Error: this for m needs to be type S not type bug.C bug.d(12): class bug.C member m is not accessible */ import std.stdio; import win32.windows; struct S { int m; } class C { int f() { return S.m.offsetof; // エラーになる } } int main() { writefln("%d", S.m.offsetof); // これはOK return 0; }
177 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 21:28:16 ] バグっぽいね
178 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 07:26:22 ] デリゲートの挙動が意味不明だ
179 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 18:36:41 ] >>178 どんな感じっすか
180 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 19:18:31 ] デリゲートな部分ですから、、、
181 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 19:40:16 ] 【審議中】 ∧,,∧ ∧,,∧ ∧ (´・ω・) (・ω・`) ∧∧ ( ´・ω) U) ( つと ノ(ω・` ) | U ( ´・) (・` ) と ノ u-u (l ) ( ノu-u `u-u'. `u-u'
182 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 21:33:12 ] OpenGL+SDLでゲームを作っているのですが、 SDL_mixerとABAさんのsound.dを使うようにしたところ、 Out of memoryというエラーが出てクラッシュするようになってしまいました。 メモリ使いすぎかと思ったのですが、 タスクマネージャから見るとメモリ使用量はほとんど増加していないので、 どんなバグを疑えばよいですか? ソースコードの変更点としては、数箇所にSound.playSe()とSound.playMarkedSe()を追加しただけで、 しかもこのライブラリはABAさんが実用化しているので、何が変わっているのかさっぱりです。 これを取り除くとやはり発生しなくなります。
183 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 21:34:58 ] 書き忘れ。 コンパイルは成功して、同じ用にゲームは動き、音もなるのですが、 しばらく動かしていると突然エラーが出て終了する、という状態です。
184 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:33:10 ] >>180 口元の筋肉がちょっと動いた
185 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 00:29:22 ] D言語のコンパイラ精度ってどうなの
186 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 01:22:29 ] 正確性には欠けるな。バグだらけ
187 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 01:24:16 ] >>182 D2.0でやってる?
188 名前:178 mailto:sage [2007/10/17(水) 02:36:03 ] >>179 要はこういうことなんだなあ、と www.kmonos.net/wlog/64.html#_2340060823
189 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 04:23:32 ] 爆弾キターーーー ttp://www.digitalmars.com/d/changelog.html What's New for D 2.006 * Transformed all of string, wstring, and dstring into invariant definitions. Tons of changes in function signatures and implementations rippled through the standard library. Initial experience with invariant strings seems to be highly encouraging. * Implemented Overload Sets for functions and templates. phobosの機能追加は多すぎて省略
190 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 05:04:39 ] 何か凄い凄い。 std.getoptでプログラムの引数の利用が容易に、std.fileにディレクトリ内のファイル一覧を簡単に取得する方法が無かったのが修正された、std.stdioに機能増えすぎワロタ、std.contractsが新鮮。 std.conv.parseとstd.string.munchのコンボもいい。けど、refを使ったのは別のモジュールにまとめて欲しいような気がしないでもない。
191 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 05:16:50 ] すごい、すごいけどD1.0系列の更新が止まったように見える… 仕様が固定されたD1.0系列を使うか新機能とPhobosが見せる巻き返しを堪能するためにD2.0を使うべきか…悩ましい…
192 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 05:29:55 ] 何がすごいのかさっぱり分からん
193 名前:デフォルトの名無しさん [2007/10/17(水) 05:59:56 ] D言語  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ___ _ / ____ヽ /  ̄  ̄ \ | | /, −、, -、l /、 ヽ | _| -|○ | ○|| |・ |―-、 | , ―-、 (6 _ー っ-´、} q -´ 二 ヽ | | -⊂) \ ヽ_  ̄ ̄ノノ ノ_ ー | | | ̄ ̄|/ (_ ∪ ̄ / 、 \ \. ̄` | / ヽ ` ,.|  ̄ | | O===== | `− ´ | | _| / |
194 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 07:51:06 ] な、なんだどうした何が起こった!? 日本語訳を! 良いニュースなのか悪いニュースなのか!?
195 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 07:55:39 ] C++が使えない無能の為のプログラミング言語=D言語
196 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:10:22 ] ktkr
197 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:15:42 ] こりゃまたすごいのきたな。
198 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:24:33 ] てかD言語ってまだ開発してたのか
199 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 09:13:04 ] 標準ライブラリって本当にPhobosからTangoに移行するん?
200 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 11:54:50 ] >>199 定期的に話題になるよな 2.0をいじってたら、 Tangoのわなびとしか、最近思えなくなってきた。
201 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:05:40 ] ttp://www.digitalmars.com/d/phobos/std_variant.html ををVariant来た! boxはいらない子になるのかなぁ・・・ !isっていつからあった?
202 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:14:31 ] あ、string系のaliasがconst(char)[]からinvariant(char)[]に変わったのか。 ……どーいう意味を持つのかイマイチ分からない。 というか、未だに「invariant型」の動作がよく分からん。 invariant(char[]) book = "I, Robot"; って宣言したbookに関して、 book ~= " by Isaac Asimov"; book.length = 1; book = "2001 Space Odyssey"; こういう動作は別に禁止されないんだよね。invariant型って、どういう目的で使えばいいの?
203 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 12:32:07 ] >>191 D2.006の新しいPhobosの機能をD1.xに移植した人がdigitalmars.D.announsに。 std2ってやつ。
204 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:24:39 ] >>202 invariant(char[]) book = "I, Robot"; を invariant(char)[] book = "I, Robot"; で、意味が変わるきがするが
205 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:02:50 ] >>201 !isはisが導入されたときからあったと思う
206 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:11:49 ] >>204 それは同じ意味になる www.digitalmars.com/d/final-const-invariant.html の Invariant Doesn't Apply To Declared Symbols のあたり。
207 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:19:58 ] >>202 たとえば class Stream { int opApply( int delegate(ref const(char)[] line) dg ); } こういう宣言だったとしたら、 string s; foreach(line; din) if( line[0] == '#' ) s = line; writeln( "#で始まってた最後の行は", s ); このコードは期待した通りに動かないかもしれない。 Streamが内部でlineの中身を勝手に再利用してるかもしれないので。 constだと、"自分が"lineの中身を書き換えることはできなくなるけど、 他のところで書き換えが起こる可能性は否定できない。 これが class Stream { int opApply( int delegate(ref invariant(char)[] line) dg ); } こうだったら、opApplyの実装を見るまでもなく↑のコードは普通に動く。 invariantな配列の中身はもう"誰も"書き換えないので、Streamが後で 書き換えるようなことがない。 とかそういう使い方。
208 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:29:13 ] おい。invariant周りでコンパイル通らなくなったぞ。 まーた全部書き換えかよ…
209 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:48:24 ] なんでもかんでもidupつけないといけないのは気持ち悪いな
210 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:21:42 ] aasumeUniqueでおk
211 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:49:37 ] ttp://www.digitalmars.com/d/phobos/std_contracts.html string letters() { char[] result = new char['z' - 'a' + 1]; foreach (i, ref e; result) { e = 'a' + i; } return assumeUnique(result); } これか なるほど
212 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:05:34 ] >>208 動作確認してなかったので翻訳してなかったんだが、 string, wstring, dstringの定義をinvariant付きにしました。 関数の定義と実装を(標準ライブラリ関数の影響も含めて)山ほど変更する必要があります。 invariantなstringを使ってみた最初の感想としては、かなり有望です。 なにがどう有望なのか試してないのでなんともいえませんが。
213 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:37:54 ] おいおい、phobos 張り切るのもいい加減にしろよ。tango の立場がなくなっちまうじゃないか。
214 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:01:30 ] walたんがTangoに「○○追加してね」っていえばいい
215 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:41:34 ] D2.x用のTangoは、どうなってる? もう出てる?
216 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:45:46 ] >>215 まだじゃね?
217 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:20:07 ] import std.stdio, std.contracts; void main() { foreach(string line; lines(enforce(fopen(__FILE__)))) { write(line); } } SUGEEEE
218 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:22:39 ] そんな感動するようなことじゃないが、これまでなかったのが不思議だな。
219 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:31:01 ] そういう短いけれども案外実用的なコードがたくさん欲しいところ
220 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:31:17 ] >>187 解決しました。 すいません、もともとあったメモリ関係のバグが、たまたま出てきた形でした。
221 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:45:35 ] D言語、1系が安定しない永遠のβだった頃から注目してるけど、 1系が成熟しないままさっさと2系に移ったところを見ると 実用的になるのは3系が登場してからかなと思ってしまう。
222 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:51:38 ] Dは永遠にをるたんの実験言語。 実用的になるなんてあり得ないよ。
223 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:59:20 ] >>209-211 さっぱりわからんのだが・・・ idup付ける代わりにassumeUniqueで済むってことだけじゃないよな? 余計にタイプ数増えるんだが 本当はassumeUniqueは何のためのものなの?
224 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:05:37 ] >>223 idupはデータのコピーが行われるが、 assumeUniqueはコピーが行われない。
225 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:40:23 ] >>224 うーん そうですか もうちょっと暗黙のコピーが発生するのを許容して 明示的な指定が減るようになったらいいね
226 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 22:50:17 ] テストしてなさすぎワロス いろいろ試してみたがdmd2.006はstd.formatが壊れてるな //>writef //testtest1010 //%s=%dvalue200 import std.stdio; void main(){ writef("test", "test", 10, 10, "\n%s=%d", "value", 200, "\n"); }
227 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:01:33 ] >>226 >Breaking change: std.stdio.writef can now only accept a format as its first argument.
228 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:21:22 ] >>227 あ 最後に書いてあるのそういうことか thx
229 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:34:02 ] stringにconstつけてみたりinvariantになったりするのはWalterたんからの「ソース見直せリファクタリング汁!!」というご命令に違いない!
230 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:57:41 ] Andrei Alexandrescuありがとう、そしてがんばれー とエールを送っておこう
231 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:09:50 ] >>230 Andrei Alexandrescu先生のTMPが見られるのは今やD言語だけ!(でもない)
232 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:40:11 ] gdcってdmdで言うv2.0以降はあるの?
233 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:46:50 ] svnで対応してるよ。
234 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:31:42 ] >>206 ありがと しらんかった
235 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:01:06 ] coroutineが、phobosでほしいなぁ
236 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 00:14:29 ] そこは言語仕様に組み込むべきだろう。
237 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 06:13:14 ] dmd2.004 以降でこういうちょっと怪しいのをコンパイルしようとすると途中で固まる。 void main(){ f([[]]); } void f(int[][] a){} f(cast(int[][])[[]]); ならおk -v 付きでコンパイルすると semantic3 までは表示されるけど code が表示されずに止まってる。 何これ?
238 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 06:40:44 ] D言語で作られたアプリケーションって何があるよ
239 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 11:33:27 ] Dで作ったOS それがDOS
240 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 11:37:56 ] ttp://www.digitalmars.com/d/phobos/std_string.html int ifind(in const const char[] s, in const const char[] sub); なんなんだ、const だらけかよ。 inつかっても constをこれだけ使うっていうのがなんとも・・・
241 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 12:44:04 ] in const constってどういう意味ですかwwww inって invariant const scopeだったよねwwwconst三つですかwwwww
242 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:09:17 ] typo ソース見れ
243 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:36:42 ] D言語でstaticライブラリをつくる方法はどうやるのでしょうか。 コンパイル激早なんで、やる必要があまりないのかもしれませんが・・・
244 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:50:03 ] budなら bud -lib main.d 何も使わないでやるなら dmd -c main.d lib -c -l main.lib main.obj
245 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 13:50:18 ] >>240 なんかintつけるとDDocが変なものを生成する。
246 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 14:18:48 ] static引数まだー?
247 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:20:50 ] >>246 なにそれ
248 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 16:53:40 ] 関数名に?入れて述語ry そういやなんで?とか!とかは識別子にならないの?
249 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:01:03 ] scopeクラスが単にnew ScopeClass();でエラー出さないでしかもスコープ抜けてもデストラクタが呼ばれないですけどこれはバグ?
250 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:03:49 ] やっべDMD古いからかな。新しいので試してみます。一応古いのは1.020です
251 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:24:27 ] >>249 scope周りはバグだらけ。もうどうしようもない
252 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:40:25 ] 把握しました
253 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 17:50:04 ] 本当にconstとかinveriantとか必要なのか? C++から移ってきたときはほしいなと思ったこともあったけど、現状のconstとinveriantを見てるとうざったさ以上の便利さを感じない… もっと上手い方法なかったのかな…
254 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 18:03:42 ] デリゲート便利だなw Scheme触って帰ってきたら使わずには居られないwwww
255 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 19:50:18 ] >>253 constまわりは、まだまだこれからって感じだと思う。 現時点では文字列をimmutableにするためにしか使われてないし。 評価を下すのはまだ早いと思う。 現状のconstまわりの仕様には問題あると思うが。 文字列(配列)のスライスはコピー作らないから、文字列をimmutableにする意味はあると思うし、現時点では、 「inveriantは文字列をimmutableにするためのもの」 って割り切って、それ以外の機能は使わないようにすれば何とかやっていけそうだと俺は感じてる。
256 名前:デフォルトの名無しさん mailto:sage [2007/10/19(金) 23:12:18 ] >>244 ありがとうございます 作れました!
257 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 02:46:33 ] 勇気出してD2を入れることにしたぞー!
258 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 07:56:12 ] macroって結局なんなの?
259 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 13:09:30 ] >>258 カンファレンスのをるたんのスライド見れば分かるよ。
260 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 14:45:02 ] それでも俺は1系列を使い続ける
261 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 16:50:22 ] >260 1系列は俺に任せてお前達は先に行け! まで読んだ
262 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 17:38:26 ] >>261 文字数増えてるという不思議。
263 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 18:20:58 ] >>262 つまり行間じゃなくて字間を読んだということか
264 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 20:27:45 ] D2.0のstring周りの改変は 暗黙のコピーがいやでしょうがない どこでどう動いてるか把握したい 文字列で、知らぬ間にメモリをちょっとでも使われるのも嫌でたまらん ってことかな。 スクリプトライクな手軽なコーディングを できるだけ殺さないように、がんばってんだよね
265 名前:デフォルトの名無しさん mailto:sage [2007/10/20(土) 22:14:00 ] みんな phobos と tango のどっち使ってる? phobos は単純明快だが機能面でちょっと不足な上にバグ多いし、 tango は機能面はある程度充実してるけどドキュメントが整備されてない上に使いにくかったりするし、 なんかこう、どっちも中途半端なんだよなぁ。
266 名前:デフォルトの名無しさん [2007/10/20(土) 22:28:27 ] >>248 全角?も駄目なんだな。これで我慢しとけ。 bool もしかしてnullですか(Object nullかどうか調べるオブジェクト) { return nullかどうか調べるオブジェクト is null; }
267 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:09:01 ] もしかしてnullですか?
268 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:10:25 ] もしかしてnullですか¿
269 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 00:11:09 ] nullですよ¡
270 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 03:22:06 ] >>264 藻前は組み込みに向いている Dが組み込みに対応するその日まで Dで生き延びろ
271 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 03:25:55 ] >>264 の発言は>>264 自身のことじゃなくてDの文字列仕様の意図でしょ?
272 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 07:58:34 ] >>265 両者の良いところが全部一つに集まると、 素晴らしき真のDが誕生してどんな願いも叶えてくれると伝説にはあります
273 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 09:51:27 ] >>270 げ、するどい 正直びっくりした。 組み込み屋です。 Dが早く使えないかねらってます。
274 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 12:02:31 ] ちょっと和んだ
275 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 13:55:30 ] >>273 そう考えると2.006 invariant stringは有望だなあ。 Walterたんが「リアルタイム処理ではmalloc/freeよりGCの実行制御のほうが有利なこともある」 ってるが、そういうのは確かにあるので分かる気はする。 実際free listと組み合わせるとなかなか高速に動作してくれるし。 ada並の用途になるとDも本望だろう。
276 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:37:40 ] >>272 それを後の人は「闇鍋」と呼んだ。
277 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 14:57:01 ] D1〜D7まで揃えるとDragonが(ry
278 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:34:37 ] 組み込み屋ってなにするひと?
279 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:45:17 ] >>278 ttp://ja.wikipedia.org/wiki/組み込みシステム
280 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 15:57:58 ] >>279 サンクス
281 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 17:11:50 ] 組み込みに関してはかなり素人で見当違いなことかもしれないんだが… たとえばH8のマイコンがGCCのコンパイラでコンパイルできるみたいだけど、 GDCとH8を使ってD言語による組み込み向けのプログラムを作ることはできないのかな?
282 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 18:59:26 ] GDC
283 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 19:00:39 ] ごめん、途中で送ってしまった GDCでクロスコンパイラはつくれるかもしれないが、 ターゲットが32ビットCPUでないとだめかもしれない。
284 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 19:01:25 ] tango 0.99.2を使ってるんだが、IConduitやらOutputStreamやら入出力周りの関係と用途がさっぱりわからん。 ソースによらず汎用的にストリームを扱いたいときはどのインタフェースをサポートすればいい?
285 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 20:22:16 ] >>281 去年 gdc を H8 にポートしてみた事がある。 phobos の GC がうまく動作しないところで絶賛放置中。 2日の作業じゃここらが限界だった。
286 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:06:18 ] GCつかわなければいけるんじゃなかろうかと一瞬考えたけど、そんなDに意味はあるのかどうか真剣に考えてしまった。
287 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:16:38 ] ベターC++と高速コンパイルだぜ!
288 名前:デフォルトの名無しさん mailto:sage [2007/10/21(日) 22:41:03 ] GDCだと遅い罠
289 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:17:21 ] じゃあ意味ないんじゃね?
290 名前:デフォルトの名無しさん [2007/10/22(月) 00:56:13 ] >>284 flectioned から抜き出してみた。tango と phobos の差異を吸収するような 書き方が一番なんでないかい? static if(is(typeof((new object.Object()).toUtf8()) == char[])){ const bool inTango = true; const bool inPhobos = false; }else{ const bool inTango = false; static if(is(typeof((new object.Object()).toString()))){ const bool inPhobos = true; }else{ const bool inPhobos = false; } } static if(inTango){ import tango.stdc.stdio; } else static if(inPhobos) { import std.c.stdio; } int main() { printf("Hello world"); return 0; }
291 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 00:58:57 ] またあげちまったよ・・・すまん
292 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 01:23:43 ] ttp://dsource.org/projects/tangobos/browser/trunk Tangobos is a compatibility layer to allow most Phobos software to be compiled unmodified on Tango. It is effectively a port of Phobos to Tango: it is only modified to the degree required to make it compile. これってTango/Phobos共存させるのが目的なんだよな?
293 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 02:30:10 ] テラタンゴボスwww
294 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 10:56:20 ] なんというド直球ネーミングw
295 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 11:06:07 ] D言語製のブラウザってある?
296 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 12:24:25 ] >>292 Tangoboswww 見間違いかと思ったわw
297 名前:デフォルトの名無しさん [2007/10/22(月) 12:57:13 ] >>292 Tangoの上に乗っかるPhobos互換レイヤか
298 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:07:18 ] どっちかに統一したほうが良いように思うのは俺だけ?w
299 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:09:36 ] Tangoboswwwwwwwwwwwww
300 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 13:31:59 ] >>298 統一してほしいね〜 そもそも、TangoはPhobosと共存できないように 作る必要があったのだろうか?
301 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:03:17 ] 誰かがグレイトなライブラリを作ればいい。 どうせ D はまだ実用されてるとは言いがたい状況なんだし、 新規のライブラリがポンと出てきた所で問題は無い。
302 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:08:58 ] それをここで作るんですよ
303 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:27:52 ] Pascal型UpperCamelCaseが嫌いなのでphobos中心にマージされて欲しいと思う俺がいるが、 phobosはバージョンアップに追従するのが原則、 Tangoはそこまでやったりもしてないからなあ。 C++ユーザからの乗り換えパスとしてSTLとboost相当の移植は欲しい気がする lexical_castとかはC++では使えるけどDではtoStringその他が使えるからまあいいけど。
304 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 14:35:52 ] >>303 >lexical_cast 確かめてないけどstd.conv.toは?
305 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 16:47:31 ] makefileがわりにmake.dってファイル作ってrdmd make.d optionってやるのよさそうだね。 bud使ったほうが早いかな?むしろrdmd bud.dってかww
306 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 16:49:55 ] いまさら気づいたけどなんもよくないね
307 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:01:00 ] D2でライブラリ関係のコンパイル通らなすぎわろたあああああああああああ
308 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:31:37 ] >>303 ちゃんと「The D Style」なんてのまで存在してるのに、 そこまでlowerCamelが嫌いだったのかねぇ・・。 豊富な機能やクラス設計に「おお」と思いつつ、ドキュメントのHelloWorldを見た時点で > tango.io.Console; 「え? モジュール名・・」 > Cout("Hello...")(s).newline 「え? Coutて? UpperCamelな関数? いや()演算子持ったオブジェクト? つかなんで可変引数使わへんのん? で、newline? 構文が最終的にプロパティ参照になっちゃってるやん?」 そんなTango。
309 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:34:31 ] そういう話題が出ないはずないと思うんだけどなぁ・・・ なんか考えがあってのことなのかね?
310 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:44:08 ] Tangoは機能自体はいいんだが、俺も設計が気に食わない。
311 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:54:10 ] たしかにCoutはきもい void coutln(T...)(T t){ ... } とか各自定義汁ってことか?www
312 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 17:56:18 ] とりあえず動けばおkってことになってるのかな???
313 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:15:54 ] 自分はCoutよりStdout派。 import tango.io.Stdout; Stdout("こんにちは 世界\n"); Stdout(1, 2, 3, 4, 5).newline; int a = 5, b = 10; Stdout.format("てすと {} + {} = {}", a, b, a+b).newline;
314 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:33:08 ] opCallのオーバーロードは、C++のビットシフトのオーバーロードより数倍キモイ。
315 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 18:34:55 ] まぁ、なんだかんだワガママ言ってもphobosよりはOOPが生きてるし、 使いたいといえば使いたいんだよねTango。 SDLに対するSDL_image/mixer/..、C++のSTLに対するboostみたく、 phobosがコンパイラ添付の最低限ライブラリ、 Tangoが「事実上の標準」な拡張ライブラリ、とかに分かれててくれるのが理想と思う俺。 組込みとか色々タイトな分野じゃない限り、普通Tangoを被せて使うものだよ、みたいな。
316 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:09:10 ] ならTangoはPhobosを利用しないといけないな! つーかなんでTangoはPhobosと共存できないのwww意味不明wwwwww
317 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:11:50 ] Phobosは廃止でいいよwwwwwwww
318 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:41:58 ] そこでTangobosが登場する?? Phongoとか、ネーミングはもうちょっとなんとかならんかったのか。
319 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 19:51:41 ] Tacos
320 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:02:40 ] >>319 それ良さそう。
321 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:19:52 ] >>304 俺も使ってないけど使えると思う。 というのはともかくとして、C++はlexical_castが無いと面倒な場面があるのだが、 Dではstd.conv.toを使わなくても結構いけるのでそのへんが良い。
322 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:21:13 ] >>319 cはどっから来たんだよw
323 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 20:22:33 ] 無理に2つのライブラリ名入れることも無くない?
324 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:01:04 ] PThaonbgoos
325 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:02:42 ] よめなす。ふぁんぐーす(bはサイレント)?
326 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:09:56 ] たんごぼす
327 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 21:24:47 ] こんどこそでいもすで
328 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:06:25 ] Daimos(デイモス)はもうすでにあるし、Harmonia(ハルモニア)でよくね? ギリシャ神話でアレス(Ares)の娘…ポボス(Phobos)とデイモス(Daimos)の妹? ハーモニー(調和)の語源。とってつけたような設定じゃないか。
329 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:07:57 ] すまん、スペルミス。 ×Daimos ○Deimos
330 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:12:21 ] ハルモニアっていうとロマサガ思い出す・・・
331 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:25:30 ] ちなみに Harmonia harmonia.terrainformatica.com/doku.php も Ares www.dsource.org/projects/ares/ もすでにあるが
332 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:27:36 ] >>328 それいいけど名前資源の無駄遣いはそろそろ控えるべきだと思ったw やるならマジでやって欲しい・・・
333 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 22:28:16 ] あるのかよ だから無駄遣いはダメだと(ry
334 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:23:03 ] あったのか ライブラリの名前資源の干渉は防げないもんなぁ
335 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:31:29 ] じゃあ、 com.digitalmars.phobosとかするか?w
336 名前:デフォルトの名無しさん mailto:sage [2007/10/22(月) 23:34:07 ] そんなことされたら勝手に名前変えるぞゴルア
337 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:38:02 ] もう日本語にしちゃおうぜ
338 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:41:43 ] しかもひらがなな
339 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:44:24 ] 日本人である私たちがコードやコメントやパッケージ名に日本語を使わないのはおかしい! って言ってみるテスト
340 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:45:24 ] import 標準.標準入出力; void main() { writefln("ほげほげ"); } // こんなの嫌だぞ俺w
341 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:47:01 ] でも import std.stdio; よりは意味が取れる罠w 表意文字万歳
342 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:53:23 ] ヒント: タイプ数
343 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:55:16 ] じゃあひらがなかカタカナでいこう
344 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 00:57:55 ] ヒント: 文字幅
345 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:15:21 ] 輸入 標準.標準入出力; 無 主() { 整形書出改行("ほげほげ"); } こんな中国産言語ならありそうだな
346 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:18:50 ] そしてブロックはPython風にインデントでやれば{}も消える!!
347 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:26:22 ] >>344 半カナはどうだ? タイプはかな入力で。 ドウニュウ キカク.キカクニュウシュツ; ナシ メイン(){ ギョウカキ("ホゲホゲ"); }
348 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:36:31 ] 話を広げておいて申し訳ないのだがものすごい既視感がwww 前に似たような話してたお
349 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:36:58 ] >>347 かな入力なんてできる人はかなりレアだぞ… 俺にはつらいw
350 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:39:11 ] Phobos上でTangoが動作しつつ、キモイ名前をどうにかしてくれたらTangoはかなり使いやすいライブラリだと思うんだ。 って話だったっけ?
351 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 01:53:33 ] まったくそのとおりである
352 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 02:12:57 ] std::cout << "hoge" << std::endl; の悪習を引きずるかのような Cout("hoge").newline; に代表される 気持ち悪いインタフェースがなくなればってのも加えておいてくれ
353 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 02:57:09 ] そもそも std::cout << "hoge" << std::endl; の良かったところはグローバルな演算子オーバーロードで簡単に拡張が加えられるところだったと思うんだ。 std::ostream& operator<<(std::ostream& strm, const Hoge& fuga); 逆にいえばこれが使えなければ意味がないわけで… Cout("hoge").newline; とかは何を意図してこんなことをしようと思ったのか… まぁ、可変個数引数だと問題はあるけど。 String s; Cout(s.append("aa"), s.append("bb"), s.append("cc"))).newline; これだと aabbccとなるかccbbaaとなるかわからん。
354 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:00:35 ] ここではおまいらが好き勝手言ってるだけだけど、 何か良くて何が悪いのかが評価できるなら素晴らしいライブラリを作ることもできそうなのになw Phobosのobject.dをいじらず、The D Style準拠で Cout周りのインタフェースをほげほげした(どうすんだこれ) そんなTangoに改造したらいいってわけか
355 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:01:20 ] 2か所訂正…orz auto s = new String; で aaaabbaabbccとなるかccccbbccbbaaとなるか…か。
356 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:03:07 ] >>353 待て待てその最後みたいなのはC++でもやっちゃいけないことになってるんじゃなかったか それを問題視する必要はないことしようぜ
357 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:04:05 ] >>353 >演算子オーバーロード ヒント: toString
358 名前:357 mailto:sage [2007/10/23(火) 03:05:52 ] あ、でもtoStringよりもストリーム演算子の方が効率的だわな。
359 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:08:47 ] >>353 >opCall_rまだー? まで読んだ。
360 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:10:52 ] ("hogahage")Cout; こうですか><
361 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:11:59 ] 俺もそうおもたw けどおかしいだろw
362 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 03:34:05 ] (Cout "hogahage"); じゃあこうですか><
363 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 10:42:06 ] そして半角ひらがなの復活
364 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:17:25 ] 暇だから上げてみます。 自分用に作ったフレームワークです。 libwindowはライブラリでそっちをなるべくいじらない方向で設計されてます。 WorksMainはライブラリの実装で関数をガリガリ書くことでその目的を遂げます。 このライブラリはウインドウズ専用です。 www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00003.zip.html
365 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 17:37:53 ] >>363 ちょ!それスレ違い。 いや、俺もそのスレみてるからわかるんだが。
366 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 18:49:23 ] >>364 方向性にはげあがるほど同意 lowerCamelはいかが?(参照>>308 )
367 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 19:55:18 ] >>365-366 じゃああえて・・・DFLでよくね?
368 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 20:20:35 ] >>362 それなんてLisp?
369 名前:デフォルトの名無しさん [2007/10/23(火) 21:07:29 ] >>366 関数名はキャピタライズを採用して欲しかった俺がいる。 Time now = Now; とかやりたかったのに・・
370 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 21:42:58 ] これで諦めてください><; Time now = Time.now();
371 名前:364 mailto:sage [2007/10/23(火) 23:33:54 ] www9.uploader.jp/home/sukiyaki/ ここのアップローダはD関係なら自由に使ってください。合計200MBまで入りますから。 っていうか、人のライブラリがどうなってるか気になる!!! そうそう、あとで後悔した時用に削除Passを忘れずに。 で!レスサンクス!! >>366 こういう先頭大文字とかって名前あったんですね。。。 C++辺りからの癖になってるんですけど、次は小文字も検討してみます。 >>367 それ言われるとちょっと弱い。笑 Hにも・・・を見るとTangoだとかvar1系だとかそういうのが良くわからないので使ってないんですけど、 将来的な移植性を考えるとやっぱ習得したいですねぇ。。。
372 名前:デフォルトの名無しさん mailto:sage [2007/10/23(火) 23:57:44 ] 「ひとこぶらくだはひとこぶうんち ふたこぶらくだはふたこぶうんち これはうそ!」 lower/upper camel という字面を見てたら思い出した子供時代のはかない記憶。
373 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 12:20:43 ] Overload setっていうのでtoStringがかぶらなくなるのかと思ったら import std.string; class Foo { void bar(char* ptr) { string s = toString(ptr); // std.string.toString(char*)呼んで欲しい // けどObjcet.toStringにマッチしないのでエラー } } ダメなのか。まあstd.conv.toができたからいいけど
374 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:14:32 ] string s = .toString(ptr); って書けばいいから、できなくても別に不便ではないな
375 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:29:20 ] ExceptionとErrorの使い分けがわかりません>< おしえてくだしあ><
376 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:31:57 ] class Exception; 回復可能な例外は全て Exception クラスから派生すべきです class Error: object.Exception; 回復不可能な例外は Error クラスから派生すべきです
377 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 13:33:33 ] 回復が可能かそうでないかの区別がつきません><><><
378 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 14:57:06 ] 例外が回復可能かどうかなんて設計段階で判断できるような。 設計で判断できなくても経験積めばここは復帰無理だなっていうのが直感で分かるように。
379 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:35:55 ] どの範囲で復帰不能か可能か、って話もあるしな
380 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:38:23 ] なにがどうなると回復不可能になるの?
381 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:46:00 ] 回復が不可能になるとだな
382 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 15:58:04 ] 場合によりけりでしょ。 タイムアウトなんかで期待される結果が帰ってこなかった場合に、 初期値等のテキトーな値代入して問題なく処理続行できるなら例外、 出来ないならエラーって言う感じでいいんでは。
383 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:29:31 ] 回復不可能だって分かった時点でErrorの子クラスでExceptionをラップして投げなおせばいい。
384 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 16:31:01 ] にゃる そういう意味なのか システムがぬっ壊れたりするのかとおもた
385 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 18:59:27 ] 俺が分類したケース 回復不能 ・root/admin権限が必要なのになかった 回復可能 ・ファイルが見つからなかったが、指定しなおせばよい >>384 最終的にはシステムがぬっ壊れない限りは回復の手段を用意することはできるかと思う
386 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:01:42 ] 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。 ……みたいなの(やや極端な言い方だけども)を信じてたんで微妙に慣れない。 多分戻り値でエラー処理みたいな文化が嫌なんだろうけど、効率なんかも考えると回復可能なエラーまで例外ってどうなの? って気がしてしまう。 上みたいな(勝手な)文化を持ってたせいかExceptionに回復可能な、みたいなニュアンスも感じないし。 実際のところDでなんか書いてるときにみんなErrorとException使い分けてるの?
387 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:10:19 ] 俺の考えでは、プログラムの動作自体が危うい場合がError。 それ以外は全部Exception。 たとえば、ファイルをコピーするプログラム、copyを作るときに、 パラメータで指定されたファイルが見つからない場合は、Exception。
388 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:14:12 ] 基本的にException。 拾いたければ拾えばいいじゃん(たいていは回復可能だから) というスタンス。 行列演算で要素数が不適切なときもException(動的に要素数を決められる場合)。 ただし契約違反は実装者が間違ってるからassertするときはErrorが多い。
389 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:18:20 ] >>386 引数、返り値が適切なほうがいいというのはあるかもしれない。 計画の中にpureという仕様が入ってるが、 ああいうのをまじめにやるならエラー処理のために引数や返り値がつぶされるのは好ましくない。
390 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 19:21:41 ] >>386 > 処理続行できるような想定範囲内のエラーで例外投げるな。例外は例外的な事態に使用すべき。 これは誰の教えなのかkwsk
391 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 20:44:55 ] 人生のExceptionが発生しました
392 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 20:58:52 ] >>391 回復可能なのか、よかったな
393 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:06:09 ] 回復には神権限が必要です
394 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:15:29 ] 引きこもりでごめんなさい→Exception 生まれてきてごめんなさい→Error ってことか
395 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:33:52 ] お願い届いて!!私のException!!! 引きこもりでごめんなさい。
396 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 21:49:23 ] そろそろ人生のErrorが発生しそうで不安になってきた。
397 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:31:15 ] Javaみたく「こいつはこーいう例外投げるかもしれんからちゃんと対処しろよ!」ってコンパイラに言われないしなぁ。 意識してErrorを自前で投げたことはないや。 assert違反とか、デバッグモードで埋め込まれる配列境界チェックなんかはErrorか? そんくらい。 あれ? ErrorてExceptionの派生クラスだったのか? つまり「Error is a Exception」「回復不可能は回復可能の一種」 ・・あれ? おかしくないですかカテジナさん!
398 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:31:22 ] ファイル読み込みルーチンで、開くべきファイルがロックされてたり ファイルがなかったりしたら、再試行とか考えてException、 そもそもファイルシステムや開くファイルの種類が非対応だったりして なにをどうしようがファイル読み込みは無理、ってなのはError、とか。 ただ、それらを受け取るルーチンでは、たとえば別の読み込みルーチンを 使うとかで、(より大きな枠組みから考えると)復帰可能だったりするかもしれない。 という感じで、回復可能か否かが処理の段階によって変わることに注意して組むと Errorの使い出もあるんじゃなかろうか。
399 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 22:53:29 ] Errorがでたのに何事もなくプログラムが動作し続けるってのは、ちょっとおかしいと思う。 それだと正常系に復帰してるじゃん、と。 OutOfMemoryぐらい致命的でないとErrorというのとはちょっと違うと思う。
400 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:08:48 ] >>399 回復不可能は回復可能がグレードアップ! という考えで
401 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:11:16 ] つまり、ErrorをExceptionで捕えることができるのはおかしい、と。 Exceptionを派生したErrorってのがおかしいんだよな。 Errorを派生したExceptionとか、ErrorとExceptionはそれぞれ何からも派生してないってのがいいような気がするね。 Tangoみたいに安易に消しちゃうのはどうかとも思うが。
402 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:38:26 ] >>399 頑張ってメモリ解放して状況解消する頑健なプログラムだってありうるべ メモリ食いつぶしかねないプログラムなら特に。 どんなエラーも何らかの処理がなされる、というのがDの例外機構なわけで、 399的な「絶対に正常系に復帰しない」発想だと、例外もクソもなく強制終了 するしかない状況じゃないとErrorを出さない、という意味のない話になるべ 何が正常動作かは処理の段階によって変わるんじゃね
403 名前:デフォルトの名無しさん mailto:sage [2007/10/24(水) 23:40:29 ] その処理の段階ってちゃんと定義されてるのかな? 今のままだとExceptionとErrorがごっちゃになりそうな悪寒
404 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:23:53 ] むしろError使ったことないし 必要な場面に出くわしたことがないし これからも使わない気がしている
405 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 00:27:56 ] そういうのを定義するのが設計だべ まあそんなまじめなプログラム俺も書いたことないけど
406 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 07:11:32 ] 2.006にしてみたらinvariant string関係の変更がtonほど出てきた
407 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 07:59:27 ] invariantのおかげでWin32API使うとき今まで以上にキャスト式書く機会が増えた。それ以外で特に気になるところはなし。 今は2.006でphobosが強化されたという話を聞いてわくわくしてるところ。
408 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:24:16 ] invariant stringとstd.stringの変更を解決してたら、設計の理由がなるほどと…… 無駄なコピーを抑えたいという発想をどう実現するかがなんか分かってきた。 variant世界とinvariant世界が分かれてる感じで、 両者の窓口がcast(invariant)やidup、dupといった風情。 in char[]を受け取ってchar[]を返す関数の内部でstd.string関数を使う場合、 入り口でcast invariantして出口でdupすればおk、みたいな。 ただしこの方法だとスレッドセーフには気をつけないとならんので注意かも。
409 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 08:55:20 ] めぐりめぐって invariantがなくなって、Cと同じになったりしてな・・・
410 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:41:42 ] 散々こねくり回して出た結論がそれならば、それもまたよし。
411 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 09:58:43 ] idupの個人的まとめ ・idupは本当にコピーを生成する ・idupしたコピーはGCに回収される idupされた文字列を参照するようなstring(std.string中の関数の返り値など)をいつまでも受け渡し続けると、 いつまでたっても回収されずに残り続けることになるかもしれない。 巨大な文字列から1行だけ取り出すとかした場合はidupして、 巨大なやつをGCに回収してもらいやすくするのは考えられる。 idupは比較的気軽に使えるかなと思う。 長期的に生存する可能性があるプログラムについては知らね
412 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:25:51 ] ArrayBoundsErrorは回復不可能なんですか?
413 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:30:57 ] 配列の範囲外に対する不正なアクセスだからエラーなんでは? そもそもDは配列のサイズがあらかじめ調べられるので、範囲外に対するアクセスは事前に防げるはず。
414 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:48:59 ] ほんとによく設計されたソフトウェアなら、モジュールがAssertErrorなんか投げてきても catchして「このモジュールはバグってんな」って切り離て、 さらにそのモジュールに依存する別のモジュールにも通知したりして、 本当にコアなモジュールが生きてる限りは動きつづける、とか作りこむんだろーな。 apacheとかそんな感じになってるのか。Dじゃないけど。 気楽なDの個人アプリじゃそこまでやらんで、 void main(){ try{ myMain(); }catch(Exception e){ outputErrorMessage("ごめんちゃいバグで強制終了します。以下をコピペして送ってくれるとお互い幸せに。", e); } } とかでいいよね? 後は明らかに発生しそうなException(new File(stdin.readLine())とか)くらいは その場でcatchすんの忘れないように気を付けなきゃ、で。 「catchすんの忘れてねぇか? いいのか?」とコンパイラに言ってもらえればなぁ、とも思うけど、 そうなるとErrorとExceptionの違いが問題になってくる感じ。
415 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 10:55:20 ] もしかして関数呼び出すたびにtry-catch書くのが普通なのか
416 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:12:43 ] default: を書き忘れて例外出されたときはかなりビビッた。 何でswitchが例外投げるの!?って。
417 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:14:23 ] >>415 俺は!の話だけどさ、基本的に例外投げないな。だから、ほとんどtry構文使わない。
418 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 12:54:01 ] D言語で作られたアプリで参考になるのねーの?
419 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 13:10:04 ] >>415 それは普通、ではなく理想
420 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 13:45:58 ] 回復可能なもので例外投げるのは速度が・・・
421 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 13:52:39 ] 通常の実行ロジック部分のパフォーマンスが重要 例外時に速度重視?
422 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 14:13:54 ] ああ、なるほど。勘違いしてた
423 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 15:10:24 ] >>419 Cで関数呼び出しごとにエラーコードをチェックしてエラーコード返して・・・ってやるよりも 遥かにぐちゃぐちゃなコードが出来上がるだけな気がするのだけど。 それを無くして「正常な実行パス」だけを簡潔に書くための構造化例外やん?
424 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 16:07:23 ] >>423 分かっててもときどき変なことやっちゃうんだよね 特にC++とかJavaでね try〜catchはmainだけで充分なのかも知れない
425 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 16:35:20 ] >>423 すべての例外はどこかの階層で拾って、プログラムが適切に復旧するようにするのが理想。 別に、一関数ごとにtryで囲む必要はない。
426 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 18:13:59 ] in, body, outをはじめて使ってみたお^^ しかしenum/invariant structのような型で制限してしたほうが書くのは面倒だけど使えるお-_-;
427 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:35:06 ] >>426 でもoutとかで「戻り値にnullは絶対返さないよ!」とかassertしてあると使うのもコード読むのも安心するお^^ でも型だけで事足りるならちゃんと型設計してるってことだし偉いお^^
428 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 20:59:06 ] in/out/bodyってコード読むとき邪魔っぽくない?
429 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 21:05:16 ] ちょっとインデントに悩んだことはあった
430 名前:デフォルトの名無しさん [2007/10/25(木) 21:23:49 ] void hoge() in { assert(文); } body { // 処理 } みたいに書いたり・・・? in と out を関数内部に書きたかったりする・・・ void hoge() { in{ assert(文); } out{ assert(文); } } あ、でもこれなら普通の scope 文でいいのか・・・?
431 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 21:34:33 ] 公式の書き方は ttp://www.digitalmars.com/d/dbc.html 中括弧を改行しないでくっつける派の俺としてはちょっと冗長に見える。 けどまあこれくらい改行するのもぱっと見わかりやすいのかな。
432 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 22:58:35 ] 中かっこを開業しないでくっつける派の俺としても悩んだけど void func() in{ assert(...); } out{ assert(...) } body{ ... } って感じにして妥協してみてる… この辺もコーディング規則で一応の指標があるといいのだけど…(宗教戦争勃発しそうな気もするけど)
433 名前:431 mailto:sage [2007/10/25(木) 23:12:09 ] >>432 偉いなw 俺なんか void func() in { } out { } body { } さえ正直捨てきれない。
434 名前:デフォルトの名無しさん mailto:sage [2007/10/25(木) 23:18:23 ] 自分はオールマンスタイルが気に入ってる
435 名前:430 [2007/10/25(木) 23:41:01 ] 自分もオールマンスタイル派なんだけど、公式の書き方は見難いと 感じてしまう。慣れの問題なのかもだけど。
436 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:14:24 ] if (test) { ... } else { ... } これってやめたほうがいいのかな
437 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:33:44 ] begin rescue ensure end
438 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 01:42:40 ] オライリーのPL/SQL本だかどっかで void func(){ hoge(); } こうあるべきだと力説されて妙に同意してしまって以来、 どうしてもfunc()と"{"が同じ行にいられないと落ち着かなくて困る。 >>430 は俺にとっても抗えぬ誘惑だ・・・ 太古より語り継がれる伝説の「IDE」がいつか完成して普及すれば、 inとoutは普段は折り畳まれて「contractあるよー」的マークに収まり、 そこにマウスオーバーするとin/outのコードがポップアップで表示され・・・とか実装されるに違いない。 時を待つのじゃ・・・さすれば泣く日は来ぬ・・・
439 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 02:13:15 ] イデ・・・オン・・・
440 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 09:13:09 ] 定数を引数とする三角関数のコンパイル時計算をオフにしたいときがあるわけだが、どうしたもんかな ちょいと考えてみる
441 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 10:12:13 ] >440 なにゆえ?
442 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 12:07:22 ] >>436 俺もそのスタイルで書いてるよ。 ifブロックとelseブロックがきれいに分離してるのが気持ちいいよね。
443 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 15:26:54 ] >>441 コンパイル時に決定できるループでsinが山ほどあったときにコンパイルが遅くなっていたんですが、今見たら大丈夫になっていました。 勘違いかもしれませんが、再発して条件が再現できそうならまた報告します。
444 名前:デフォルトの名無しさん mailto:sage 是非職場で開くように [2007/10/26(金) 17:38:52 ] >>372 camelがどうのという話題で俺はこれを思い出す。 images.google.co.jp/images?hl=ja&lr=&oe=UTF-8&um=1&q=camel%20toe&ie=UTF-8&sa=N
445 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 17:44:36 ] グロ注意
446 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 19:33:15 ] >>442 IDEでコメントつける場合にずれるのが困りもの // ほげほげが見付からなかった場合はエラー else { put_error_log("hogehoge not found."); }
447 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:04:44 ] >>442 ですよね! つーかこの書き方どこで覚えたか忘れたんだけど。 あと、コメント書くとき if (test) { // ほげほげなら ... } ってなってるけどこれもやめたほうがいいかなwww 関数書くときは /// ほげほげする void func() { ... } こうなるからびみょうに統一されてなくね??とか思ってしまう
448 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:29:12 ] キミの好きにしたらええ
449 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:31:14 ] そこらへんのコーディング規則とか字下げスタイルなんかをk.inabaタンに定義してほしいw
450 名前:442 mailto:sage [2007/10/26(金) 23:42:52 ] ifのコメントは //ほげほげ if (test) { ... } //はげはげ else if(test2){ ... } //その他 else{ ... } ってしてる。 関数は ///ほげほげする void func() { ... }
451 名前:デフォルトの名無しさん mailto:sage [2007/10/26(金) 23:59:19 ] コメントは書かない
452 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:18:16 ] >>451 ちょwww
453 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:18:53 ] ソースがドキュメント
454 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:23:05 ] 俺は、関数の説明は書くけど、if文にはコメントつけないな。 大抵は条件式見れば何してるか分かるし、 ぱっとみて何を比較してるかわからないほど複雑になったら関数化する。 仕事なら仕方ないから規則通りにどんな馬鹿らしいコメントでも書くけど。
455 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:25:00 ] 極力コメントつけない方向で行ってみようと思う
456 名前:デフォルトの名無しさん [2007/10/27(土) 00:28:41 ] D2.006 フィールドのプロパティ.offsetofが class Foo { int x; } ... void test(Foo foo) { size_t o; o = Foo.x.offsetof; //error o = foo.x.offsetof; //ok } になってるけど、これって仕様が変わったの?
457 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:30:50 ] >>456 >>176-177
458 名前:デフォルトの名無しさん [2007/10/27(土) 00:33:26 ] >>457 バグっぽいのか。さんくす。
459 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 00:34:20 ] いつものことだが誰か報告したのか?
460 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:00:53 ] 最近D言語ってのを知ったんだが 今のとこ、これ!っていうIDEはないのかな? Poseidon?C::B?Descent?
461 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:22:29 ] 伝説のIDEはDが完成されたときに現れます
462 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:51:47 ] 今度からその台詞使おう・・・
463 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 01:56:25 ] Dの言語仕様は永遠にβ版です!
464 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:02:54 ] ウォルタンが開発やめるまでは永遠に進化し続けるよ! んでウォルタンが開発やめた後D言語の亜系が乱立することに… そして時代はbsDとreDhat系の戦いへ…
465 名前:デフォルトの名無しさん [2007/10/27(土) 02:40:12 ] D2.006 でコンパイルして cmeerw.org/prog/owtools/ ↑のwlinkでリンクすると以下のコードが Error: Access Violation で止まっちゃうんだけど、どして? void main() { for(int i=0 ; i<5000 ; i++) { int[] x = new int[100]; } } ちなみに、変数 x を毎回deleteしてやるといける。
466 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 02:40:17 ] ソースファイルごとにDのバージョンの印つけといて、そのバージョンから任意のバージョンへの変換を行うものってあったらよさそうだな! バージョンの印付いてるの前提だけど!
467 名前:176 mailto:sage [2007/10/27(土) 10:10:33 ] >>459 バグジラで検索したら2007年1月だったか2月に既にあがってたバグでした。 もう直す気無いと思われるw
468 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 12:54:43 ] >>467 そこのバグの修正は半年から一年後に 行われることがざらだそうです
469 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 16:07:33 ] >>465 それも前スレか前々スレかで見たな
470 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 19:09:31 ] >>461 IDEが発動するとき第6言語(D)は滅びるということか
471 名前:デフォルトの名無しさん mailto:sage [2007/10/27(土) 21:35:16 ] C++0xスレでperlのQuantum::Superpositionsみたいなのの実装を見つけて Dでも作ってみようかと思ったんだが、!= と == の区別ができない…
472 名前:465 [2007/10/28(日) 00:30:36 ] >>469 まじすか? その時は、だいたいどんな結論に落ちついたんすか? や、Viewerないもんで。。。ごめんねーいろんな人。
473 名前:デフォルトの名無しさん mailto:sage [2007/10/28(日) 01:04:06 ] >>471 テラ量子力学wwwwwwwww と思ったらマジでそういうライブラリなのか・・・ 量子コンピュータの広がりの影響なのかな・・・
474 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 13:24:46 ] バージョンうpまだー?
475 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 21:46:53 ] Eclipse3.2.1ダウソしてDescentパッケ入れても全然反映されねーや… なんでだろ
476 名前:デフォルトの名無しさん [2007/10/29(月) 21:49:53 ] dsssを使ってflectionedをインストールしてimportしたら、 コンパイルエラーが発生して、以下のようなメッセージが出力されました。 flectioned.d(104): module Vararg cannot read file 'tango\core\Vararg.d' 環境は、Windows / Cygwin / dmd.exe 1.022 + phobos で、 tangoはインストールしてないのに、 tango以下のファイルをimportしようとしてるみたいです。 static ifがtrueでもfalseでも両方のブロックの文法解析が行われてるのかな? とりあえず、flectioned.dの104〜131行と247行を コメントアウトしたらコンパイルできました。 あんまりうまい解決方法だと思えないので、 何か他にいい方法がないでしょうか?
477 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:09:13 ] Cygwin は使ってないけど、Windows + dmd1.022 + phobos で普通に動いてるけどねぇ。 Cygwin か dsss が何か悪さしてんじゃない?
478 名前:デフォルトの名無しさん [2007/10/29(月) 22:30:45 ] >>477 あ。たぶんdsssのような気がしてきました。 おそらくdsssは、 import文を見てコンパイルするファイルを特定していってるんだけど、 そのときにstatic ifをうまく解析できてないのかもしれません。 [わなD]に 「DSSSは、static ifで条件importしている依存関係の解析が 甘くて時々不便だったりするので…」 という記述があったので、これのことなのかも。
479 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 22:41:27 ] Derelict は dmd 2.0 だとビルドできないのか?
480 名前:デフォルトの名無しさん [2007/10/29(月) 22:52:37 ] >>479 dsss net install derelictsdl コンパイラをdmd 2.006にして上記のコマンドを実行したら、 たしかにコンパイルエラーが出ました。 include\d\derelict\util\loader.di(223): Error: cannot implicitly convert expression ("") of type invariant char[0u] to char[] たぶん文字列をキャストすりゃいいんだろうけど、 全部キャストするのはヤだなー。 www.dsource.org/forums/viewtopic.php?t=2903&sid=c9657f55c4f87d635f986ebfc3bb79bf 検索してみたら上記のリンク先でそれっぽい話題が交わされているようですが、 私は英語が読めないのでよくわからんかったです。
481 名前:デフォルトの名無しさん mailto:sage [2007/10/29(月) 23:04:18 ] k.inabaさんがdsssはstatic if内でのimportの解析が甘い的なこと書いてた気がする わなDかな
482 名前:デフォルトの名無しさん [2007/10/30(火) 00:45:01 ] dmd 2.0系での derelict のコンパイルとインストール、うまくいきました。 [わなD]D 2.x と D 1.x www.kmonos.net/alang/wnd/topics/d2-d1.ja.html 上記のページを参考にして、char[]をstringに、 dupをidupに修正してコンパイルしたらうまいくいきました。
483 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 01:43:53 ] おお わなD更新されてるじゃまいか どっかで更新されたかどうか告知あったりしないのかな RSS配信とか
484 名前:デフォルトの名無しさん [2007/10/30(火) 02:19:27 ] class Foo{} class Bar { private const( Foo ) mFoo; const( Foo ) getFoo() { return mFoo; } void setFoo( const( Foo ) iFoo ) { mFoo = iFoo; } } みたいなことをD言語2.xでしたいのですが、 Bar.setFoo()の中でコンパイルエラーが発生してしまいます。 たぶんメンバ変数Bar.mFooの定義方法がよくないと思うのですが、 どうするとよいでしょうか?
485 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 03:05:51 ] どうするんだろ うまくいかないや こんなんになりました class Foo{} class Bar { private const(Foo)* mFoo; const(Foo) getFoo() { return *mFoo; } void setFoo(const(Foo) iFoo) { mFoo = &iFoo; } } void main() { auto bar = new Bar; bar.setFoo(new Foo); const(Foo) foo = bar.getFoo(); }
486 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 03:42:21 ] const Foo mFoo; なら変数mFoo自体がconstだけど、 const(Foo) mFoo; なら変数mFoo自体は書き換え可能なはずだよね。 メンバ変数のときだけ動作が違う、ってんだからバグじゃね?
487 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 04:30:53 ] 俺もバグなんじゃないかと思う。 とりあえずaliasでごまかしてみるとうまくいくようです。 class Foo{} class Bar { alias const( Foo ) Foo_const; private Foo_const mFoo; Foo_const getFoo() { return mFoo; } void setFoo( Foo_const iFoo ) { mFoo = iFoo; } } // 意味のないエイリアス // この手のものは…どうなんですか、ウォルターたん…
488 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 05:49:36 ] aliasした場合、今度はconst消えちゃってね?
489 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:03:50 ] >>482 > 2007/10/30 :: RSSはじめました ました
490 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:04:56 ] 間違えた>>483
491 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:57:38 ] 助かります
492 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 14:25:54 ] わなDの"../表紙に戻る"って戻れないよね
493 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 14:59:37 ] >>488 ほんとだ。constがきえてるっぽい。これもバグなのかな。 まぁconst/invariant周りのバグは多すぎて報告する気にもならんけど。
494 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:06:32 ] v1からv2に乗り換えたら連想配列でキー引けないんだけど、なんか変わった?
495 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 17:11:50 ] >>494 エスパーしてみると、文字列リテラルの型がinvariant(char)[]になった。
496 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 17:58:36 ] int[char[]] foo = [ "hoge" : 1, "hage" : 2 ]; if(auto p = ("hoge" in foo)) writefln(*p); else writefln("ねーよ"); try { writefln(foo["hage"]); } catch(ArrayBoundsError) { writefln("ねーよ"); } v2でどー書くの?
497 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:13:36 ] // dmd 2.006 void main(){ int[string] foo = [ "hoge" : 1, "hage" : 2 ]; foreach(k; foo.keys) writeln(k, foo[k]); // Error: ArrayBoundsError } おそらくバグだな
498 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:16:44 ] void main(){ int[string] foo; foo["hoge"] = 1; foo["hage"] = 2; foreach(k; foo.keys) writeln(k, foo[k]); } こうすればいけるな。
499 名前:デフォルトの名無しさん [2007/10/30(火) 21:23:48 ] >>484 >>486 クラスのメンバ変数にconstオブジェクトを持たせると挙動がおかしいのは、 下記のページにあるバグ報告と同じっぽいですね。 d.puremagic.com/issues/show_bug.cgi?id=1376
500 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 23:06:21 ] 分かっちゃいるけど直ってない、という話なのね
501 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 03:07:11 ] D2不安すぎる
502 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 10:19:11 ] D2.0で作成したソフトウェア納品してしまった件wwww ソースじゃなく、バイナリだけだけど
503 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 10:34:24 ] >>502 おぉおおぉおおそろしいことを…! でもよくやった!
504 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 11:22:19 ] Makefileで依存関係しらべてビルドするより、 dmd.exeでどかっとコンパイルしたほうが速いんだね・・ >>502 ちょwww
505 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 13:49:37 ] >>501 Doctor2年でつか >>502 どこの会社だよそれwwwww せめて1.0にしろよwwwww 後で致命的なバグ見つかってもしらねーぞwwww
506 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:05:32 ] >>502 国内初の実用事例キタコレwwwww
507 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:22:55 ] ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。::::::::::::::::::::::::::::::::::::::::::::: :::::::::::::::::::::::::::::::::。::::::...... ... --─- :::::::::::::::::::: ..::::: . ..:::::::: :::::::::::::::::...... ....:::::::゜::::::::::.. (___ )(___ ) ::::。::::::::::::::::: ゜.:::::::::::: :. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..:::: :::: :::::::::.....:☆彡:::: //[|| 」 ||] ::::::::::゜:::::::::: ...:: ::::: :::::::::::::::::: . . . ..: :::: / ヘ | | ____,ヽ | | :::::::::::.... .... .. .:::::::::::::: ::::::...゜ . .::::::::: /ヽ ノ ヽ__/ ....... . .::::::::::::........ ..:::: :.... .... .. . く / _三502三∠⌒>:.... .... .. .:.... .... .. :.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ...... :.... . ∧∧ ∧∧ ∧∧ ∧∧ .... .... .. .:.... .... ..... .... .. . ... ..:( )ゝ ( )ゝ( )ゝ( )ゝ無茶しやがって… .......... .... i⌒ / i⌒ / i⌒ / i⌒ / .. ..... ................... .. . ... .. 三 | 三 | 三 | 三 | ... ............. ........... . ..... ... ∪ ∪ ∪ ∪ ∪ ∪ ∪ ∪ ............. ............. .. ........ ... 三三 三三 三三 三三 三三 三三 三三 三三
508 名前:502 mailto:sage [2007/10/31(水) 17:40:02 ] 反応が結構あったのにびびったw リアルタイム映像系で、DとDirectX10と絡めた。 やっぱりネックはGCだけど、評判が悪いがscopeとかつかうとわりと回避できるよ。 それでもメモリ使用のグラフををみると /|/|/|/|/| こんな感じでノコギリみたいになる。 そこ以外はサクサク開発できた。 まぁなんだ、D言語最高
509 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:05:54 ] >>502 乙 ところで ttp://hp.vector.co.jp/authors/VA031566/d_direct3d9/index.html が古くなってるからDirectX10周りを公開してくれたら助かる人がいるんじゃないかな 仕事で書いたコードだから無理かなと思うのであんまり期待せずに言っておくw 納品して利益が発生するものに使う機会はまだないが 社内向けのなら俺もD使ってる
510 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 18:51:09 ] D2とVistaって・・・ どんだけばk・・・いや、いい意味でなw乙w
511 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 19:00:32 ] >>508 確かに集合型とか一時オブジェクトを扱うとC++よりDが圧倒的に楽なんだよなあ。 DX10を絡めたのは尊敬する。俺はやろうとして挫折してます。
512 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 20:23:41 ] >>502 ノウハウうpしてくれると俺が鼻水100ccほど垂らしながらよろこびます
513 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 20:26:52 ] 俺も0xD2ccくらい垂らしながらよろこびます
514 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:01:36 ] >>508 本当に勇者だなお前は お前みたいな勇者のおかげで俺たち一般PGが最新技術に触れる日が早まる
515 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:03:15 ] DirectX 捨てて OpenGL にいった自分も少しよろこびます。
516 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:44:52 ] >>502 ==508の人気に嫉妬
517 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 22:14:53 ] 映像系で思い出したが、dSFMTをクラス化してインスタンスごとに独立した系列がいけるようにチョコチョコいじってるのだが、 SIMD部分をどうするかでかなり悩む
518 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 22:19:27 ] finallyよりもscope(exit)のがつかいやすい
519 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 23:12:07 ] しかしふとだいぶ前ーのスレで 「C++よりいい感じだぜー」って研究室でデータ計算だかに 使ってるって言う人も見たなぁ、という記憶が。 まぁ「納品」という言葉が出てくると俺ビビらずにはいられんけどw ところで興味本位でメインマシンを64bitなubuntuにしてみたら いろんな32bitライブラリがネーヨとリンカに言われ俺涙目。 dmdもamd64吐けるようにぷっりーずぅぅぅー。
520 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 23:32:21 ] >>519 sudo apt-get install lib32gcc1 してリンカフラグ弄ればいいとおも
521 名前:502 mailto:sage [2007/11/01(木) 07:05:47 ] DirectX10ヘッダーファイルをDにポーティングしていれば、一番みんなが使いやすいんだろうと思うんだけど C++でまずDirectX10をラップしてそれをDで使用するようにしました。 DirectX10.1とかでるし、dxgi.h、d3d10.h、d3dx10.hがころころ変わると思ったので。 以下スレチにならない程度にさわりを・・・ /* C++ */ class Device { public: _cptr<ID3D10Device> _cp; // _cpt<T>rはCOMをあつかうスマートポインタ }; class Swapchain { public: uint32 _width, _height; _cptr<IDXGISwapChain> _cp; int init( Device &dev, const DXGI_SWAP_CHAIN_DESC &ds); }; class Buffer { public: _cptr<ID3D10Buffer> _cp; }; とこんな風にまんま包み込んで、 Dに以下の様な関数をエキスポート Device * dx10g0_Device_new(); void dx10_Device_delete(Device *pthis); int dx10_Device_init(Device *pthis, void *pdevicesettings); int dx10_Device_DrawPrimitive(Device *pthis, uint type, uint n); int dx10_Device_DrawIndexedPrimitive(Device *pthis, uint type, uint indexcount); 中の関数はDirectX10APIより少々便利めにつくるようにしてます。 こうすることのメリットは、上でいったヘッダーファイルがかわっても(少しは)大丈夫なこと、 DirectX9に同様のものをつくることで、D側からはDirectX10、DirectX9が同じように扱えること。 Shader4.0をつかってしまったら、意味がないかもだけど・・・
522 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:14:21 ] >>520 情報有難う御座いまするー。 そうかー32bit系はそういうパッケージ名を与えられているのですね。 lib32gcc1は入ってました。中身の.soから、Winでいうインポートライブラリが生成できればいいんでしょか。 ともあれこれ以上は自力でごにょごにょとやってみます。
523 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:10:15 ] >>521 なるほど。 俺は、汚いヘッダファイルからではなく、比較的綺麗なIDLからDにポーティングしようとして挫折。 .diを吐くIDLコンパイラ欲しい、、、
524 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:26:30 ] 「無いならば 作ってしまおう プログラマ」 詠み人知らず
525 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:46:12 ] >>521 ありがとうございます。参考になります。 まあDから読みやすいようにするのがいい解ということですかねえ。
526 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 01:22:34 ] win32のBitBltがどこにあるかわかりませんか?v1.015@Phobosです。 リンカのLibにはあるっぽいんですけど、 export BOOL BitBlt(HDC,int,int,int,int,HDC,int,int,DWORD); しても認識しません。。。
527 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 01:33:18 ] extern(Windows)
528 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 01:35:31 ] すいません!出来ました。しょーもない質問で申し訳ない。 ありがと〜。
529 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 02:36:37 ] win32.windows 使わないの?
530 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 02:44:05 ] なるべく標準で済ませたかったんです。 はやく標準でとりこんでくれないかなぁ。。。
531 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 03:58:22 ] 意味無いけどあるある
532 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 07:48:20 ] チラ裏! 今丁度はまってた事。 クラスを宣言してC++と同じ要領で使おうとしたら、宣言自体は参照のためにアクセス違反の例外が飛んだ。ってか飛びまくった。 つまり、newしてなかった。あ〜、何事かとおもったわ。(TT
533 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:11:20 ] 構造体・クラスをみわけるために なんかプレフィックスつけてる?
534 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:14:08 ] いや、そういう習慣は持ってないね。 それがさ、うっかりスタックに確保されるもんだと勘違いしてたんだ。 C++だと基本的に自分でメモリ確保しないようにやってたから。。。
535 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:23:28 ] //C++ Class hoge; //D scope hoge = new Class;
536 名前:533 mailto:sage [2007/11/02(金) 08:26:58 ] いや、べつに532にきいたわけじゃないんだ。 みんなはどうしてるかなと思って。 俺は構造体にはSをつけて、クラスにはなんもなし。
537 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:30:01 ] ああ、結局newしないといけないんだなぁ。 なるほど、なるほど。 new恐怖症なもんでね。 だから、GC万歳ってかんじなんだけどね。
538 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:36:49 ] 乳は決して怖くない。勇気を持ってください。
539 名前:532 mailto:sage [2007/11/02(金) 08:41:34 ] >>536 俺は特にプレフィックスはつけない。何にでも。 でも、命名規則は割りと変数の使用イメージにそってつけてるかなぁ。 まぁ、しばらくすると、わすれちゃうんだけどね。。。XP >>538 勇者はD言語を手に入れた。LvUP!!new恐怖症が多少和らいだ。deleteを忘れた。 徹夜しちゃったからそろそろ寝るかなぁ。 今作ってるの、もうちょっとで完成するんだけどねぇ。あえて寝る! そんじゃまた〜。
540 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:44:07 ] そういえば`「わすれる」を覚える`って不思議な響きだよな・・・
541 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 08:48:51 ] (a, b) = (c, d);みたいなのが a = c; b = d; に変換されるようなやつってD言語にある?
542 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 10:36:20 ] >>541 無くは無い。tuple。
543 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:22:56 ] 関数からタプル返せるようになるのまだー?
544 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:34:29 ] それよりもタプルリテラル欲しい。
545 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 18:09:21 ] 質問です。 v1.015なんですけど、以下のコードが変なエラー吐いて止まっちゃうんです。 Error: non-constant expression new stack_t(true) これって、グローバル変数に直にnewすることってできないんですか? private import Stack;//自作のstack_t(T)。引数はboolのみ。 struct dummy{ int x,y; } alias stack_t!(dummy) stack; auto st =new stack; int main(char[][]){ static dummy d={10,20}; st.push(d); return 0; }
546 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 18:41:50 ] そういう場合は static this() を使う。 private import Stack;//自作のstack_t(T)。引数はboolのみ。 struct dummy{ int x,y; } alias stack_t!(dummy) stack; stack st; static this(){ st=new stack } int main(char[][]){ static dummy d={10,20}; st.push(d); return 0; }
547 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 19:03:56 ] あぁ、なるほど。 わかりました〜。レスありがとう。
548 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 19:51:37 ] static thisってクラス外でも使えたのか……知ってればもっときれいに書けたのあったなあ…… クラス内enumの仕様が悩ましい。 class Foo { enum FooEnum {} } enum GlobalEnum {} class BarA(T : FooEnum){} // NG class BarB(T : GlobalEnum){} // OK class BarC { // OK FooEnum t; } BarAが宣言したいのだがなんとしたものか。
549 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 19:56:02 ] >>548 class BarA(T : Foo.FooEnum){}
550 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 20:09:31 ] Foo.FooEnum t;
551 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 20:28:04 ] digitalmars.com 繋がる?
552 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 20:46:56 ] >>549-550 すんません間違えました……でも両方とも class Foo is forward referenced when looking for 'FooEnum' でコンパイルエラーとなるという。 シンボルの意味が定義される順番が A群 Foo, GlobalEnum, BarX(とテンプレート引数) ↓ B群 Fooの内部、BarCの内部…… というふうになっているからかな、とは思うのですが。
553 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 22:11:25 ] >>551 つながらない。
554 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 00:20:56 ] >>552 そこら辺、実装が微妙だよな。 内部関数も前方参照できないと使えないし。
555 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 09:15:56 ] What's New for D 2.007 Oct 31, 2007 New/Changed Features * Functors now supported by std.traits.ReturnType(). * Transitive const now leaves invariants intact in the tail. * Added overloadable unary * operation as opStar(). * Full closure support added. * Data items in static data segment >= 16 bytes in size are now paragraph aligned.
556 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 09:17:01 ] 貼ってから気づいたけれどフルクロージャーサポートかっ!
557 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 09:26:28 ] 2行目の意味誰かkwsk!
558 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 09:54:04 ] opStar・・・・・・これでboost::spiritが移植可能かも! いやあんまり要らん気がするが
559 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 09:59:50 ] writefに("日本語")としたらinvalid UTF-8 sequenceとでてコンパイルできないんですが どうしたらコンパイルできるんでしょうか。
560 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 10:08:29 ] ソース自体をUTF-8かUTF-16で保存してください。
561 名前:559 mailto:sage [2007/11/03(土) 10:23:38 ] >>560 UTF-16は選べなかったので、UTF-8で保存したらできました。ありがとうございます。 ただUTF-8なので??となりました。
562 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 10:27:12 ] 今更だがSharpDevelopいいな
563 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 11:15:20 ] >>561 今のところ、Windows上で出力内容を化けさせずに見たい場合は 1、テキストファイルに出力して確認 2、printfでUTF-16を使う のどちらかじゃないですかね。コンソールでCHCP 65001とかやる手もありますが、 これだとなんか表示がおかしくなる上にコンソールのサイズが強制的に変更されるので使いづらいです。 2の方法の場合、下のようにするとうまくいきます。 //↓こんな感じ import std.c.locale; void main() { setlocale(0,"jp.932"); printf("%.*ls\n","日本語"w); } ただこれ日本語版のWindows環境以外について全く考慮してないプログラムになるんで、 もう一工夫した方が良いと思います。単なるテストプログラムと割り切ってるなら そんなん考えないでも良いと思いますけど。
564 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 11:28:43 ] Internal error: ../ztc/cgcod.c 1031
565 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 12:14:15 ] * Full closure support added. とうとうきたのか!?
566 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 13:47:29 ] ヘルプのtemplateのサンプルの Curry をこんな感じで書き換えたらアブノーマルエラーで落ちるんだけれど、これ何処か間違ってます? windows2kでdmd 2.007なのだけれど・・・ R delegate(U) Curry(R, A, U...)(R delegate(A, U) dg, A arg) { return (U u) { return dg(arg, u); }; }
567 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 13:49:57 ] >>565 D\(^o^)/ハジマタ import std.stdio; uint delegate() counter() { uint i = 0; return {return ++i;}; } void main() { auto c = counter(); writeln(c()); // 1 writeln(c()); // 2 writeln(c()); // 3 }
568 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 13:53:57 ] >>566 構文的には間違ってないと思うから、 まだバグ餅と考えたほうがいいかもね。
569 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 13:56:50 ] >>565 ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=61016
570 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 14:02:32 ] これのGCってstop the world? それともなにがしかのコンカレントGC?
571 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 15:27:05 ] おークロージャキタ━(゚∀゚)━!!
572 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:24:31 ] これはハジマッテルなwwwwwwww やべえwwww
573 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:25:47 ] クロージャってどういうときつかうの? ネストした関数なら使うことあるけど。
574 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:25:56 ] いよいよ2.0に挑戦するときが来たか……。 といいつつもクロージャがサポートされるとなにが嬉しいのかよくわからない俺。
575 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:27:31 ] ごめん被ったw
576 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:32:50 ] wktk
577 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:35:25 ] DってなんかSchemeっぽくね?
578 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:38:52 ] >>577 pure関数の導入も予定してるし、関数型的に行く気まんまんという感じ。
579 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:43:24 ] クローじゃきたのかー D2はじまったな
580 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 16:59:14 ] クロージャの実装ご苦労じゃ。
581 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:04:34 ] 1.0 に組み込む気は無いのかなぁ。 発展途上というかバグだらけなうえに仕様が迷走してるだけに 2.0はまだ使う気にならんのだよな。
582 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:15:52 ] >548の問題が、自分の用途に関して一時的解決策ができた。 enum FooEnum {} class Foo { alias .FooEnum FooEnum; } class BarA(T : FooEnum){} // NG これで目的は果たせるけど、きっちりしておきたいところではある。
583 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:19:01 ] 1.0にくみこまれたら組み込まれたらで 仕様が迷走してるっていうんじゃね?
584 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:21:02 ] 1.0はもう変わっちゃだめだろ
585 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:27:31 ] >>557 このあたりと関係してるかも ttp://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=58483
586 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:28:08 ] >>578 pure関数入れるとどうなるんだろう >>581 ちょっと待てw 0.xのときは早く安定させてって言われてたから1.x系作って安定させたんだろうに ちゃんと進んでるぜよ
587 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:53:53 ] 1.x系は無難な過去の寄せ集め。 2.x系は未来への布石。 俺ってかっこいい!?
588 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:54:41 ] むしろ世紀末への布石
589 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 17:56:45 ] え?おわっちゃうの!?
590 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:32:00 ] Dが完成するときは、世界の終わりの日だということか。
591 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:33:06 ] >>589 90年先を見据えた言語ってことさ
592 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:35:53 ] じゃあ・・・配列演算と並列処理まだー?
593 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 18:57:13 ] pure関数が実装されると、コンパイル時に自動的に実行とかやってくれるのかな? それか、結果のキャッシュかな。 とりあえずたらい回しが速くなる?
594 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:03:06 ] >>591 おぉ!かっこいいね!!
595 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:11:53 ] >>580 >>580 >>580
596 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 19:54:14 ] あえてスルーしてたのに、、、
597 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:26:16 ] すでにコンパイル時関数実行ってあるよね
598 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 20:56:56 ] sin,cosがそうなってると、このスレだったかで見たような記憶がある。
599 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:13:05 ] sin,cosは組み込み関数でコンパイラがコンパイル時に定数に置換するだけ。 CTFEの一種であることに変わりはないが。
600 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:29:50 ] D言語SUGEEEEEEE
601 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 21:57:31 ] むきー!! modfをfmodの代わりだと思って使ってた間抜けがきましたよ。っと。 なんて紛らわしいんだ。
602 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:01:04 ] (^Д^)m9
603 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:07:24 ] >>602 右手が右側にwwww
604 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:12:54 ] これはきっと「カマーン」って言ってるんだな
605 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:21:52 ] 左側だろ
606 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:23:56 ] 腕の力こぶを見せ付けてるんだろう ぶよぶよ贅肉にも見えるが
607 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:24:56 ] >>605 本人から見ればそうだな。
608 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:27:12 ] 小指立ててるだけだろ。
609 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:33:02 ] 循環import(AがBをimport、BがAをimport)って許されてない? 普通にコンパイルするときは問題ないんだけど、 コードカバレッジ解析(-cov)を有効にするとエラー出る。 Error: circular initialization dependency with module A
610 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:45:15 ] www.kmonos.net/alang/d/module.html 静的コンストラクタの順序 import宣言の循環(モジュールがお互いをimportしあう、循環依存)は、 どちらか一方が静的構築の不要なモジュールであれば、問題ありません。 双方とも静的構築が必要であった場合は、 実行時例外が発生します。
611 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:52:37 ] -covつけると静的構築されるの?
612 名前:566 mailto:sage [2007/11/03(土) 22:54:28 ] >>568 thx! 無視して先に進みます
613 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:55:50 ] 静的構築が行われていないモジュール同士なんだけどなぁ〜 問題なく実行はできるし・・・
614 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 22:58:24 ] おそらく、カバレッジ解析用のコードが追加されてエラーになるんだろうな。 バグだろバグ
615 名前:610,613 mailto:sage [2007/11/03(土) 23:03:15 ] >>614 そう思う。バグだよねぇ〜。 それならそれでいいんだ・・・ D言語の思想に合ってないコーディングをしているのかと少々疑ってしまった。
616 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:03:48 ] -cov つけるとコンパイラがそれぞれのモジュール内に静的コンストラクタを挿入するって事?
617 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:04:56 ] かぶった、すまぬ
618 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:08:54 ] もし>>616 ならそうそう解決されないんじゃね? それに元々循環importは推奨されてないんじゃなかったっけ? どっかで見た気がしてて>>610 見るまで循環importやったらダメだと思ってたけど・・・ 記憶違いならスマソ どっちにしても循環しないようにしたらいいとおもた
619 名前:609,613,615 mailto:sage [2007/11/03(土) 23:19:02 ] >>615 610,613→609,613 間違えた。すまぬ。 >>618 >どっちにしても循環しないようにしたらいいとおもた えぇ。循環したいよぉー
620 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:27:37 ] 循環するほど密接してるんならもしかしたら一つのファイルにまとめるべきなのかもねえ
621 名前:609 mailto:sage [2007/11/03(土) 23:40:38 ] >>620 その通りですね。
622 名前:デフォルトの名無しさん mailto:sage [2007/11/03(土) 23:48:57 ] >>618 モジュールコンストラクタがある場合に循環依存できないって制約は、 初期化順序を一意に定めるためのものであって、 循環依存自体に何か問題があるわけじゃないと思う。 コンパイラが挿入するカバレッジ解析コードに モジュールごとの初期化順序が何らかの影響を及ぼすとは考えづらいから、 やはりバグだと思う。
623 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:09:52 ] class Hoge { int opProperty(string key, int val) { return 0; } } auto hoge = new Hoge; hoge.test = 22; // どうにかして => hoge.opProperty(test, 22); こんなキモいことできないかなー
624 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:11:58 ] 妄想乙
625 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:16:28 ] >>623 それってさ、opPropertyの中で、keyとvalに応じて分岐とかするの? それなら普通にメンバ関数の方がいいでしょ。 単にメンバ変数に値を設定するだけならテンプレートで増殖させるとかできるし。
626 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:18:40 ] >>623 opIndex(string key, int val)ってしてhoge["test"]=22で良くね?
627 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:19:38 ] ミスった。opIndexAssignね。
628 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:22:46 ] ーにかした ソースの外見をきにしてしまったアホだった/(^o^)\
629 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:24:03 ] 雪駄下駄を書くのが面倒くさいだけなら、わなDのサンプル template attr_reader(T, string name) { mixin( "private T _" ~ name ~ ";" ); mixin( " public T " ~ name ~ "(){ return _" ~ name ~ ";}" ); } class Point { mixin attr_reader!(int, "x"); mixin attr_reader!(int, "y"); this(int ix, int iy) { _x=ix; _y=iy; } } で十分。 でも、普通に書いた方がいいと思うぞ。
630 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:27:39 ] ドキュメント生成用のコメントつけられなくなるしなー。
631 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 00:39:49 ] きもさを追求するなら、opAutoload導入して欲しい。
632 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:48:16 ] 本からパクッた!あ。いや、参考にして、タートルグラフィック実装してみた。 アーカイブの中に結果画像入ってる。 これぞ、コンピュータグラフィックってかんじで面白いね。 windows専用です。 www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00004.zip.html
633 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 01:58:08 ] ゲッタとか雪駄とかって他のC系列では自分で生成できないからすげーあこがれてたんだぞ。 それをこんなむげに扱いよって。ぷんぷん。 え?ビーム??でないよそんなの。
634 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 02:10:27 ] ですよねー
635 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:02:59 ] プロパティの += とか -= とかなんで許可してないんかね。 array.length += 2; ってやったら array.length = array.length + 2; って変換してくれりゃ良いだけなのに。 演算子オーバーロードとの競合を防ぐため?
636 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:14:42 ] 将来的にはできるようになる予定とかどっか書いてなかったっけ。
637 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:31:27 ] D言語は糞だから期待しちゃだめ
638 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 04:52:39 ] ruby式だー
639 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 05:01:50 ] >>635-636 もう忘れてるんじゃないのw
640 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 06:49:24 ] をるたんももしかしたら 各自array.length = array.length + 2;ってかけばいいのに とかおもってたりは・・・ないか
641 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:09:39 ] をるたんも実はarray.length += 2;って書けたらいいなあ、とか思ってる。
642 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 11:27:39 ] でも現実的に割に合わない面倒なことだなあ、とも思ってる
643 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:39:51 ] そんなしょうもないもの実装してる暇があったらマクロ実装してやんよ! と思ってるに違いない。
644 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 12:44:59 ] ほんとだな?
645 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 16:16:42 ] くろーじゃー!
646 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 17:35:53 ] でも対称性の点から見てもあってもいい機能だよな常識的に考えててててて
647 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 19:14:06 ] D2 の構造体/クラスの配列で sort しても opCmp 呼ばれなくなってね?
648 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:12:35 ] どうも吐くアセンブラがバギーな感じ
649 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:31:11 ] D2おもしろんだけど、コンパイラがバグだらけで使い物にならんな…
650 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:41:14 ] ttp://www.sun-inet.or.jp/~yaneurao/dlang/Chapter-03.html#030400000000 このVSつかうデバッグできてる人いますか? VS2005でやってみたけど、どうもうまくいかないです
651 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 22:52:32 ] >>648 delegateまわりがとくに closure関係だろうな
652 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:21:18 ] void main(){ A!(int) a; a.f(); } struct A(T){ T t; A!(A!(int)) f(){ A!(A!(int)) a; return a; } } これってやっちゃいけないことなのかな。 エラーになる。 Aをコンテナとして、リストのリストと言う具合に、 入れ子にするのは良くあることだと思うのだけど。
653 名前:デフォルトの名無しさん mailto:sage [2007/11/04(日) 23:46:58 ] >>652 A!(A!(int)) をtypedefしたりなんやらしてたらDMDが無限ループに入っちまった。 怖い怖い
654 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:05:24 ] >>652 普通に無限ループしないか? テンプレートをインスタンス化すると、その内部のテンプレートがインスタンス化され、 さらにその内部のテンプレートがインスタンス化され、、、
655 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 00:09:45 ] >>647 2.003と2.007の動作は同じよう。変化なかったよ。 1.023と2.007の動作はぜんぜん違った・・・ 要素3つの配列をソートするだけの処理で・・・ 1.023は、配列初期化時にopCmpを20回、ソート時に3回呼び出してる。 2.007は、配列初期化時にopCmpを3回、ソート時には呼び出しなし。 2.007は降順で1.023は昇順という大きな違いが←既知事象?
656 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:11:38 ] gdcって1.020までしかないの? だめじゃん
657 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:35:23 ] あった・・・ なんで最新のやつをでかでかと表示したりしないんだろ
658 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:39:02 ] >>654 最終的にはintで止まるはずだから、無限ループはしなさそうだけど C++でやってみたら大丈夫だったし
659 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:06:12 ] え、Dって末尾再帰最適化してんの
660 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 02:46:11 ] なぜ突然「末尾再帰最適化」? 関係ないだろ
661 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 03:53:51 ] そういえばDって無限リスト書けんのかな
662 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 04:03:57 ] それっぽいものなら何とでもかけると思うが。
663 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 12:07:40 ] クロージャが来た記念ってことで、遅延リストを作って遊んでた俺。 でも、lines :: [char] -> [[char]]が書けなくてショボーン。 getContentsとか、zipWith使ってフィボナッチとかはできたお。
664 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 12:39:25 ] >>658 考えてみてもintで止まるということがよく分からんかった。 A!(int)はA!(A!(int))型戻り値の関数を持ち、 そのA!(A!(int))型はA!(A!(A!(int))))型戻り値の関数を持ち、… となるように思える。(intから始まって、止まらない) A!(int)の実体化中にA!(A!(int))を実体化しようとすると、 無限リストよろしく永遠に型の実体化が終了しないんじゃなかろうか。 で、A!(A!(int))の実体化のタイミングをA!(int)の定義後にしようと思って struct A(T){ T t; A!(TA) f(TA=A!(T))(){ A!(TA) a; return a; } } としてみたけど、それでもコンパイラ様は再帰展開だとおっしゃる。 で、小手先の変更として f(TA=A!(T))() を f(TA=typeof(this)) と変えてみたら dmdがsemantic3でオチタ\(^o^)/
665 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:19:30 ] くそー2.007おもしろそうなんだが、前のプログラムが動かん・・・ 今まで追い続けたんだけど、今回は2.006にもどすよ。。。 >>663 面白そうな雰囲気 まったくわからんおいらに説明おねがいします
666 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:41:58 ] >>664 よく見ようよ。 A!(A!(T))だと確かにとまらないけど、上のコードはA!(A!(int))。 どう見ても有限の展開しかしない。 単に動かないのはdmdのバグでしょ。
667 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:46:10 ] class List(T) { static List!(List!(T)) listOfList() { return null; } } alias List!(int) t;
668 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 13:59:06 ] >>666 なるほど、A!(A!(int)).fの戻り値型はA!(A!(int))そのものになるのね。
669 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:35:01 ] 単純にA!(A!(int))を展開しようとしたらまたA!(A!(int))が展開されて・・・という話ではないの?
670 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 15:55:09 ] 同じテンプレート引数では一回しか実体化されないはず。
671 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:11:39 ] あーそうだった 俺ショボスwww
672 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:47:13 ] 実装しだいでは、A!(A!(T))でも大丈夫だと思う。 なんせ、C++ではこれが正常に動くのだから。 C++でできることはDでもできてほしい。 using namespace std; template<class T> struct A{ T t; A<A<T>> f(){ A<A<T>> a; a.t.t = 2; return a; } }; int main(){ A<int> a; A<A<int>> b = a.f(); cout << b.t.t << endl; return 0; }
673 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 18:04:20 ] 久々にスレの勢いを見てみたら、 この板ではC/C++, Javaについで3番手だということに気づいた。 PerlやJavaScriptやPHPはここではない場所でやってそうだが、 それでもずいぶん上に来たものだ。
674 名前:663 mailto:sage [2007/11/05(月) 18:24:56 ] >>665 Haskellに標準搭載されてる遅延リストを、Dでどれだけ実現できるか、という試み。 実行コストが高いから実用性は無くて、お遊びでしかないけど。 ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00005.zip.html ここに上げたから、詳しくはこれを見てみて。 linesとgetContentsとzipWithは、Haskellにある関数。 linesが書けないのは>>652 がエラーになるせい。
675 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 18:31:51 ] >>673 ウォルたんから新ネタがどんどん届くからな 間違いなく勢いはある
676 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 18:47:32 ] クロージャが入ってからの勢いがものすごいだけで、普段はそんなにすごくないんじゃないかな。
677 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:01:11 ] C++インターフェースのときもすごかったよね。 >>773 をををっありがとうございます 拝見します
678 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:04:44 ] replace( D言語Part15[677], `>>773 `, `>>674 `); //ごめんなさい
679 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 19:21:49 ] ぬるぽ
680 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 20:04:12 ] 俺はマクロくるまで冬眠
681 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:04:15 ] そう言って冬眠したのはもう三人くらいいるようなw
682 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:10:47 ] 俺の理解度は置いといて!他の人のコード読むと楽しいな!! なんかね、久しぶりに心から「へぇ〜」っていっちゃった。 やっぱ、ネットはこうでないと。 そうそう、俺タートルとかやってた奴ね。
683 名前:682 mailto:sage [2007/11/05(月) 21:13:27 ] 混乱避けるつもりが紛らわしく。。。 俺-> >>682 だけね。
684 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:22:04 ] >>682 はもうちょっと落ち着いてもいいと思う やけに楽しそうだw
685 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:44:05 ] getenv("CONTENT-LENGTH").toInt() とかはちょっとニヤリとしてしまう
686 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:51:41 ] 俺は予想外にもクロージャ来たから冬眠からさめちまった
687 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:23:48 ] CGIっつーかAjaxっつーかweb開発用のフレームワークってありますか?
688 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 22:32:07 ] なんか、あったような気もするけど、古いかもなあ。
689 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:01:15 ] 自己を動的に派生クラスに書き換えるモデルを考えて、 以下のようなコードを組んでみたのですが、失敗しました。 そもそも自己を動的に派生クラスに書き直せるのかちょっと疑問になったのですが、 こういうことは可能なのでしょうか。 class Hoge { this() {} void rewrite() { this = new Huga; } } class Huga : Hoge {} void main(){ auto a = new Hoge; a.rewrite; writefln(a); // -> Hoge }
690 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:02:37 ] >>687 sakuraiさんがずっと前に作ってなかったっけ
691 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:12:28 ] >>689 変数aのアドレスなり参照なりがわからないと無理でしょ。 メモリのインスタンスが存在する部分を書き換えるわけにはいかないから、 変数aが指しているものを書き換えるしかない。
692 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:17:57 ] 仮想メソッドを直接書きかえ・・・いやなんでもないです
693 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:18:58 ] できてしまった import std.stdio; class A{ void change(ref A a){ a = new B; } } class B : A {} void main(){ auto x = new A; writefln(x); // a.A x.change(x); // a.B writefln(x); }
694 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:21:26 ] コメント書くところ間違えた あとインデント見やすく import std.stdio; class A{ void change(ref A a){ a = new B; } } class B : A {} void main(){ auto x = new A; writefln(x); // a.A x.change(x); writefln(x); // a.B }
695 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:26:15 ] this ってメソッド呼ばれる時にインスタンスのポインタを値渡しされたただの隠しパラメータだからな。 だから、this をいくら書き換えても呼び出し元の変数(ポインタの値)は変わらないまま。 this が元から lvalue にならなきゃ混乱しないのに。
696 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 23:31:15 ] >>692 求めているものは仮想メソッドの動的書き換えで、 かつオーバーロードできればいいなあという感じ(なのでデリゲート不可)で、 それが理想なんですが、さてどうしたものかと。 >>691 >695 なるほど。。少し分かってきました。 この辺を突破できるトリックをぼちぼち探してみます。
697 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:10:16 ] >>694 ひとまずこれベースで行ってみます。 ありがとうございました。
698 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:03:34 ] っステートパターン って言ってみる
699 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 01:37:40 ] D言語を使うからにはもっとトリッキーな手法をとるべきではなかろうか。
700 名前:デフォルトの名無しさん [2007/11/06(火) 01:57:34 ] D言語は糞
701 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:31:15 ] >>697 Has-a使ってやってみるのは? ttp://www9.uploader.jp/dl/sukiyaki/sukiyaki_uljp00006.zip.html なんでこの線路 .d がアップロードできんのん?
702 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 03:39:17 ] なんか8スレ目ぶりくらいにアンチを見た。
703 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 04:43:04 ] dupと[]って書き方以外になんか違うところあるの?
704 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 08:01:51 ] >>703 dupは複製される。[]はされない。 int[] x = [1,2,3]; int[] y = x[]; y[0]=999; writefln(x); // 999 2 3 (y=x.dupなら1 2 3)
705 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 08:35:14 ] クロージャがくると、coroutineがもうすぐできる という夢をみた
706 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:49:41 ] >>703 []は配列全体のスライス。 dupはミュータブルな複製。 したがって、型が違う場合がある。 static assert(is(typeof("foo") == invariant(char)[3])); static assert(is(typeof("foo"[]) == invariant(char)[])); static assert(is(typeof("foo".dup) == char[]));
707 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:57:39 ] ここまで試してみた結果のまとめ ・自己インスタンス書き換え 外部の自身を指すポインタのアドレスを渡す必要がある=複数あった場合は厄介 newでコンストラクタを呼び出すと厄介 ・delegateスイッチング+可変データアダプタ オーバーロードできない プロパティ風呼び出しができない ・Has-a オーバーヘッドはあるが、無視できることが多いかも ExchangerとInterfaceで2回定義を書くのがやや冗長 ・分岐 オーバーヘッドが大きい ・Factory 動的な変更が内部的には行えない 自身を指すポインタが複数あると厄介 自分の目的だとHas-aかデリゲートスイッチングの2択になりそうですが、 もう少し煮詰めてみて面白そうなら報告いたします。
708 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:37:02 ] アップローダのアップ形式は自分ではいじれないっぽい〜。 レンタルなんですけど、ちょっと不便だなぁ。 >>684 お察しのとおり、たのしくて! えぇーっと、多少自重します〜。
709 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 15:39:36 ] d monooki とかいうDのソースコードアップロードできる場所が あったけど、いま使えるっけ?
710 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 18:12:19 ] >>707 別のインスタンスにすり替えるんじゃなくて、インスタンス自体を書き換えてみた import std.gc, std.stdio; class A{ void change(){ // A to B if(B.sizeof > capacity(cast(void*)this)){ if(extend(cast(void*)this, B.sizeof-A.sizeof, B.sizeof-A.sizeof)){ throw new Exception("std.gc.extend failed"); } } size_t ptrsize = (void*).sizeof; with(B.classinfo){ (cast(byte*)this)[0..init.length] = init[0..init.length]; } } } class B:A{ void change(){ // B to A ...省略... } } void main(){ A a = new A; a.change(); writefln(a); //B a.change(); writefln(a); //A }
711 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:31:30 ] きんもー☆
712 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:43:00 ] 強烈過ぎて吹いたw ちょっと使える場面が限定されそうなので、しっかりメモしてそれにとどめておきます しかしgcがありながらこれができてしまうDの変態さには感心する
713 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:44:55 ] gcがあるからこそできるんじゃね?
714 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:46:58 ] version条件で、#ifndefとか#if !defined()とか#if defined() && defined() #elseに相当することってできましたっけ? なんとなくstatic ifに書き換えてますが、無駄を感じるもので。
715 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:51:29 ] どのへんが無駄?
716 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 23:56:53 ] static if以外にはversionとdebugくらいしかないと思う 他にあったっけ?
717 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 00:06:16 ] version(...){...}else{...}はできたような希ガス
718 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 00:47:35 ] #if defined(FOO) && !defined(BAR) ... #else ... #endif これが書きづらい。 static ifは定義済みでないと扱えないので、これをすっきり表現するには、 versionで定義されてるかどうかを真偽値とする定数を作って、……とやってるんだが、 このへんがどうにかならんもんかなあと。
719 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 00:59:10 ] #define FOO に変わるものがなあああいい
720 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:07:02 ] コマンドラインで指定するのをあきらめて、const使う案しか思い浮かばない const FOO = true; static if(FOO){ const HOGE = true; } else{ const HOGE = false; }
721 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:07:08 ] >>719 version=FOO;
722 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 01:44:30 ] >>548 について本家で聞いてみたら、 「バグだとは認識されてるけど、『直す手間の割に実がない』とウォルターが言ってた」 とのこと。 まあ回避できるし特にいいかなと。
723 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 02:07:56 ] >>718 mixin宣言で「hoge1&&!hoge2ならversion=hoge3」とかやろうとしてみたけど mixin宣言で生成したversion文より先に素のversion文が解決されてしまうっぽくて、 mixin("version = hoge3;"); version(hoge3){ int x = 5; } と書いても version hoge3 defined after use と言われてしまう。 mixinがversionの評価の前に通れば、もうちょっとましにはなりそう。 (そうなるよりは、version文が進化する方がありえそうな話だけど) version(foo)version(bar){ // foo && bar }else{ // foo && !bar }else version(bar){ // !foo && bar }else{ // !foo && !bar } これは書きづらい上に読みづらいな。 現状では、718の言う通りversion+static ifというのが一番マシなやりかただろね。
724 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 11:52:12 ] >>722 乙っす なるほど >『直す手間の割に実がない』 これがすべてだなw
725 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:46:29 ] しかしそんなんじゃいつまで経っても普及しない希ガス
726 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 12:51:30 ] そもそもウォルターには普及させる気がない気がしてる…
727 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 15:55:55 ] でもさりげなく次の更新に修正されてるという・・・
728 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:06:18 ] >>727 それはウォルターには普及させる気がないっていう不具合ですか
729 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 16:34:37 ] それは仕様です
730 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:15:04 ] ウォルタンのバグはいつ直るの?
731 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:24:46 ] >>494 void rebuild(E,T)(ref T[E] array) { T[E] result; foreach(i, k; array.keys) result[k] = array.values[i]; array = result; } テレビと同じで叩けば動くらしい。
732 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:24:56 ] をるたんはをるたんの唯一の実装にして仕様そのものなので、直すべきバグは存在しません。
733 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:08:44 ] flectioned の v2.007 対応のってない?
734 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:58:03 ] private 定義したクラスってどういう意味になるの?普通にC++でいうstaticかと思ったら違うみたいだし。 逆にC++でいうstatic(ファイル内スコープ)なクラスはどうやったらできる? ---- b.d ---- module b; private class B {} private void hoge() {} ---- a.d ---- module a; import b; void main() { B b = new B; // OK hoge(); // Error: function b.hoge is not accessible from a }
735 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:05:43 ] 仕様によればモジュールスコープのprivateは、 Cのstaticと同じ意味になるはず。 B b = new B; もエラーにならないといけないはず。
736 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:30:14 ] てことはバグかぁ。 サンクス。 まぁ、それほど困らないバグだしほっとくか・・・
737 名前:デフォルトの名無しさん [2007/11/07(水) 22:32:53 ] >>733 flectionedをD2.007でコンパイルを通して使ってみたけど、 ちゃんと動いてないっぽい。 main関数直下でArrayBoundsError例外を発生させたら、 スタック表示はされたけど、関数名がでない。 (std.array.ArrayBoundsError) ArrayBoundsError main(80) 0x0012FD34 0x004046B3 <?> 0x0012FD4C 0x00404651 <?> 0x0012FDC4 0x004236E2 <?> 0x0012FF30 0x004023BC int main(char[][]) 自前のクラスのメンバ関数でArrayBoundsError例外を発生させたら、 main関数が表示されてないし。 (std.asserterror.AssertError) AssertError Failure dbuffer.d(158) 0x0012FCDC 0x0040341F <?> 0x0012FCF4 0x004033BD <?> 0x00000043 0x0042244E <?> ていうか、さっき初めて使ったので、なんか使い方を間違ってるのかも。 とりあえず[わなD]を見ながら使ってみたよ。 www.kmonos.net/alang/wnd/topics/flectioned.ja.html flectionedがちゃんと使えるようになると便利いいんだけどな。 それにしても[わなD]はいつも助かるぜー。ありがたい。
738 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:55:02 ] >>737 うp
739 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 02:04:41 ] DDocについて、dittoの挙動が ///Params:x=aaa void func(int x){} ///ditto void func(double x){} ↓ void func (int x); void func (double x); Params: int x aaa ってかんじに、xの型がintってあたりが納得いかないんだが…と地味に思った。 この場合どうしたらいい感じに出力できるのかな? CandyDocとか使うと結構きれいに出てくれて素敵なんだけど…こういう細かいところがなぁ…
740 名前:733 mailto:sage [2007/11/08(木) 02:34:43 ] 自分でポートしてみた。 (std.array.ArrayBoundsError) ArrayBoundsError bug(25) 0xBFB35C74 0x08052158 extern(C) void _d_array_bounds(char[], uint) 0xBFB35C88 0x0804B389 void bug.__array 0xBFB35CA0 0x0804B2F6 void bug.foo() 0xBFB35CB8 0x0804B31E int main(char[][]) なんかちがうね?なんでだろ?>>737 当方 linux
741 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:08:56 ] >>739 それもきっと>>722 ってことなんだろうなぁ。 もう>>722 の金言は「D言語の哲学」として>>1 に張っとくといいんじゃね?
742 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 13:42:07 ] そんあこといわれたら全部>>722 って言われちゃいます><
743 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 14:11:54 ] size_t l; stream.read(l); array.length = l; これ地味に面倒じゃねwwww array.length = stream.read!(size_t); とかで簡単にかけたら便利そうだなあああああああ
744 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 15:40:26 ] 動的配列なのにわざわざ先にサイズ指定しなくてもと思うけど・・・。
745 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:40:24 ] 動的配列だから先にサイズを読み込むんじゃ…?
746 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:59:45 ] 別に配列関係ないだろ。
747 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:08:31 ] ラムダ式まだー
748 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:09:28 ] >>743 をるたんにその便利さを説けば入れてくれるんじゃね?
749 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:24:18 ] >>743 自分で関数書いたらよくね?
750 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:29:47 ] 配列以外にも拡張メソッド構文が採用されれば、できるな。
751 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:32:25 ] ブライト艦長としては、既にDの開発に使える人生のリソースを100%使っていて、 どこをイジるかってのは完全にリソースの振り分け、優先順位の問題なのだろうし、 もうしばらくは優先順位の極めて高いwktkなアイディアが常に溢れた状態だろうから、 よっぽどの相対的価値をアピールしない限り、振り向いてはくれないだろうね。
752 名前:デフォルトの名無しさん [2007/11/08(木) 21:31:57 ] >>738 コンパイルが通るだけで動作確認ができてないですけど、 もしどこかに簡単にアップできる先があればアップしますよ。 >>740 おー、ご自分でポートされたんですね。 ちゃんと動いてるっぽくていいなー。 [わなD]を見ると、私のほうでちゃんとでてないのは、 -gオプションで再コンパイルしたphobos使ってないからかも。 ちなみにうちは、WindowsXP / dmd2.0007 / phobos / dsss で稼動させてます。
753 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 21:54:20 ] 2.0007 ご、ごめん
754 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 22:57:23 ] ちなみに同じ問題で悩んだけど 1.x 系だと phobos コンパイル通らなかった・・・! phobos のコンパイル通すのですら、をるたんにとって優先順位低そうでイヤン
755 名前:デフォルトの名無しさん mailto:age [2007/11/09(金) 00:14:05 ] D言語製のブラウザとかないわけ
756 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:15:40 ] ないわけ >>753 気持ちわかるw
757 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 03:30:53 ] D言語製のブラウザとか必要もないよな・・・
758 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 03:44:52 ] 参考になるサンプルはある程度必要だろ
759 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:32:26 ] アプリのサンプルというよりゲームとかなら作られてるみたいだな。
760 名前:デフォルトの名無しさん [2007/11/09(金) 07:26:59 ] C/C++の遺産の再利用がまだしづらいのかな?
761 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 07:43:00 ] サンプルを作ってもちょっと経ったらコンパイルできなくなりそうな言語
762 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 09:33:56 ] そして、いつぞやの納品したやつ脂肪。。。w
763 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 18:19:13 ] CTFEや文字列mixinに対応したIDEまだ?
764 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 21:13:59 ] >>763 >>461
765 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:23:07 ] CTFEって何ぞ?
766 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:27:22 ] www.kmonos.net/alang/d/glossary.html#ctfe
767 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:31:11 ] どんも。mixinならまだしも CTFE に対応はかなり厳しくない?
768 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:21:44 ] もうコンパイラがIDEになっちまえばいいのではないだろうか。
769 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:00:31 ] tango の tango.text.String と tango.text.Text が機能的に一緒に見えるんだが、何なんだ、これ? ttp://www.dsource.org/projects/tango/docs/current/tango.text.String.html ttp://www.dsource.org/projects/tango/docs/current/tango.text.Text.html 名前変わったけどそのまんま残してあるとかそんなの?
770 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 01:03:54 ] String は非推奨になってるよ。 何でStringからTextにしたんだろ… StringはStringで別のものを提供するつもりなんだろうか… あとText.toUtf8()がおかしい。バグっぽい。Object.toUtf8()の「オーバーロード」関数になっちゃってるみたい…
771 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 06:25:53 ] そういや配列のプロパティ形式って配列でしかダメな理由あるのかな?
772 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 08:49:49 ] 配列にはメンバがないからルックアップが簡単になるためじゃなかろうか。 たしか、カンファレンスのスライドだったかで、配列以外にも拡張するようなことが書いてあったと思う。
773 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:04:59 ] そのうちメソッドが void func(Class c) { } auto c = new Class; c.func(); なんてことになるのかな
774 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:43:15 ] さすがにそれはどうかと思う
775 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 09:53:36 ] >>772 s3.amazonaws.com/dconf2007/WalterAndrei.pdf 9ページだな まさに>>773 のことが書いてある。
776 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:39:56 ] >>773 ので書いたらクラスに後からメソッドを追加出来るな
777 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:42:11 ] それじゃクラスいらないね 全部構造体でいいじゃん
778 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:44:04 ] 拡張メソッドはprivateメンバに触れないからカプセル化ができないじゃん
779 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 10:48:25 ] >>770 非推奨になってたのか。サンクス。 機能的にテキストエディタを意識しているように見えるから Text に名前変えたんかな。
780 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 11:25:42 ] お、Dにも来るのかそれ。 ……関数・メソッド・プロパティじゃそれぞれ相応しい名前が違ってくるから、 あんまり安直にごっちゃに出来て欲しくはないなぁ、というのは神経質というか今更かしらん。
781 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:20:32 ] 自分としてはモジュールのstatic import や別名つけてる時も大丈夫なようにして欲しいな。 import Conv = std.conv; "12345".Conv.to!(int); とか。使ってる関数がどのモジュールに属するのか簡単に分からないのは嫌いだし 呼び出してるのがメソッドなのか関数なのか区別つかないのは精神衛生上よろしくない。
782 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 12:27:45 ] それはまた気持ちが悪いな…
783 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:13:39 ] うへぇ、きめぇwwwwが褒め言葉のD言語ですが >>781 自分的にもそれはほしいけど、なんかわかりにくくなるね… …ここでスコープ解決演算子::の登場。 import Conv = std.conv; "12345".Conv::to!(int); とか。何でも.でアクセスするのはC++使ってた身としてはコード的に見にくくなる気がしている。
784 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:19:09 ] "12345".Conv :: to!(int); ↑ここで意味の切れ目がある感じがして好きじゃないなあ "12345".(Conv.to!(int)); とか。
785 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:22:09 ] "12345".[Conv.to!(int)]; 角括弧のほうが見やすそう。
786 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 13:40:50 ] "12345".to!(int)で良いよ。無駄な冗長性はいらん。 安全に書きたいときは普通の形式で書けば良いんだし。
787 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 15:14:34 ] 某スクリプト言語風にすると "12345".to#Conv!(int) または "12345".to!(int)#Conv こんな感じかな
788 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 16:55:10 ] Poseidonで ERROR >>> Wrong DMD Path!! とか出てコンパイルできないんだがどうすればいいんだ? DMDのパスを指定してるのにできない
789 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:00:58 ] >>786 無駄じゃないよ。 さっきも言ったように関数なのかメソッドなのか、関数ならどのモジュールの関数なのか ぱっと見て分かるのは非常に保守しやすい。 自分の作ったものを自分で見る分には効果は薄いかもしれんが他人のソースコードを 見る時は非常に助かる。 Hoge hoge = new Hoge; hoge.foo(); という記述があって、fooで何してるか見たい時に Hoge の定義見て、「あれ foo が無い」 となり、次は関数探すのにインポートしているモジュール見てそこから探し出すか、grep かけた結果から探す羽目になる。 hoge.Bar.foo(); って記述してありゃ、Bar モジュールの foo()関数を読んでいるってのがすぐ分かる。
790 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:04:56 ] >>788 dmd の1個上のフォルダ指すんじゃなかったっけ。 c:\dmd なら c:\ を指定する。
791 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:06:54 ] >>789 ヒント: class Hoge{class Bar{void foo(){}}}
792 名前:791 mailto:sage [2007/11/10(土) 17:07:34 ] ミスった。class Hoge{static class Bar{static void foo(){}}}ね。
793 名前:789 mailto:sage [2007/11/10(土) 17:10:30 ] >>791-792 Bar モジュールインポートしてなければすぐ分かる話だよね。
794 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:13:55 ] >>790 bin の1個上のフォルダ指すんじゃなかったっけ。 c:\dmd\bin なら c:\dmd を指定する。
795 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:26:33 ] >>790 ,794 ありがとう。おかげでIDE環境で初コンパイル出来たよ(つД`;)
796 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:27:13 ] >>793 まぁ、基本的にはそうだけど。 でも根本を無くすにはdmdがcallgraphを生成できるようになるのが一番だと思う。
797 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:34:26 ] 伝説のIDEが登場すればチップヘルプで教えてくれるよ。
798 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 17:56:28 ] >>796-797 そりゃ、理想なんだけどさ。そのときは無駄な冗長になっちゃうね。
799 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 18:09:46 ] hoge.Bar.foo(); このBarの部分が省略可能だったらいいのではないかと。 明示したいときは明示すればいいし。
800 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 21:20:07 ] Barがmoduleなのかaliasなのかclassなのかstructなのか関数なのかメソッドなのか プロパティなのかメンバ変数なのかが区別つかなくなって読みにくいコードになりそうだな。 …っておもったけどいざとなったらtypeofとかis式とか__traitsとかpragma(msg, ...)とか stringofとかですぐに見つけられそうだな。
801 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 05:52:35 ] >799のhoge.bar.foo()形式は、演算子の結合順序的にありえないだろうな。 >783のhoge.bar::foo()形式だと、mylib.barとかいうモジュール名とか考えると破綻する気が。 ありえるとしたら>784とか>785あたりのhoge.(bar.foo)()系じゃね? >799の任意省略方式だと、static importとかで完全修飾を強制することによる bar.foo(hoge)って記法に対して存在意義がないから、>800の言うような 混乱要素を無用に増やすだけになると思う。 >786で言われてることかな。
802 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 09:13:28 ] >>801 関数呼び出し式は今も IdentifierList '(' ParameterList ')' IdentifierList: identifier IdentifierList '.' identifier だから、結合順序的には問題ないよ。意味論のフェイズで正しく処理できるようにしてやるだけ。
803 名前:デフォルトの名無しさん [2007/11/11(日) 09:17:07 ] memo ttp://python.matrix.jp/apps/code_blocks.html
804 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 15:46:41 ] >>802 いやいや、お前が間違ってるよ。よく考え身。
805 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:05:22 ] >>804 間違ってるとかいうなら根拠しめそうぜ モジュール名は識別子じゃないとか間抜けなこと言う?
806 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:12:14 ] >>805 結合順を考えろ。間抜け。
807 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:14:03 ] ああ、マヌケにはもっと説明を加えないと分からないか。 abc.efg.hij() これを結合順に括弧でくくってみろ。 それが既存の文法と矛盾しないか考えろ。
808 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:31:40 ] '.'って、いつから演算子になったんだろう
809 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:34:12 ] 最初から
810 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 16:42:14 ] 演算子の結合順は実装依存。 結合順に依存するコードは誤り。
811 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:05:44 ] >>810 お前頭大丈夫か? そんなわけないだろ。 仕様で結合順は決まってるよ。
812 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:12:04 ] 釣り師おおすぎ
813 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:38:22 ] 土日だからな はぁ…月曜日が待ち遠しい…
814 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:41:22 ] 月曜はニートだらけ
815 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:41:24 ] とりあえず、「演算子の優先順位」でググって最初に出たサイト。 ttp://c-production.com/special/04092101.html これは、Cのものだけど、Dも基本的なものは同じだよ。
816 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:44:10 ] f17.aaa.livedoor.jp/~labamba/?%B1%E9%BB%BB%BB%D2%A4%CE%CD%A5%C0%E8%BD%E7%B0%CC
817 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:01:49 ] >>811 >>815 とりあえず、ここを読んでみようか www.digitalmars.com/d/expression.html Evaluation Order Unless otherwise specified, the implementation is free to evaluate the components of an expression in any order. It is an error to depend on order of evaluation when it is not specified. For example, the following are illegal: アホ多くてワロタ
818 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:09:25 ] どっちにしろ、abc.efg.hij()は左結合だから、 (abc.efg).hij()と解釈されることはあっても、 abc.(efg.hij)()と解釈されることは無いな
819 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:11:47 ] >>817 明らかにアホはお前。 評価順と結合順を勘違いしてる大バカ野郎。
820 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:17:15 ] Barモジュールにあるfooってことで hoge.foo@Bar() とかどうだろう。 これでFugaモジュールにfooがある場合も hoge.foo@Fuga() っていけるし。 けど重複していない場合は hoge.foo() と省略して書けるとか。
821 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:17:51 ] >>818 そうだけど、typeof(abc)からefgを探して、無ければグローバルから辿るでおk。
822 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:19:09 ] >>818 式(expression.module)がexpressionとmoduleをpackしたデータを返すことにして、 それに対して.memberを呼び出したときに、module.member(expression)と解釈される。 ただし、(expression.module)のデータ型はコンパイル時にのみ存在し、変数等に保持することは出来ない。 と定義すれば何の矛盾もなくね?
823 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:29:12 ] >>821-822 何でそんなに無意味に複雑にする必要がある。 というか、そんな風にしたら foo.Bar.hogeという式のBarが何なのかを探すのが困難すぎる。 モジュール名を記述させたい理由は >って記述してありゃ、Barモジュールのfoo()関数を読んでいるってのがすぐ分かる。 ってことじゃなかったのかよ。 まるっきり逆効果になることを言って何がしたいんだよ。
824 名前:821 mailto:sage [2007/11/11(日) 18:35:25 ] >>823 複雑じゃなくて実装的に自然だし。
825 名前:821 mailto:sage [2007/11/11(日) 18:36:40 ] でも無いか、勘違いスマソ。
826 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:38:31 ] >>824 一行目しか読めないのか? つーか、実装的にも自然じゃねーよ。。 aaa.bbb.ccc.ddd.eee() これがどういう探索をしないといけないのか、よく考えてみろ bbb.ccc.dddというモジュールがあったら? ccc.dddというモジュールがあったら?
827 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:41:20 ] 配列のプロパティ的構文で、 module util; int sum(int[] array) { ... } ... sum = a.sum; 関数が定義されてるモジュール名を書くようにするには、どうすればいいか、という話だったよね。 関数なら、util.func(array);で問題ないが、プロパティ的に呼び出すときには、 array.util.func; なのか、 array.uitl::func; なのか、とか云々。 一人、訳の分からない人がいて混乱してるけど、元々はこういう話だったということで。
828 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:46:24 ] 何も考えずに、 array.(module.func)でいいと思うんだけど。 これが気に入らない人の意見が聞きたい。
829 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 18:49:56 ] それ以上省略できたら無意味に分かりにくくなるだけだしな。
830 名前:802 mailto:sage [2007/11/11(日) 20:46:36 ] >>806 , >>807 , >>815 予想してた斜め上の回答がきててワロタ 構文解析とか意味解析とか知らないくせに左結合とか右結合とか 結合規則だけでコンパイラ語ってんじゃねぇ、ヴォケw 例えば、hoge モジュールの中に foo クラスがあって、bar っていうメソッドがあったとして、 hoge.foo.bar っていう字句列が何を意味するか分かる?
831 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:50:39 ] >>830 何にも分かってないのはお前だけー
832 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:53:06 ] やれやれ、結局煽るだけか。 まぁ、納得できないんじゃなく、理解できないんだからしょうがないが。
833 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:55:24 ] >>832 つーかさ、なんで>802クンは>830で突然戻ってきた風なくせに、 突然>830でキレ気味に「ヴォケ」とかあおってんの? そんなに悔しい出来ことがあったのですかー?
834 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:57:09 ] はいはい、ごめんねー
835 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 20:57:40 ] やれやれ、反論できずに非を認めて謝っちゃったか。最初からそうしとけばよかったのにな。
836 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 21:00:09 ] うん、そうだね^^
837 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 21:01:23 ] どうやらようやく理解できたようで。めでたしめでたし。
838 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 21:02:32 ] はい
839 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:11:43 ] わかったふりしたい時は 偉そうにクイズ出してごまかすに限るよな。
840 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:12:29 ] 上はじゃじゃ馬下はヘボ これなーんだ?
841 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:23:20 ] ちんこ
842 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:38:35 ] まあ>>833->>841 は俺の自演なんだけどねー
843 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 22:49:47 ] >>842 自演ってことにしたいの?そんなに悔しかったのかい?
844 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:26:43 ] >>843 オマエガナー
845 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:27:48 ] 無駄なレスで消費するなよな・・・ と言うとこのレスも無駄だろと言われるんだろうけど。
846 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:31:37 ] >>842-845 自演乙
847 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 23:31:48 ] 糞スレのいい再利用法だな
848 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:10:00 ] >>846 くやしいのうwwwくやしいのうwww
849 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:58:02 ] アイタタタタタ・・・ 今日は802は悔しくて眠れないだろうなこりゃ。
850 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:59:36 ] 悔しがることかどうかもわかってないから大丈夫
851 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 00:59:39 ] なんかスレのレベル下がったな
852 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:01:42 ] 俺のおかげだな。
853 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:44:38 ] >>848 自演乙
854 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 01:51:56 ] >>848 =849 いい加減にしたらどうだ? そこまでして勝ち誇りたいかね
855 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:04:02 ] まだうだうだやってたのか。 せっかく俺が>>834 を書き込んでやったというのに。
856 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:13:06 ] でもそんなの関係ねー
857 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:20:07 ] 本当に悔しくて眠れないって、うけるwwwwwwwwwwwwwww
858 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 02:21:06 ] いい加減に寝ろww
859 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 06:01:30 ] おはよう諸君。 最後に書き込んだやつが、悔しくて最後まで起きてた奴ってことでいいかね?
860 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 07:33:14 ] みんなみんな>>802
861 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 09:22:08 ] >>859 悔しくて、朝一番に書き込んじゃったお前が NO.1だよ。寝てないんじゃない?
862 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 10:27:38 ] 下らない流れで加速させてもなあ(´・ω・)
863 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 10:53:31 ] lazyって何につかってんのww
864 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 12:32:11 ] >>859 おはよう>>802
865 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 13:18:39 ] >>863 lazyとか、macroが導入されたら使い物にならなくなりそうな気がするな。 いまでもdelegateとか使えば表現できるし、使い道的にはぶっちゃけいらないんじゃね? 最適化のために使われたりするのかなぁ… >>864 もういい加減その話題引っ張るのやめようぜ。
866 名前:デフォルトの名無しさん mailto:sage 願わくは俺再帰で無限ループ [2007/11/12(月) 18:00:38 ] 引っ張れば引っ張るほどそいつの悔しさが露呈するという事実
867 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:21:08 ] >>866 やめようぜ、頼むよ。 再帰には終了条件を設定すべきだろ。
868 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:25:41 ] 終了条件はスタック溢れて例外飛ぶまででおk
869 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 18:56:51 ] 末尾最適化されて無限ループに
870 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 19:31:00 ] auto D言語_Part15 = std.thread.getThis; D言語_Part15.pause;
871 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 19:52:44 ] 何をどう書き込んだって俺の勝ちなんだから、 もう諦めようよw
872 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:13:26 ] じゃ俺も勝ちで
873 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 20:16:29 ] じゃあ俺は負けで
874 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 21:56:52 ] 何の祭かと思ってスレ開く前に公式すっ飛んでった俺涙目
875 名前:デフォルトの名無しさん mailto:sage [2007/11/12(月) 22:13:13 ] DSSS つかってみたんだけど dsss build でexeファイルができない・・・ 1>Creating imports for DD-Debug 1>Creating imports for DD-dsss_objs 1>Debug => DD-Debug 1>WARNING: Section Debug has no files. 1>dsss_objs => DD-dsss_objs 1>WARNING: Section dsss_objs has no files. ってでます。 dsss build main.d ってやればできるんだけど ルートディレクトリでコマンド一発ってのがdsssの機能をつかいたいです
876 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:40:31 ] dmd 2.007で void hoge(void delegate() func){ func(); } void main(){ hoge({goto End;}); End: return; } をコンパイルするとError: label End is undefinedってなるのと mainのreturn;をはずすと(ラベルの後がすぐ}だと)エラー出すのは仕様通り?
877 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:51:03 ] ラベルの後ろには文がないといけない。 End: ; ってしてみるといい。
878 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 00:58:46 ] >>876 gotoで飛べるのは同じ関数の中のラベルだけで、 関数から飛び出したり別の関数へ飛び込んだりは出来ないよ。
879 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 01:38:38 ] >>874 (´;ω;`)ぶわっ
880 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 05:34:50 ] 継・・・続・・・?
881 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 17:50:38 ] 継続はいらね
882 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 22:03:08 ] あのさ、1系列はもういらない子なの?
883 名前:デフォルトの名無しさん mailto:sage [2007/11/13(火) 23:32:21 ] まぁ、一度もまともに固まったことのない言語に安定版の3文字など存在しないから、 1.xは実質的には、単なる「試行錯誤の跡地」であり、要らない子かもしれないな。 そこに何かを求めるのは、ついうっかりDの安定性に賭けて何か作っちゃった人くらいだな。
884 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:13:01 ] 今ふと気づいたんだけど、-v1オプションていつからか消えてる?
885 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:13:12 ] >>883 ヒドスwwwww でもそんな感じだな・・・ 2.0もそうなるんだろうな・・・
886 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:19:54 ] >>884 2.xには最初からなかったと思うけど 1.xにもなくなっているのかな
887 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:22:54 ] C♯も3.0出るしな
888 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 00:26:53 ] >>884 2.001から
889 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:48:23 ] unrecognized switch '-debuglib=tango-base-dmd.lib' Tango入れたらこんなん出てきたんですが、 これはどっか設定変えないと駄目なんでしょうか。
890 名前:デフォルトの名無しさん mailto:sage [2007/11/14(水) 23:52:02 ] DMDが古いんじゃね?
891 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 00:41:19 ] 入れてる dmd が古くて -debuglib オプションを持ってないんだろう
892 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 00:52:35 ] omg そうだったんすか。 ありがとうございました。
893 名前:デフォルトの名無しさん [2007/11/15(木) 02:07:06 ] 既出してたらゴメ。dmd2.007(win)で import std.stdio; void main() { auto A = new Object(); auto B = A; delete A; delete B; writefln("end of process"); } を実行すると、end of processは表示されるけど、 プロセスが終了しないんだが、 1.そういうことしちゃだめ。 2.今、gcがもっすごがんばってるからもうちょい待て。 3.delete式なんてただの飾りですよ。エロい人にはそれが分からんのです。 4.バグだけど直すほどの価値がない。 どれ?
894 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 02:15:54 ] テキトーなクラスつくってデストラクタにwritelnでも入れとけば確認できるんじゃないでしょうか。
895 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 02:19:45 ] ていうかよく見たら参照元がdeleteされたあとさらにdeleteしてるんすか。 これはやっちゃだめでしょう。
896 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 04:25:33 ] 気になって眠れないので調べたら、 「ポインタ、動的配列、参照変数は、 delete のあと null にセットされます。」 と言う一文が。 しかしこの場合nullがセットされるのは参照変数としてのA自体で、 Aの実体を参照してた参照変数のBはそのまんま(つまりゴミ参照してる)じゃないでしょうか。 なのでやっぱり複数の参照変数で参照されてる大元消したあとにdeleteするのはまずいかも。
897 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 09:24:20 ] >>893 www.kmonos.net/alang/d/expression.html#DeleteExpression > それ以外の場合はガベージコレクタが呼び出され、 > インスタンスに割り当てたメモリは直ちに解放されます。 とあるから、 delete A; でBが無効な参照になるのは確実だと思う。 ただ、解放済み(だけどもともとGCで確保した)領域への参照に対する deleteについては仕様に言及がないと思うので、これは実装依存だと思う。 (つまり、実装によっては未定義動作となる可能性もあるということ) 実装依存となると、実装がどうなってるか分からない(今回の場合)なら やっちゃ駄目な操作(選択肢の1)になるかな。
898 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:19:41 ] ソースのどこで例外出してるか調べる方法ってありませんか? dfl使ってツリービューとかにドラッグオーバーを何度か繰り返すと 例外吐くんですが、それがどこなのかわかりません。
899 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 15:59:14 ] flectionedってそういうことできたっけ?
900 名前:893 [2007/11/15(木) 16:09:45 ] >>894-897 あ、やっぱそっか。さんくす。 どうも4から疑ってしまう自分がいて、反省。 でも、例外とか吐いてくれるような仕様にならんかなあ。
901 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 17:18:37 ] >>899 あれはTangoが無いと動かないみたいで。 dflとTangoの組み合わせは自分でやった限りでは出来なかったので。
902 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 20:52:50 ] ddbg ttp://ddbg.mainia.de/
903 名前:デフォルトの名無しさん [2007/11/15(木) 21:26:28 ] 突然でアレなんだけどさ、これ module a; private import std.stdio; module b; import a; void main() { std.stdio.writefln("hello"); } >dmd b.d a.d が通るって初めて知ったんだけど、キモくね?
904 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:32:41 ] きもいね
905 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:34:31 ] きもいけどどういう挙動が正しいのか仕様にはっきりと書いてないね。
906 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:43:37 ] www.kmonos.net/alang/d/module.html >デフォルトでは、import は private です。 >これは例えば モジュール A がモジュール B を、 >モジュール B はモジュール C をimportしていた場合、 >Cの名前はAでは探索されないということです。 >ただし、 import を特別に public と宣言すると、 >その import が取り込むモジュール内の全ての名前が、 >現在のモジュールを外からimportするモジュールにも見えるようになります。 未定義になるべきなのでは もしかして実はデフォルトがpublicなのかなーとか思って明示的にprivate import aにしてみたがやっぱり通るね。
907 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 23:09:59 ] バグじゃない?
908 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:00:36 ] >>903 それ、モジュールAとimport a;が無くても通るんだよね。 だから、仕様だと思ってた。 フル修飾だとimport不要、みたいな。
909 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 00:01:33 ] それだとstatic importの立場がなくなるがな
910 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 07:49:58 ] 8ビットのビットマップクラスをつくてるんだが、streamのFileをオープンした瞬間にアクセス違反で落ちる。 Windowsなんだけど、なんでかな〜。いまのとこ、無いファイルを作ろうとしてるんだけど。 コンソールに違反だよ〜ってでるからAPI内部の犯行ではないはずなんだけど。 あ、コンパイラのバージョンは1.015です。 bool Save(char[] name, bool IsIgnor = false){ BitmapFileHeader bmh; bmh.bfType = 0x4d42;// 'B'<<8 + 'M'; if(exists(name) == true){ if(IsIgnor == false) return false; } static if(IsDebug) writefln("file:",name); File fo; fo.open(name,FileMode.OutNew); /* if(fo.isOpen == false) return false; fo.writeBlock(cast(void*)&bmh,bmh.sizeof); fo.writeBlock(cast(void*)&bih_,bih_.sizeof); fo.writeBlock(cast(void*)Palette_,uint.sizeof*Palette_.length); fo.writeBlock(cast(void*)Pixel_,ubyte.sizeof*Pixel_.length); */ fo.close();
911 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 08:22:13 ] newせいよ
912 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 08:55:43 ] >>911 ぐあ。はずかし!またやってしまった!! くそー。癖って抜けないね。 なんにせよ、レスありがとう!!!!
913 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 18:16:10 ] aliasじゃインターフェイスを実装したものとみなされないのか…
914 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 18:53:24 ] Tangobos→Phango
915 名前:デフォルトの名無しさん [2007/11/16(金) 19:05:07 ] Phagos
916 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:15:53 ] Photangobos
917 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:21:30 ] デバッグってvs2005でもいけるんでしょうか。 vs6だとうまく行くんだけど、vs2005だと作業フォルダ指定しても ブレークポイントに反応してくれない。
918 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:21:37 ] pthaonbgoos.
919 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 21:46:48 ] phandango
920 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 22:20:40 ] Tanpo
921 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:16:22 ] Chi...
922 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:32:45 ] >>889 >unrecognized switch '-debuglib=tango-base-dmd.lib' 自分もその現象が発生しました。Tango 0.99.3になってそのスイッチを使い始めたみたいです。 調査の結果、rebuildが-debuglibに対応できていないのが原因のようで、dsss最新版のrebuildを使ってみてもだめみたいです… というわけで、dsssやrebuildを用いないでコンパイルするとうまくいくことがわかりました。 レスポンスファイルを作ってやるか、makeを活用するとよいかと思います。 というわけでそれを踏まえてDFL 0.96.01を使ってみたのだけど、いくつかはまったので使いたい方は以下を参考するとよいかと思います。 import\dfl\makelib.bat(23)にinternal/_stdcwindows.dを追加 import\dfl\makelib.bat(25)に_stdcwindows.objを追加 import\dfl\makelib.bat(34)の-v1を削除 でgo.batを実行してライブラリをビルドすることで解決したので参考までに載せておきます。
923 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:39:00 ] >>917 ああそういうことだったのかな 前はソースレベルデバッグできてたのにいつの間にかできなくなったと思っていたら
924 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 23:45:01 ] どなたかDflでドラッグドロップ系の処理が出来ている方っていますか? いたらバージョンを教えてほしいのでスが。
925 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:39:57 ] class A{ static void opBrace(void delegate() v){v();} } A{printf("brace");} みたいなのが欲しい。
926 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:44:01 ] q{} 文字列リテラルを追加しちゃったから、望み薄だな。
927 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:48:39 ] >>926 あれは、{code();}.stringof とかの方がよかったと思うのにな。。
928 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:48:48 ] tanpopo tanbo botan popotan bosan
929 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:53:37 ] >>926 a(b)があるけど、opCallもあるから大丈夫だ。
930 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 01:55:55 ] >>929 いや、そういうことじゃなくて…
931 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 02:12:34 ] q{}を無くせばおk
932 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 02:20:01 ] どういうことだ? printf(q{A{"huga\n"}});は通る
933 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 02:43:14 ] >>924 ドラッグドロップ系使う時は Application.run(...) を呼び出す前に Application.autoCollect = false; として、 頻繁にGCが走らないようにすると、とりあえず落ちるのは回避できるみたい。 必要な領域までGCに解放されてしまってるのかも…
934 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 02:55:40 ] 直りました! 助かりましたありがとうございました。
935 名前:デフォルトの名無しさん [2007/11/17(土) 03:21:23 ] mixin(q{aaaaaaaaaaaaaaa}); //error!
936 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 07:50:54 ] phungus
937 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 08:15:23 ] matango simeji enoki shitake
938 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 10:27:00 ] ttp://www.dsource.org/projects/tango/wiki/0_99_3_release ・DMD builds no longer generate libphobos.a/phobos.lib, but instead utilize the -defaultlib switch. This enables phobos to install side-by-side with Tango ・Also note that there is an experimental D2.0 branch in our repositories now.
939 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 11:22:11 ] ttp://www.dsource.org/projects/tango/browser/branches/experimental/D2.0
940 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 11:35:17 ] >>932 頭悪いのな。お前。
941 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:08:26 ] よく言われる
942 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 12:14:43 ] よく言われる932 よく言い、よく陰で思われる940
943 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 13:23:45 ] よく言われる932 よく言い、よく陰で思われる940 よく言い、よく影で思われ、それに気づかない942
944 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:17:02 ] class q{ static string opBrace(void delegate() d){return d.stringof;} } class q{ static string opBrace(string s){return s;} } とかできれば、q{}はいらないと
945 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 14:58:13 ] そもそもqは何のためにあるの
946 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 15:01:26 ] mixin(q{ some_valid_code_here; });
947 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:09:11 ] >>946 ありがとう えーとじゃあ↓じゃなくて mixin("some_valid_code_here;"); そうしたい場合ってのはどんなとき?
948 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:39:11 ] 文字列と整数を合体させたい場合ってどうやるんでしょうか
949 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:43:54 ] >>947 mixin(q{ this is not valid tokens; }); // error mixin(q{ this_is_valid(); }); ってことじゃね。
950 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:49:33 ] >>948 std.conv.to!(string)
951 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 17:59:29 ] mixin(" this is not valid tokens; "); でもエラー出ね? 出るエラーが違うのかな
952 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 18:12:02 ] >>951 変数に格納したりするなら、エラーの出る場所が違うな。
953 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 18:26:50 ] みんな分かってるみたいなのに q{}の意義が全然わからなくて俺涙目 >>949 それをどういうときに使うのかと
954 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 18:48:38 ] mixin て何か分かってんのかね、おまいは。
955 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:00:36 ] わかりやすく説明すると、トークン文字列 q { ... }の内部の文字列は、Dのトークンであるので、 Dの字句解析をパスしなければならない。 つまり、文字列が、Dのソースとして解釈可能であるかどうかを判別できる。
956 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:01:46 ] q{}なんてあったの初めて知った。 コードを文字列として渡すときに、ダブルクォートの中にコードを書くなんていう、 エディタ支援が受けられない(どころかむしろ邪魔になる)苦行に挑まんで済むわけね。
957 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:04:00 ] え?そうなの? 俺は、変態なことやってる場所を簡単に検索できるためだと思ってた。
958 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 19:50:02 ] import std.stdio; void main() { const a1 = "\"hoge\""; mixin("string c1=mixin(\"mixin(\\\"\\\\\\\"huga\\\\\\\"\\\")~\\\"hoge\\\"\") ~ mixin(a1);"); writeln(c1); const a2 = q{q{hoge}}; mixin(q{string c2=mixin(q{mixin(q{q{huga}})~q{hoge}}) ~ mixin(a2);}); writeln(c2); } どっちがいいかとか
959 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:19:35 ] import std.stdio; void main() { const C = q{ mixin(A) + mixin(B) }; const A = q{ a }; const B = q{ b }; int a = 10; int b = 20; writeln( mixin(C) ); } こんなことできたりとか
960 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:39:42 ] なんという遅延評価…
961 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:49:09 ] import std.stdio; void main() { const s = q{mixin(s)}; writefln(mixin(s)); }
962 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 20:59:16 ] q{}はmixin用ってことでおk?
963 名前:デフォルトの名無しさん mailto:sage [2007/11/17(土) 21:00:15 ] import std.stdio; alias string symbol; template add(symbol o, symbol v) { const add = `mixin( q{`~o~`} ) + mixin( q{`~v~`} )`; } void main() { const c = add!(q{a},q{b}); int a = 10; int b = 20; writeln(mixin(c)); a = 100; b = 200; writeln(mixin(c)); }
964 名前:953 mailto:sage [2007/11/17(土) 22:21:54 ] >>954 mixinは大丈夫 他のレスは後で試してみます なんか分かりそう ありがとん
965 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 03:48:38 ] べつに構文はvalidじゃなくとも字句だけDの範疇ならOKだよね? q{int int class class invalid;}とかやっても大丈夫だし。
966 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 04:33:28 ] 実行時mixinないかなー
967 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 04:39:23 ] opStarAssignマダー
968 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 07:46:51 ] 亀ですまんけどちょっと質問>>542 どうやって? int a,b,c; Tuple!(a, b, c) = Tuple!(10, 20, 30);とかって無理じゃね?
969 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:04:33 ] >>968 template Tuple(T...) { alias T Tuple; }
970 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 09:07:40 ] もしかしてDMD古いとできない?
971 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 11:12:39 ] >>970 1.023/2.006 でバグフィックスされてできるようになったのでそれより古いとダメ
972 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 13:26:30 ] obj[index] = value; はopAssignでオーバーロードできるけど、 obj[index] += value; みたいな複合代入をオーバーロードする方法ってある?
973 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 13:36:38 ] opAddAssign
974 名前:デフォルトの名無しさん [2007/11/18(日) 13:39:55 ] あ、配列か。 opIndexでオブジェクトを返すとか ()がいるけど
975 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:22:19 ] >>971 1.020使ってたよ・・・(´・ω・`) バージョンうpしたいけどgdcがなあ・・・
976 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 14:39:31 ] opIndexOpAssign opStarAssign opStarOpAssign このあたり追加して欲しい
977 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:00:41 ] Opってなんだ?
978 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:27:53 ] AddとかDivとか
979 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 15:29:19 ] opSliceOpAssign opCallAssign opCallOpAssign もお願いします!
980 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:26:29 ] obj(arg) = val; …さすがに要らんと思う。
981 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:27:55 ] obj(arg) += val; きんもーwww
982 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:34:26 ] perlだと関数呼び出しがlvalueになれるよな。 まあ、下駄雪駄を合わせたプロパティ的用途か、スライスへの代入の用途が主だから、 Dなら別の機能で間に合ってるけど。
983 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 16:51:25 ] opCallで内部クラスでも返せばよくねwwwww
984 名前:デフォルトの名無しさん mailto:sage [2007/11/18(日) 23:02:43 ] どうぞ。 D言語 Part16 pc11.2ch.net/test/read.cgi/tech/1195394435/
985 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 08:06:43 ] あとすこしで落ちるからたわ言など。 公式で、ユーザライブラリコンテストとかやらないかねぇ。 一回総集編を作ってほしい。 現状、フレームワークは決定打ないし、グラフィックライブラリはないし、サウンドライブラリも無い。 でもなぜかZIPはあるし、細かいスパイスのきいたライブラリがそろってるのもまー事実。 Tangobosの問題もあるし、V2系のラストで是非やってほしいと結構おもてる。 問題はいつV2系が安定するかだなぁ。。。
986 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 08:23:40 ] あと15レス分は何に使うかな。
987 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 08:31:00 ] Truetypeフォントを動的ロードできて、さらに描画できたら、結構汎用性あがるかなぁ。 ファイルフォーマットの内容しらないし、ライセンスがどうなってるかは知らないけど。 プログラムの場合ってラスタフォントのほうが相性いいのかなぁ。
988 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 08:41:07 ] インターフェースの設計っていい叩き台ないもんですかね。 現状、Bitmapのインターフェースの設計をてきとーにやってるんですけど、 うまく全部(1〜32びっと)に当てはまるインターフェースが良くわからないです。 総合あーかいばプロジェクトは割りとその辺の設計が良かったから普及したようなもんだし。 なんか、いい手はないもんかなぁ。
989 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 09:04:06 ] 規制に引っかかったので自重
990 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 13:47:25 ] >>982 perlのlvalueってあれ単に参照返してるだけに見える俺は異常?
991 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 16:26:04 ] 中間言語導入による部分的な動的コンパイルの実現!
992 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 16:41:26 ] 中間言語いらんからコンパイラを標準ライブラリに(ry
993 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 16:47:31 ] >>988 よくわからんが、 void[]でビットイメージを保持しておいて、 インデクサを用いて適切に変換するようにすればいいんじゃなかろうか。
994 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:04:36 ] >>988 >707だけど同じ目的なので設計を話し合ってみませんか? 私はピクセルに触る部分だけ専用の関数を作って、これをピクセルフォーマットごとに変えるようにし、 それ以外の塗りとかその他は必ずその関数経由で触るように設計しました。 あとで自分がやった内容についてファイルをうpしてみます。
995 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 17:23:34 ] >>990 参照返してるだけだな。 ただの構文糖
996 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 18:17:27 ] 俺の欲しいもの: * プロパティに対する複合代入 * ラムダ式 をるたん、クリスマスプレゼントまってます。
997 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 18:33:38 ] それまで>996はいい子にしてないとな
998 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:28:25 ] D言語 Part16 pc11.2ch.net/test/read.cgi/tech/1195394435/l50
999 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:30:25 ] 次スレ D言語 Part16 pc11.2ch.net/test/read.cgi/tech/1195394435/l50
1000 名前:デフォルトの名無しさん mailto:sage [2007/11/19(月) 20:30:45 ] 1000
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。