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/
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さんが実用化しているので、何が変わっているのかさっぱりです。 これを取り除くとやはり発生しなくなります。