07/12/01 17:25:31
>>157
たぶん、こうだと思うよ。
const(int*) p = &a; //p「int*」が書き換え禁止
int x = *p; //○
*p = 10; //○
p++; //×
const(int)* p = &a; //pの指し示す先の「int」が書き換え禁止
int x = *p; //○
*p = 10; //×
p++; //○
final const int* p = &a; //p「int*」書き換え禁止、かつpは初期化後は固定。(冗長?)
int x = *p; //○
*p = 10; //○
p++; //×
final const(int)* p = &a; //pの指し示す先の「int」が書き換え禁止、かつpは初期化後は固定。
int x = *p; //○
*p = 10; //×
p++; //×
160:デフォルトの名無しさん
07/12/01 17:47:53
>>159 なるほど
ところでいちいち.dupするの面倒なので
mutable to immutable(const/invariant) : deep copy
immutable to immutable(const/invariant) : shallow copy
となるのはどうだろう?
161:デフォルトの名無しさん
07/12/01 17:50:00
>>159
const(int*) は const(const(int)*) と同じ。
const Type var; は final const(Type) var; と同じ。
ただ、2.008ではfinal記憶クラスが正しく機能していない。
162:デフォルトの名無しさん
07/12/01 18:34:50
記憶クラス周りは結構複雑だなぁ。
invariantメンバ関数は、コンパイル時に定数に置き換えられそうだな。
使いこなせれば強力だけど、そこまでが大変だぁ。
163:デフォルトの名無しさん
07/12/01 19:01:19
ん?invariant void foo()で実現できる事って何があるんだろう?
164:デフォルトの名無しさん
07/12/01 19:05:15
>>161
なるほど。
URLリンク(www.kmonos.net)も読み直して理解できたかも。
「const(int)* p」は「(const(int))* p」って意味で、pの指す先は書き換え不可だけど、p自体はconstじゃなくて書き換え可能。
「const(int*) p」は「const(const(int)*) p」って意味で、pも書き換え不可になる訳か。
constの推移性って便利だけど、理解するまでは複雑だな。どこからconstなのか少しわかりにくい。
特に「const int* p」はどこにconstがかかるのか分かりにくいね。
165:デフォルトの名無しさん
07/12/01 19:17:22
>>162-163
を見て気になったけど、
>invariant メンバ関数では、 this参照経由で参照される全てのデータがinvariantであることが保証されます。
struct S
{
int x;
invariant void foo()
{
x = 4; // エラー。x は invariant
this.x = 4; // エラー。x は invariant
}
}
これはつまりS.xはコンパイル時決定変数?
そうなるとSのメンバ変数はすべてコンパイル時決定って意味になるけど、それは使い道がない気がする...
166:デフォルトの名無しさん
07/12/01 19:19:43
>>165
invariantでないメンバ関数を追加すればいいじゃない。
167:デフォルトの名無しさん
07/12/01 19:23:00
const int* p; って宣言で、constはストレージクラスのはずなのに、
typeof(const int*) が、typeof(const(int*)) と同じように働くのが気持ち悪い。
168:165
07/12/01 19:34:50
えーと、
たとえばSを
struct S{
int x;
int y;
invariant void foo(){
x = 4; //エラー、xはinvariant
}
void var(){
x = 4; //これはNG?
y = 5; //これはOK?
}
}
とした場合どうなる?
xはfooでinvariantとして扱われているから、varで書き換えたら怒らるんじゃないかと心配してるんだけど。
で、yはfooからは参照されてないからvarからは普通に書き換え可能?
テストすれば分かることを聞いてすまん。時間あったらテストするんだけど。
169:デフォルトの名無しさん
07/12/01 19:41:32
時間あるじゃんw
170:デフォルトの名無しさん
07/12/01 19:43:55
>>168
invariantメンバ関数はinvariantな型に対してしか呼び出せないから、
fooを呼び出せる場合は、varは呼び出せない。
171:147
07/12/01 19:49:48
>>158
countについては、俺もconstでいいと思う。
172:165
07/12/01 19:54:15
>>170
"invariantな型に対してしか呼び出せない"というのはどういうこと?
invariant void foo()があることでSのメンバ変数がすべてinvariantになるという認識は間違いでしょうか。
173:デフォルトの名無しさん
07/12/01 20:02:37
static関数はインスタンスのメンバ変数にアクセスできないのと同じ理屈を書いてるだけでしょ。
invariantはコンパイル時に解決できなければならないってのを意識すれば分かりやすいかな。
174:165
07/12/01 20:09:08
>>173
つまり
S s1;
invariant S s2;
s1.foo(); //呼び出せない
s2.foo(); //呼び出せる
ということ?これなら納得できる。
175:デフォルトの名無しさん
07/12/01 20:15:25
俺の説明が悪かったのかな?時間あるんだから、テストしようね。
176:165
07/12/01 20:18:42
そうですね。すみません。
本当は今パソコンつけてる暇無い時期なんですけどね。これだけインターネットしてたら確かに同じだな;
177:デフォルトの名無しさん
07/12/01 20:33:37
つまり、
invariant変数はコンパイル時に決定され、ROMに配置される可能性があり、ポインタをとってはならない
invariant型の変数は実行時に決定でき、書き換えられることはないと保障される
invariantメンバ関数はコンパイル時に解決できる
const変数は実行時に決定できる
const型の変数は実行時に決定でき、書き換えてはならない
constメンバ関数は実行時に解決される
static変数はコンパイル時に決定され、実行時に変更することができ、スコープによらずデータが保持される
こうか?
178:デフォルトの名無しさん
07/12/01 21:06:23
>>177
> invariantメンバ関数はコンパイル時に解決できる
これが仕様呼んでる限りだとよくわからん。
普通にモジュールスコープにある関数とか呼べるし
179:デフォルトの名無しさん
07/12/01 21:26:59
invariantメンバ関数から参照できるのは、invariantなメンバのみってことでは。
180:デフォルトの名無しさん
07/12/01 21:29:38
いかん。誤解をまねく。
invariantメンバ関数から参照できるメンバは、invariantのみ。
のほうが正しい。
181:デフォルトの名無しさん
07/12/01 21:36:46
invariantメンバ関数からthisポインタを通じて参照されるオブジェクトはinvariantと仮定される、
じゃないか?
182:デフォルトの名無しさん
07/12/01 21:44:55
このエラーはいったい?
test.d(3): statement expected to be { }, not int
struct S
{ int x;
invariant int y;
}
183:デフォルトの名無しさん
07/12/01 21:46:12
ここらへん明日整理してみるか。
184:182
07/12/01 22:02:29
公式サイトの方しかDL2.0のコンパイラはないのね
185:デフォルトの名無しさん
07/12/02 01:32:52
URLリンク(d.hatena.ne.jp)
186:デフォルトの名無しさん
07/12/02 02:18:43
いまさらなんだけど
alias char[] string;で
invariant(string)ってした方がきもちよくねconst stringとか。
今char[]とstringを使い分けなきゃならんのがギモヂワルイ
187:デフォルトの名無しさん
07/12/02 03:33:33
>>186 確かに気持ち悪い
でも invariant(string) s; が invariant(char[]) s; になって
今の invariant(char)[] じゃなくなるから意味が変わっちゃうね
とはいえ他の手はこれくらいしかないんじゃなかろうか
alias char[] string;
alias const(char)[] cstring;
alias invariant(char)[] istring;
188:デフォルトの名無しさん
07/12/02 04:01:34
alias invariant(char) ichar;
とかをたくさんつくればいいのかな!
189:デフォルトの名無しさん
07/12/02 08:23:05
中途半端にstringなんてaliasを標準に入れるから面倒になった悪寒
いっそstring使わない方向でいこうかな・・・
190:デフォルトの名無しさん
07/12/02 10:04:36
↑で
final const invariant いろいろ議論していた方々ありがとうございます
おいらも理解がふかまりました
191:デフォルトの名無しさん
07/12/02 10:29:21
>>185
なるほど、メンバ関数になるとほんと複雑だな。
192:デフォルトの名無しさん
07/12/02 23:07:48
>>185 の
>mutable/const のメンバ関数あるいはオブジェクトを経由すると invariant メンバ関数を呼び出せない
これはなんでなんだぜ?
193:デフォルトの名無しさん
07/12/02 23:36:08
invariant メンバ関数から const メンバ関数を呼び出せないのはわかるが、
mutable から const や invariant を呼び出せないのはよく分からん。
そもそも変数なら const は invariant に昇格できるんじゃなかったっけか?
194:デフォルトの名無しさん
07/12/03 00:24:57
mutableからconstは呼び出せると思うが
195:デフォルトの名無しさん
07/12/03 02:10:47
ごめん、mutable から invariant のメンバ関数だけだった。
196:デフォルトの名無しさん
07/12/03 03:37:12
mutable/constからinvariantを呼び出せない理由は
コンパイル時/実行時の違いが関係ありそうなんだけど
よく分からないんだ・・・
197:デフォルトの名無しさん
07/12/03 07:44:56
invariant→const : ok
mutable→const : ok
あとは全部だめ
198:デフォルトの名無しさん
07/12/03 09:51:48
constさいきょう!
199:デフォルトの名無しさん
07/12/03 21:41:55
>>196
invariantメンバ関数はinvariant型のインスタンスに対してしか呼び出せないんだから、
mutableメンバ関数の呼び出せるインスタンスに対しては絶対に呼び出せないし、
constメンバ関数の呼び出せるインスタンスは、mutable型かconst型だけで、
invariantメンバ関数が必ずしも呼び出せるとは限らない。
200:デフォルトの名無しさん
07/12/03 21:47:39
│mutable型│const型│invariant型
mutableメンバ関数 │ ○ │ × │ ×
constメンバ関数 │ ○ │ ○ │ ○
invariantメンバ関数│ × │ × │ ○
こういうことだろ?
201:デフォルトの名無しさん
07/12/03 21:52:01
戻り値がmutableで、関数がconstの場合はどうすればいいんだろう?
202:デフォルトの名無しさん
07/12/03 21:57:59
何も悩む必要はないと思うけど。
class C {
const C dup() { return new C; }
}
void main(){
auto c_const = new const(C);
auto c_mutable = c_const.dup;
writeln(typeid(typeof(c_const)));
writeln(typeid(typeof(c_mutable)));
}
203:デフォルトの名無しさん
07/12/03 22:56:41
使い分けはこうか
class A {
const int a() { return 1; }
cosnt(int) b() { return 2; }
const const(int) c() { return 3; }
}
204:デフォルトの名無しさん
07/12/03 23:22:31
え、もしかして
const int i;と
const(int) i;ってかなり意味違う?
205:デフォルトの名無しさん
07/12/03 23:46:55
うあ、おれもいま初めてしった。
C++でいう
class C {
int foo() const;
};
ってどうやるんだろうとずっと思ってた
206:デフォルトの名無しさん
07/12/03 23:50:29
これかなり問題ある気がするんだど、どうだろう。
void main(){
invariant(int) i;
auto p = &i;
assert(is(typeof(p) == invariant(int)*));
i = 2;
writeln(*p); // 2
i = 3;
writeln(*p); // 3
}
pの指す先はinvariantのはずなのに、合法的なコードでかわってしまうという
207:デフォルトの名無しさん
07/12/03 23:53:15
>>205
>>185にはそれのことが書いてあるんだわ
208:デフォルトの名無しさん
07/12/03 23:55:50
>>206
URLリンク(www.kmonos.net)
処理系は、 実装の際にinvariant宣言の初期化子で
invariantのインスタンスを置き換えても構いません。
このため、invariant変数のアドレスを取得するのは不正となります:
invariant int i = 3;
invariant* p = &i; // error, cannot take address of invariant
とのことなので &i が不正な処理なのです
エラーにならないのならそういうバグかもしれない
209:デフォルトの名無しさん
07/12/04 00:02:08
やばい、今一理解できない orz
import std.stdio;
public class S
{
int mutable_num = 1;
const(int) const_num = 20;
const int const_num2 = 21;
invariant(int) invariant_num = 30;
invariant int invariant_num2 = 31;
}
void main()
{
S s = new S();
writeln("mutable_num: ", s.mutable_num);
writeln("const_num: ", s.const_num);
writeln("const_num2: ", s.const_num2);
writeln("invariant_num: ", s.invariant_num);
writeln("invariant_num2: ", s.invariant_num2);
}
-- output ---
mutable_num: 1
const_num: 20
const_num2: 21
invariant_num: 30
invariant_num2: 4296960
210:デフォルトの名無しさん
07/12/04 00:03:25
>>208
それはinvariant記憶域クラスの変数の話で、
invariant型のauto変数のポインタの話には触れてないよね。
invariant int i; と invariant(int) i; は一応ちがうものだと思うんだけど。
211:デフォルトの名無しさん
07/12/04 00:11:29
型がinvariantなのと変数がinvariantっていう違い?
212:デフォルトの名無しさん
07/12/04 00:13:26
>>211
そう。
現在の文法では、invariant型のデータを保持するミュータブルな変数が許されてる、様な気がする。
213:208
07/12/04 00:27:32
>>210
あ そうか
型と記憶域クラスで違うんだね・・・
214:205
07/12/04 07:16:49
>>207
URLリンク(d.hatena.ne.jp)
まとめきた
超さんくす
215:デフォルトの名無しさん
07/12/04 14:22:33
const int i;
const(int) i;
が違うのは分かるけど。後者は使い道はないよね?
216:デフォルトの名無しさん
07/12/04 15:31:26
関数の引数に使えたりしない?
invariantでもmutableでも受け取れる・・・みたいな
217:デフォルトの名無しさん
07/12/04 20:02:39
メンバだと invariant int も const int もクラス変数に取られるみたいだけど
invariant int がインスタンス変数としてアクセスするとどっかのアドレス返すのは何故だろう?
constはメモリを使い、invariantは使わないという差なら、エラーにすりゃいいのに。
218:デフォルトの名無しさん
07/12/04 20:09:51
>>217
どういうこと?>>209のこれのこと?
invariant_num: 30
invariant_num2: 4296960
219:デフォルトの名無しさん
07/12/04 20:14:43
それそれ。仕様上、メモリにとられない=直値に置き換え?みたいだし、何が取れてるんだろうと。
220:デフォルトの名無しさん
07/12/04 21:31:52
それは、ただのバグじゃねえの?
俺の環境(2.008/windows)だと
mutable_num: 1
const_num: 20
const_num2: 21
invariant_num: 30
invariant_num2: 31
となったが。
221:デフォルトの名無しさん
07/12/04 21:51:59
あらら
222:デフォルトの名無しさん
07/12/04 22:02:36
2.007と008との間で対応入ってるみたいね。
const型がコンストラクタで初期化できなくなってるし、
今は使いこなそうと思わないほうがいいのかも。
223:デフォルトの名無しさん
07/12/04 23:01:33
じゃあ2.009待つか…
マダァ-? (・∀・ )っ/凵⌒☆チンチン
224:デフォルトの名無しさん
07/12/05 16:31:44
今月発売予定 (もう出てる?) の本
Learn to Tango with D
URLリンク(apress.com)
225:デフォルトの名無しさん
07/12/05 16:43:47
>>224 おお・・・すげえ
226:デフォルトの名無しさん
07/12/05 16:44:52
>>224
Amazon.co.jpによると発売日2008/1/28になってるよ。
URLリンク(www.amazon.co.jp)
227:デフォルトの名無しさん
07/12/05 17:15:50
どうせ3ヶ月くらいで古くなるんでしょ
228:デフォルトの名無しさん
07/12/05 17:17:55
Tangoまだ1.0も出てないのにw
229:デフォルトの名無しさん
07/12/05 20:43:43
枯れてwxWidgetsが対応したら、気軽にクライアントに仕えるのにな
230:デフォルトの名無しさん
07/12/05 20:59:21
Tango・・Phobosと仲良くしてほしいなぁ
231:デフォルトの名無しさん
07/12/06 17:41:03
Ultimate Tangobos まぁ~だぁ~?
232:デフォルトの名無しさん
07/12/06 17:49:48
なんかStream.readf壊れてる気がするんだけど…
233:デフォルトの名無しさん
07/12/06 21:46:57
アルティメット・タンコボキバジとな
234:デフォルトの名無しさん
07/12/06 23:22:07
タンゴボスとガバスはどっちが偉いんですか?
235:デフォルトの名無しさん
07/12/07 03:28:13
丹古母鬼馬二
ってなんだこのトンチンカンな名前。
具ぐれ化す。並の名前だなぁ。初めてきいたよ。
236:デフォルトの名無しさん
07/12/07 11:42:36
URLリンク(ja.wikipedia.org)
今日日、小学生でもこんな稚拙な文章は書かないぞw
237:デフォルトの名無しさん
07/12/07 15:41:16
void hoge(ref const real r) {
}
void main() {
real r;
hoge(r);
}
dmd止まる\(^o^)/
238:デフォルトの名無しさん
07/12/07 19:02:40
>>237
その類のバグは既に報告されている気がする
239:デフォルトの名無しさん
07/12/08 14:07:52
phobosのrepositoryが全然変化ないなあ
240:デフォルトの名無しさん
07/12/09 21:35:10
tangoでFIFOが高速に扱えるcollectionってないのかな?
最初ListSeqがそれかと思ったがこれはなんかLIFOのみ高速に扱えるみたいで…
なんかC++のSTLのlistとかに比べると使い勝手悪い感じだなぁ…
241:デフォルトの名無しさん
07/12/10 09:34:19
phobosのtrunkに単方向リストSList(T)が追加される兆しがあるよ
まだprivateらしいけど
242:デフォルトの名無しさん
07/12/10 13:31:24
SListは最新版DMDに入ってるじゃん。
243:デフォルトの名無しさん
07/12/10 21:20:38
あれ・・・編集したってだけか
244:デフォルトの名無しさん
07/12/11 12:04:30
Dがでてきて結構たつのに未だにコンテナすら整備されてないんだな
STLを置き換えられる程度には用意して欲しいもんだ
245:デフォルトの名無しさん
07/12/11 12:32:34
壮大なDTLの計画が現在進行中だが、
あまりにも壮大すぎて全く完成していないのが現状。
246:デフォルトの名無しさん
07/12/11 12:44:52
ここでなんか寄せ集めのライブラリ作ろうぜ
必要なときにdファイル落としてプロジェクトに組み込む系のやつ
247:デフォルトの名無しさん
07/12/11 13:12:01
DTLのプロジェクトってもう動いてないんじゃ・・・
スマートポインタはGCあるからいらないとして(ほんとに?)
主要なコンテナとアルゴリズムくらいでいいや
あわよくばストリーム系まであれば万万歳
248:デフォルトの名無しさん
07/12/11 13:15:03
tangoでいいじゃん
249:デフォルトの名無しさん
07/12/11 16:08:22
イテレータクラスのかわりにopApplyがあると思ってたんだけどopApply自体あんまり融通利かないんだね
250:デフォルトの名無しさん
07/12/11 19:01:08
Javaを参考にAPIのインタフェースだけ揃えりゃライブラリも揃えやすいはずだけどね。
D自体、言語を枯らそうという気が皆無だから、ライブラリなんて作れないってのもあるかも
251:デフォルトの名無しさん
07/12/11 21:01:16
>>248
Phobos上でやりたいよん
252:デフォルトの名無しさん
07/12/11 21:08:34
tangobosでおk
253:デフォルトの名無しさん
07/12/11 22:29:53
Phobosって、設計とか何も考えずに、このぐらいの機能はいるだろって感覚だけで作っていった印象があるべ。
もうちょっとスマート(に拡張できる)設計をしてくれればなあ。
254:デフォルトの名無しさん
07/12/11 22:52:54
まあ、そのためのtangoだろう
255:デフォルトの名無しさん
07/12/12 00:20:40
Dってどのへんが支持してるの?
256:デフォルトの名無しさん
07/12/12 00:28:32
このスレ
257:デフォルトの名無しさん
07/12/12 01:55:59
URLリンク(www.tiobe.com)
なかなか10位以上にはなれないが頑張ってるよ
258:デフォルトの名無しさん
07/12/12 04:33:37
(ダリオ戸田の声で)辞書猫の Tango だっす!
259:デフォルトの名無しさん
07/12/12 23:57:48
>>257
ほんとだ
もっとがんばれ。超がんばれ。
260:デフォルトの名無しさん
07/12/13 00:10:51
というかperlってpythonより下なんだ・・・早いなぁ
261:デフォルトの名無しさん
07/12/13 00:35:15
>>257
Lua上がりすぎw
262:デフォルトの名無しさん
07/12/13 00:39:29
1%未満から1.6%に増えるとか大健闘だな
やっぱいつまで経っても正式版が出ないから敬遠する人間が多かったんだな
263:デフォルトの名無しさん
07/12/13 11:54:51
Dより上になんか壁を感じるw
メジャーの壁というか。「ここからが本当の地獄だ……!」みたいな。
264:デフォルトの名無しさん
07/12/13 12:25:17
最強のライブラリと伝説のIDEが現れればC++なんて目じゃないよ。
265:デフォルトの名無しさん
07/12/13 12:42:36
俺もpythonの位置に違和感があるなあ
266:デフォルトの名無しさん
07/12/13 16:49:10
>>264
そりゃすべての言語にいえるんじゃね?
267:デフォルトの名無しさん
07/12/13 16:55:24
いずれ日本語を正しく扱うクラス要るし早めに作っとこうぜ
268:デフォルトの名無しさん
07/12/13 19:13:51
Phobosってcharsetをサポートしてないのな。
windowsのコードページ変換のみサポートしてる感じか?
269:デフォルトの名無しさん
07/12/13 20:42:09
MangoにICUのD-bindingあった気がするんだが
270:デフォルトの名無しさん
07/12/13 22:29:13
こういう特殊化できるようにならないかな。
void func(T : function)(T f) { f(); }
271:デフォルトの名無しさん
07/12/13 22:57:02
現状だと、aliasで受けるしかできないんだっけ。
272:デフォルトの名無しさん
07/12/14 01:48:32
どんなに仕様や実装が素晴らしくても>>264が駄目だと結局駄目なんだよね・・・
273:デフォルトの名無しさん
07/12/14 14:05:36
その言い回しだと>>264が駄目な人間みたいじゃないかw
274:デフォルトの名無しさん
07/12/14 14:18:51
ライブラリはともかく、IDEに頼るのは駄目ジャマイカ?
275:デフォルトの名無しさん
07/12/14 14:21:06
仕様や実装が固まらんかぎり良いIDEは出てこないんじゃね?
276:デフォルトの名無しさん
07/12/14 18:11:41
いつのまにかクラスをtypedefできるようになってた・・・orz
ついにこう書けるんだね・・・! つーかいつできるようになったんですか><
//class HogeError : Error {
// this(string msg) {
// super(msg);
// }
//}
typedef Error HogeError;
277:デフォルトの名無しさん
07/12/14 19:50:45
継承関係はどうなるの?
何か派生だとしっくりこないし、同じ実装を持つ他人になる?
278:デフォルトの名無しさん
07/12/14 21:02:38
全く同じClassInfoを持つけど、オーバーロードでは区別され、
typedefもとの型には暗黙変換できる型
になるみたい。
279:デフォルトの名無しさん
07/12/14 21:32:36
説明だけみるとなんかダウンキャストできなさそうだな。
出来なくてもいいけど。
280:デフォルトの名無しさん
07/12/15 09:04:31
同じClassInfoをもつのに、ダウンキャストできないってことある?
281:デフォルトの名無しさん
07/12/15 11:09:41
D2.008 Exceptionから、fileとlineがきえた えぇぇ・・・
282:デフォルトの名無しさん
07/12/15 11:56:33
>>281
外部にリリースするものとして、ファイル名だの行番号だのが入っているバイナリってどうなの?
と思っていたから別にそれでいいと思う。
でもデバッグ時にはほしい情報だよね。
283:デフォルトの名無しさん
07/12/15 12:13:31
VistaSP1のdfrgntfs.exeなんかはもろにソースファイルのパスとかが入ってる
評価版だからだと思うけど
284:デフォルトの名無しさん
07/12/15 12:14:30
>>282
伝説のIDEが現れれば例外発生元を突き止めてビジュアルに表示してくれるよ!
285:デフォルトの名無しさん
07/12/15 13:54:31
罠D
286:デフォルトの名無しさん
07/12/15 19:57:09
MSがVisualStudioで出せば・・・
万が一にもありえんか
287:デフォルトの名無しさん
07/12/15 21:55:09
MSがVisualStudioで出すことになれば仕様策定の遅さに苛立って
独自拡張を続け、ライブラリもMS独自のものが出来上がるだろう。
そう思うと当初のJavaと同じ問題抱えているな・・・
288:デフォルトの名無しさん
07/12/15 22:02:25
MS Visual D# ...
それはそれでよさそうな気がしないでもない
289:デフォルトの名無しさん
07/12/15 22:10:23
ネイティブバイナリ吐かないDなんてC#でいいじゃん・・・
290:デフォルトの名無しさん
07/12/15 22:13:12
それならVisual D/CLIで…
291:デフォルトの名無しさん
07/12/15 23:15:56
>>290 /CLI の部分はいらねえー
292:デフォルトの名無しさん
07/12/15 23:23:02
>>274
IDEが何やってるのか分かる限りは、むしろIDEもライブラリも「使うべき」だと思う。
とeclipseのリファクタリング機能に味を占めたヘタレの俺が言ってみる。
強い型付けとかコンパイルの早さとか、IDEがあると生きてくる言語だと思うから余計勿体ないのよね。
しかし、年の瀬も押し迫ってきたな……
去年の1.0への期待でwktkしながら年を越したっけなぁ。
来年のDは果たしてどこへ向かうことやら。
正月にはお空の火星に向かってみんなでお祈りだ。
293:デフォルトの名無しさん
07/12/16 00:40:03
1月1日にv1.001が出たんだっけ?
あれ?
294:デフォルトの名無しさん
07/12/16 00:57:25
じゃあきっと、あと2週間で3.001がでるな。
295:デフォルトの名無しさん
07/12/16 19:16:59
もうそんなになるっけ??
296:デフォルトの名無しさん
07/12/16 19:22:03
0.99リリース
↓
ついに1.0が来るぞー!
↓
0.100リリース
↓
(゚д゚)
は2004年頃だったっけ?
297:デフォルトの名無しさん
07/12/16 19:52:33
次のバージョンうpまだー
298:デフォルトの名無しさん
07/12/16 23:00:24
static foreachまだかお?
299:デフォルトの名無しさん
07/12/16 23:20:22
import std.metastrings;
pragma(msg, Format!("%s%s", 1, 2));
%sが直に出力されちゃうんだけど、使い方間違ってる?
300:デフォルトの名無しさん
07/12/16 23:33:08
>>299 2.008ではうまく動いてないように見えるなあ
301:デフォルトの名無しさん
07/12/17 01:07:23
>>299
semanticが呼ばれてないに一票
302:デフォルトの名無しさん
07/12/17 17:01:27
MC++DのアンドレイがThe D Programming Languageって本書くよってさ
URLリンク(erdani.org)
Andrei is working on "The D Programming Language" book, slated to hit the shelves in October 2008.
His interest in the D programming language stems from Andrei's active participation in the design of D 2.0
as a close collaborator of D's creator, Walter Bright.
あー 先週京都に来てたんだ
Andrei will present the paper "Graph-Based Learning for Phonetic Classification" co-authored
with Katrin Kirchhoff at The 2007 IEEE Automatic Speech Recognition and Understanding (ASRU)
Workshop, December 9-13, Kyoto, Japan.
303:デフォルトの名無しさん
07/12/17 22:26:37
これは期待
304:デフォルトの名無しさん
07/12/17 22:58:32
役に立つとか立たないとかじゃなく、好きな小説家の新作みたいに楽しみなんだけど、
これはちょっと妙な期待をしすぎかもしれんw
305:デフォルトの名無しさん
07/12/17 23:04:28
日本語訳が出る頃には半分くらいコンパイル通らなかったりして
そもそも日本語訳が出るかはさておき
306:デフォルトの名無しさん
07/12/17 23:29:16
今時ならXMLベースでリソースファイル作ればいいんだけどね
307:デフォルトの名無しさん
07/12/18 01:03:37
>>302
本が出ることも単純に楽しみだけどこの文で一番気になったのは
D2.0をOctober 2008頃には安定させるつもりだってこと
308:デフォルトの名無しさん
07/12/18 01:09:06
3.0をリリースするってことだろw
309:デフォルトの名無しさん
07/12/18 05:52:34
ペロ・・・これは思い込み・・・!
310:デフォルトの名無しさん
07/12/18 05:53:14
誤爆
311:デフォルトの名無しさん
07/12/19 22:08:33
関数のインライン展開って何か条件ある?
-inline オプションつけても全然効果無いんだけど。
312:デフォルトの名無しさん
07/12/19 22:27:27
インライン展開したら効率悪くなると判断されてるんじゃなかろうか
313:デフォルトの名無しさん
07/12/19 22:38:20
逆逆。むやみにインライン展開されて逆に遅くなってるだけ。
314:デフォルトの名無しさん
07/12/19 23:37:29
-inlineつけたらどこまでインライン展開されるの?
main以下全部ってわけじゃないよね
315:デフォルトの名無しさん
07/12/19 23:37:29
いやいや、例えば配列の境界チェックありで要素を取り出そうってので以下のような
コードでテストしたらテンプレート化したほうは確実に遅いんだよね。-inline つけてもつけなくても。
size_t at(T)(T[] a, size_t i){
if( i < a.length ) return a[i];
else throw new ArrayBoundsException(null, 0);
}
void main()
{
char[] a = new char[64 * 1024 * 1024];
auto begin = timeGetTime();
for(size_t i = 0; i < a.length; i++)
{
if( i < a.length ) a[i] = a[i];
else throw new ArrayBoundsException(null, 0);
}
Stdout.format("{}", timeGetTime() - begin).newline;
begin = timeGetTime();
for(size_t i = 0; i < a.length; i++)
{
a[i] = a.at(i);
}
auto end = timeGetTime();
Stdout.format("{}", timeGetTime() - begin).newline;
}
316:315
07/12/19 23:40:33
で、上のコード実行すると最初のテンプレート化してないほうが 75ms ぐらいで、
下のテンプレート化したほうが 350ms ぐらいだった。-inline つけてもつけなくても一緒。
-inline つけたやつを逆汗したら当然展開されていなかった。
317:デフォルトの名無しさん
07/12/19 23:50:00
どうでも良い事でスマソ。
逆アセって事は、直接アセンブラを吐けないコンパイラなの?
318:デフォルトの名無しさん
07/12/20 00:47:37
??
もっと平易な表現でお願い。
319:デフォルトの名無しさん
07/12/20 06:44:43
マイクロソフトって単位?
320:デフォルトの名無しさん
07/12/20 10:02:05
>>317
gdcは吐けるdmdは吐かない
321:デフォルトの名無しさん
07/12/20 22:01:20
dsss + Tango でリソースファイルをリンクするのにはどうするの?
dmd-win-tangoとかdsss.confとか見たけどよくわからんかった…(´・ω・`)
322:デフォルトの名無しさん
07/12/20 22:48:22
>>320
thanx
323:デフォルトの名無しさん
07/12/20 23:09:21
dmdの場合はオブジェクトファイルをdmのobj2asmにかければ大丈夫じゃね?
324:デフォルトの名無しさん
07/12/21 13:48:13
更新まだかなぁ・・・
325:デフォルトの名無しさん
07/12/22 00:40:57
>>324
じゃあこれで。
Tango 0.99.4 Frank has been released.
326:デフォルトの名無しさん
07/12/22 18:32:51
D言語ってJavaのJFrameみたいに簡単にウインドウ出せるの?
327:デフォルトの名無しさん
07/12/22 19:14:41
AWTのD-portingのDWTを使ってみるとか。
328:デフォルトの名無しさん
07/12/23 00:04:45
DFLならこう
// URLリンク(www.dprogramming.com)
import dfl.all;
int main()
{
Form myForm;
Label myLabel;
myForm = new Form;
myForm.text = "DFL Example";
myLabel = new Label;
myLabel.font = new Font("Verdana", 14f);
myLabel.text = "Hello, DFL World!";
myLabel.location = Point(15, 15);
myLabel.autoSize = true;
myLabel.parent = myForm;
Application.run(myForm);
return 0;
}
329:デフォルトの名無しさん
07/12/23 00:43:29
tango の最新版、日付・時刻関連が少しすっきりしたけど、まだ手の入る余地がありまくってるな。
330:デフォルトの名無しさん
07/12/23 03:17:45
>>327
DWTはSWTよ
あと開発止まってるぽい
331:デフォルトの名無しさん
07/12/23 04:52:40
とりあえずTango0.99.4のtango.util.Convertの792行目あたりがあやしい。
returnで返さないっぽい
332:デフォルトの名無しさん
07/12/23 14:06:20
DFLは付属のdfl.exe使わされるのが嫌で使ってないなあ
dmd.exeだけでできたい!
333:デフォルトの名無しさん
07/12/23 14:08:07
dmdでも長ったらしいオプションつけるか、応答ファイル書くかしておけばいけるでしょ。
334:デフォルトの名無しさん
07/12/23 22:14:13
寧ろDFLのモジュールとlib以外の使い道知らんかった
335:デフォルトの名無しさん
07/12/24 21:57:56
ヲルたんからのクリスマスプレゼントwktk
336:デフォルトの名無しさん
07/12/24 22:36:16
実際もうじき約一か月たつし、先月と先々月の更新の日付から見たら夢見てもいいかも?
とりあえず全裸待機。
337:デフォルトの名無しさん
07/12/24 22:37:06
風邪ひくぞ
338:デフォルトの名無しさん
07/12/24 22:44:08
いい子にして早く寝ないとな…
をるたんのとこでは今何時かしらないけど
339:デフォルトの名無しさん
07/12/25 22:36:46
>>110でも出てるけど
Assertion failure: 't->deco' on line 608 in file 'mtype.c'
はいつなおるんだあああ
340:デフォルトの名無しさん
07/12/26 07:10:52
全裸待機。 この前のカンファで目玉はなんだっけ
あまり意味なさそうな static foreachしか覚えてないw
341:デフォルトの名無しさん
07/12/26 11:36:34
const属性を考慮してphobosが書き換えられているようだ
342:デフォルトの名無しさん
07/12/26 11:57:38
>>340
macro
ADL
拡張メソッド
static引数(関数テンプレートの糖衣構文)
メンバの委任
コンパイル時に全てのcaseが網羅されているか検証するfinal switch
あたりだったか。
343:331
07/12/26 21:03:27
Tango0.99.4のtango.util.Convertの792行目あたりがあやしいかったのは、rev3066で直ったみたいだ。
しっかし、Tangoもどこまでやったら1.0出す気なんだろ。
まぁ確かにもっとインターフェース良くなるところは多いと思うけど。
344:デフォルトの名無しさん
07/12/26 23:55:05
2.0で追加されたphobosのライブラリを
1.0でも使えるようにするプロジェクト std2 が dsource にできてるね
345:デフォルトの名無しさん
07/12/27 00:14:25
それよりアップデートはまだなのか
346:デフォルトの名無しさん
07/12/27 20:34:53
extern(C++)便利だなこりゃ
347:デフォルトの名無しさん
07/12/27 21:19:39
>>346
あれってC++のソースのコンパイルをmsvcではなくdmcでしなきゃいけないんだよね?
そう思ってstlportのセットアップが面倒で試してないんだが面白そう
348:デフォルトの名無しさん
07/12/27 21:27:47
C++のobjもOMFとCOFFって分け方でいいの?
DMDはOMDってことになるのかな?
349:デフォルトの名無しさん
07/12/27 22:29:41
>>347
いやいや、VisualStudioで作成したやつだよ。
~.libをlink.exeにくわさないとだめだけど
350:デフォルトの名無しさん
07/12/27 22:43:51
正確には dmc も msvc も同じ修飾名を使っているので問題がない。
Linux ではどうなってるかしらん。
351:デフォルトの名無しさん
07/12/28 00:18:13
extern(C++)といえば、interface宣言を使ってC++のオブジェクトをDからアクセスできるようになったけど、これの場合はCOMと同様にC++マングルは関係なくなるのかな?
352:デフォルトの名無しさん
07/12/28 00:40:44
いえす。C++マングリング規則にD側が合わせることになる。
353:デフォルトの名無しさん
07/12/28 00:41:45
COMインターフェイスってどういう条件で普通のインターフェイスからCOMインターフェイスになるの?
IUnknownを継承するだけでいいの?
354:デフォルトの名無しさん
07/12/28 00:58:33
>>352
?
DのinterfaceがC++のオブジェクトモデルと互換性があるということで、実際のシンボル名関係なしにVTbl手繰ってメソッド呼べるのかなぁと思ってたんだが、この場合でもあの_ZN3なんとかみたいなシンボル名からメソッドを呼び出しているの?
>>353
MS用語でいう"カスタムインターフェイス"ならIUnknown継承だけでCOMインターフェイスだったと思う。
実際にCOMコンポーネントとして使えるようにするにはいろいろ登録したり、QueryInterfaceの動作要件とかあったはず。
355:デフォルトの名無しさん
07/12/28 07:58:40
>>353
extern(Windows)なinterfaceだったと思う。
356:デフォルトの名無しさん
07/12/28 11:02:18
>>353
IUnknownって名前のインターフェイスを継承するだけでいいみたい。
interface IUnknown { }
interface ITest: IUnknown { }
void main(){
ITest o;
delete o; //Error: cannot delete instance of COM interface ITest
}
357:デフォルトの名無しさん
07/12/29 07:09:33
COMインターフェースが何に使えるかおすえて
358:デフォルトの名無しさん
07/12/29 08:44:34
DLL を通してクラスを提供可能。
359:デフォルトの名無しさん
07/12/29 13:30:23
news://news.digitalmars.com:119/fl2jnu$1i6p$1@digitalmars.com
> Subject: During these holiday times...
> From: Walter Bright
> Date: 2007/12/28 19:38
>
> ...we should take a moment to reflect on the important things in life.
>
> URLリンク(uk.youtube.com)
360:デフォルトの名無しさん
07/12/29 19:47:29
えw
361:デフォルトの名無しさん
07/12/30 01:03:28
>>349 ごめんできない
// cpp.cpp
#include <iostream>
#include "cpp.h"
void Cpp::func() {
std::cout << "call Cpp::func()" << std::endl;
}
Cpp* newCpp() {
return new Cpp;
}
void deleteCpp(Cpp* instance) {
delete instance;
instance = NULL;
}
これをmsvcでコンパイルして cpp.lib もしくは cpp.obj を作った
362:361
07/12/30 01:04:06
// main.d
extern(C++) {
interface Cpp {
void func();
}
Cpp newCpp();
void deleteCpp(Cpp instance);
}
void main() {
Cpp cpp = newCpp();
cpp.func();
deleteCpp(cpp);
}
>dmd -c main.d
>link main.obj cpp.lib
OPTLINK (R) for Win32 Release 7.50B1
Copyright (C) Digital Mars 1989 - 2001 All Rights Reserved
d_to_cpp.lib
Error 43: Not a Valid Library File
--- errorlevel 1
何がまずいですか?
363:361
07/12/30 01:06:09
間違えた
C++のソースはcpp.cppじゃなくてd_to_cpp.cpp
364:349
07/12/30 07:27:19
ごめん、 libにくわすんじゃなくて
implib.exe だった
C:\dm\bin\implib.exe /s $(OutDir)\$(TargetName).d.lib $(TargetPath)
こういうことをやってます。
で出力された ~.d.lib を lib.exe でリンクね
365:デフォルトの名無しさん
07/12/31 21:25:36
皆さんよいお年を
をるたん来年もよろしく
2008.1.1の更新きたい
366: 【小吉】
08/01/01 03:26:27
あけおめ
アップデート期待age
367:デフォルトの名無しさん
08/01/01 09:51:38
あけおめ
をるたんところは、夕方ごろ年明けだよね。
368:デフォルトの名無しさん
08/01/01 11:10:14
ああ、アメリカかあ。生アメリカだよなあそこ。いいなあ。。。
369:デフォルトの名無しさん
08/01/01 12:05:15
D3.0が出ると聞いて
370:デフォルトの名無しさん
08/01/01 14:32:33
D 0.2008 になると聞いてやってきました。
371:デフォルトの名無しさん
08/01/01 17:57:30
今年こそは伝説のIDEが現れますように
372:デフォルトの名無しさん
08/01/01 19:55:39
その前に伝説の言語仕様が現れないと
373:デフォルトの名無しさん
08/01/01 20:34:40
2.009ktkr…なにこのがっかり変更数
裏で何か巨大なものを作ってると思って待つしかないか…
374:デフォルトの名無しさん
08/01/01 21:40:06
これはがっかりすぎる…
375:デフォルトの名無しさん
08/01/01 21:44:13
CTFE周りのバグフィックスはまあ嬉しい
376:デフォルトの名無しさん
08/01/02 00:31:55
新バージョンへの期待大きすぎワラタ
> Redid const/invariant semantics again.
やり直し…? どう変わったのかよく分からないや。
377:デフォルトの名無しさん
08/01/02 00:57:17
>>110が直ってないし・・・
378:デフォルトの名無しさん
08/01/02 01:01:54
>>376
void f(const(int) x);
void f(int x);
のオーバーロードが出来るようになってるのは確認した。
invariant(int) i;
i = 4;
もできなくなってるから、トップレベルのconst/invarinatの扱いが変わったみたいね。
379:378
08/01/02 01:06:56
invariant T var;
invariant(T) var;
ドキュメントによれば、この二つが完全に等しくなったみたいだね。
やっと気持ちの悪いねじれが解消された感じ。ようやくだけど。
380:デフォルトの名無しさん
08/01/02 01:16:41
全く同じ関数が二つ以上あっても呼ばれなきゃエラーにならなくてワロタ。
381:デフォルトの名無しさん
08/01/02 01:20:05
>>380
おおほんとだ。
リンカエラーにはなるけど、コンパイラはお咎めなしなんだな
382:デフォルトの名無しさん
08/01/02 01:31:48
Manifest Constant
enum string s = "hoge";
もはやenumの意味が消失してしまってる…
383:デフォルトの名無しさん
08/01/02 01:42:20
だめだ…をるたたん止めないと…
class C { }
void main() {
const(C) c;
c = new const(C); // error!!!
}
384:デフォルトの名無しさん
08/01/02 02:15:44
struct A {}
A a0;
const A a1;
a0= a1; //Error: cannot implicitly convert expression (a1) of type const(A) to A
をるたん・・・
385:デフォルトの名無しさん
08/01/02 02:40:31
>>384
それは今まで出来たのがおかしい気がする。
386:デフォルトの名無しさん
08/01/02 02:49:24
>>385
>>384じゃないけど、構造体の代入はビットコピーなんだからできないとおかしいだろう。
387:デフォルトの名無しさん
08/01/02 02:51:46
>>386
例えば、Aがint*型のメンバを持ってたとしたら、
const(int)*からint*への暗黙の型変換が起きてしまうと思うのだけど。
388:デフォルトの名無しさん
08/01/02 03:00:16
>>387
そういや、そうか。すんません。
389:デフォルトの名無しさん
08/01/02 08:53:49
>>387
const(int*)にならないの??
おれがわかってないのか??
390:デフォルトの名無しさん
08/01/02 09:19:51
>>384
Replace:
> const(C) c;
> c = new C(1); // error
with:
const(C) c = new C(1);
だってさ
URLリンク(www.digitalmars.com)
391:デフォルトの名無しさん
08/01/02 10:01:38
>>390
ん? それ>>383のだよね。
392:デフォルトの名無しさん
08/01/02 12:27:38
>>387
ポインタを含む場合だけエラーってのでいいと思うんだけどなあ。
393:390
08/01/02 12:31:13
>>391
そそ、ごめん
394:デフォルトの名無しさん
08/01/02 16:11:30
>>377
これなおらなきゃまともに窓作れないよ・゚・(つД`)・゚・
395:デフォルトの名無しさん
08/01/02 17:28:04
>>392
そんな例外はかえって必要ないだろう。
396:デフォルトの名無しさん
08/01/02 22:25:48
budで-Xphobosつけないとphobosのソースもコンパイルされるという事実に気づいた
自動で付いてるもんだと思ってたのに・・・ひどい!
397:デフォルトの名無しさん
08/01/03 03:37:47
char[] hoge = new char[100];
と
char[] hoge;
hoge.length = 100;
ってなんか違うことってある?
398:デフォルトの名無しさん
08/01/03 03:54:26
意味的には違わないはず。生成されるコードは知らないけど。
399:デフォルトの名無しさん
08/01/03 23:57:30
構造体をcast(const)できないんだけど、どうすればいいんだ。
400:デフォルトの名無しさん
08/01/04 01:45:20
>>399
コードplz あとそれどんなときに必要?
401:デフォルトの名無しさん
08/01/04 01:52:26
struct S {int i;}
void main() {
auto a = [S(0), S(1)];
auto b = [cast(const)S(0), S(1)]; // Error: no property 'opCall' for type 'const(S)'
}
const(S)[] 型の配列リテラルが欲しいんだ。
402:デフォルトの名無しさん
08/01/04 02:12:20
>>401
これじゃダメ?
import std.stdio;
struct S{int i;}
void main(){
const x = [S(0), S(1)];
writefln(typeid(typeof(x))); // (const(const(main.S)[2])
}
配列リテラル周りはいつもバグに悩まされるから使わない方が
トラブルに遭わずに済んでいいかと
403:デフォルトの名無しさん
08/01/04 02:25:51
const(S) a = S(0);
const(S) b = cast(const(S))S(0);
確かに、暗黙に変換できるのに、明示的にキャストできないのは気持ち悪いな。
404:402
08/01/04 02:26:57
どうもconst(S)とS(0)を同時に実現できないみたいなので下のzのようにするしかないんじゃない?
import std.stdio;
struct S{int i;}
void main(){
const x = [S(0), S(1)];
writefln(typeid(typeof(x))); // (const(const(main.S)[2])
auto y = [S(0), S(1)];
writefln(typeid(typeof(y))); // main.S[2]
const s = S(0);
auto z = [s, S(1)];
writefln(typeid(typeof(z))); // const(main.S)[2]
}
405:デフォルトの名無しさん
08/01/04 02:33:45
これでおk
auto a = [delegate const(S)(){return S(1);}(), S(2)];
406:デフォルトの名無しさん
08/01/04 06:02:12
似たようなやり方を前にも見たような気がする
407:デフォルトの名無しさん
08/01/04 21:56:14
phobosに16進文字列を整数に変換する関数ないの?
408:デフォルトの名無しさん
08/01/04 22:37:09
と思ったけど、CTFEできないといけないから、いらないや
409:デフォルトの名無しさん
08/01/06 22:58:00
もしかして引数なしの関数って、() なしで名前だけで呼び出せるのか
410:デフォルトの名無しさん
08/01/07 00:47:20
yes. プロパティっぽく扱えるようになってる。
411:デフォルトの名無しさん
08/01/07 00:48:22
>>408
それくらいの関数って作れなかったっけ?
412:デフォルトの名無しさん
08/01/07 01:23:48
yes.
プロパティのための構文糖。
413:デフォルトの名無しさん
08/01/07 01:24:57
リロし忘れてたごめんorz
答え方まで似てるってのが笑える。
414:デフォルトの名無しさん
08/01/07 01:31:14
>>411
CTFEできないとダメだから自前でこしらえるしかない、って言いたかったのさ
415:デフォルトの名無しさん
08/01/07 01:36:56
>>414
あーなるほど。さんくすこ
416:デフォルトの名無しさん
08/01/07 11:30:03
>>410,412
なるほど、Ruby チックでいいね
417:デフォルトの名無しさん
08/01/07 20:19:50
それってプロパティじゃない関数までgetterとして振舞うってことだよな。
LL好きにはいいんだろうけど、ちょっとやだな。
getter/setter相当がオーバーロードされているときと、
getterのみはローカルキーワードで対応ってならんのかな。
418:デフォルトの名無しさん
08/01/07 21:52:02
引数がない関数にわざわざ()をつける必要がないってのは自然な感じがするんだけどなあ。
419:デフォルトの名無しさん
08/01/07 22:01:44
まあ副作用が無ければ自然に思える。
420:デフォルトの名無しさん
08/01/07 22:25:16
その情報を取り出すことで何かが変化するのなら、それを使用するときに変化すると言うことが明確でなければならない。
つまり関数には後ろに「( )」が必要。
421:デフォルトの名無しさん
08/01/07 22:47:17
>>417-419
Delphiも、引数なし関数は省略できたな。
>>420
上の行としたの行がつながらん。
()があれば、必ず副作用なるわけではないでしょう?
副作用があるかどうかは、メソッド名とドキュメントで明示すべき。
422:デフォルトの名無しさん
08/01/07 22:49:44
命名をちゃんとしとけばそれほど違和感ないと思う。
process.kill
thread.start
window.close
stream.flush
something.toString
423:デフォルトの名無しさん
08/01/07 22:55:44
基本的に、名詞はプロパティ、動詞はメソッドというのが一般的じゃないかな。
424:デフォルトの名無しさん
08/01/08 03:06:26
そういや、Rubyも括弧いらないんだよな。
425:デフォルトの名無しさん
08/01/08 07:19:29
Ruby で慣れてるから副作用があろうがなかろうが括弧無しで違和感ないわ
426:デフォルトの名無しさん
08/01/08 10:57:58
>>417
個人的には変数がクラス外部からはconstに見えるアクセス制御がほしい。
class Foo {
int hoge_;
int hoge() { return hoge_; }
}
とか書くのも冗長、最適化されるか分からないのが嫌、みたいな。
っつかそういう制御っていまできましたっけ?
427:デフォルトの名無しさん
08/01/08 12:32:09
>>426 constメンバ関数
class Bar {}
class Foo {
int hoge_;
const int hoge() { return hoge_; }
Bar bar_;
this() { bar_ = new Bar; }
const const(Bar) bar() { return bar_; }
}
428:デフォルトの名無しさん
08/01/08 16:37:46
そういうことじゃなかろう。
429:デフォルトの名無しさん
08/01/08 21:44:09
readonlyにするってこと?
430:デフォルトの名無しさん
08/01/08 22:46:40
話ぶったきるが、連想配列では
char[][char[]] m;
m["foo"] ~= "bar";
と m["foo"] が lvalue になるんだけど、自分で作ったクラスが opIindex で配列を返すと
当然のことながら lvalue にならない。どうにか関数で配列の参照を返すことってできんだろうか?
431:デフォルトの名無しさん
08/01/08 23:08:07
opIndexAssign?
~= みたいな複合演算子は使えないけど。
432:デフォルトの名無しさん
08/01/08 23:42:51
それか、プロキシオブジェクトを返すか、だね。
433:デフォルトの名無しさん
08/01/09 01:07:09
phobosにmap, filter, reduceとか配列操作関数が欲しいよう
434:デフォルトの名無しさん
08/01/09 01:15:26
>>431
代入(=)じゃなくて連結(~=)したいんだ。
いちいちプロキシオブジェクト作るのは面倒だし、困ったものだ。
あと、配列とかにも演算があるんだから opCmp とか呼べりゃ良いのに・・・
ソート用に比較するときに == と < (または > ) の2回比較しなければいけないから困る。
細かいところで融通きかんよなぁ。
435:デフォルトの名無しさん
08/01/09 01:19:52
>433
Lisp屋さんか?それともPython屋さんか?
436:デフォルトの名無しさん
08/01/09 01:37:02
>>434
インデクサやスライサの複合代入がオーバーロードしたいって要望はずっと前からあるが、
実現される兆しはないな。プロキシオブジェクト返すしかなさそう。
TypeInfo使えば、プリミティブ型を含めて任意の型の比較が汎用的に出来るよ。
int[] x = [1, 2, 3], y = [1, 2];
writeln(typeid(int[]).compare(&x, &y));
437:デフォルトの名無しさん
08/01/09 14:08:13
java7で言語仕様に盛り込まれるというプロパティ仕様がかなり羨ましくてしょうがない。
お決まりの実装は自動生成してくれたり……をるたんも影響受けてくれないかなぁ。
438:デフォルトの名無しさん
08/01/09 17:02:35
>>437
詳細ちぼん
439:デフォルトの名無しさん
08/01/09 19:34:02
>>438
URLリンク(journal.mycom.co.jp)
あ、でもこれだと「フィールドとプロパティで名前がかぶるからフィールドに_つけなきゃ」
とかの悩みが解決できないなぁ……いや、内部からもプロパティでアクセスすりゃいいかな。
440:デフォルトの名無しさん
08/01/09 19:41:32
>>439
> 内部からもプロパティでアクセスすりゃいいかな。
継承に影響が出るから、別の意図が無ければそうすべきだよ。
441:デフォルトの名無しさん
08/01/09 20:09:00
>>224-226の話だが、eBook版が現地時間の1/7からゲット可能になってるらしいぞ。
URLリンク(www.dsource.org)
なんてのもできてた。
人柱レポ頼む。
442:434
08/01/09 22:58:21
>>436
おおお、そんな方法があったのか。ありがとう。
というか、インスタンスが同じかどうか調べる(x is y 式と同じ)ものだと思ってたよ。
opCmp は呼べないのにどういう仕組みになってんだろ。。
443:デフォルトの名無しさん
08/01/09 23:26:05
>>442
std.typeinfo以下に全部ソースあるから読んどくといいよ。
444:デフォルトの名無しさん
08/01/10 07:07:30
>>439
なるほど。 ありがとう
これはいい文法砂糖
445:デフォルトの名無しさん
08/01/12 03:01:09
>>353
アイ ウンコ ナウ
と読んでるでのは俺だけじゃないはず
446:デフォルトの名無しさん
08/01/12 09:48:44
お前だけだろw
447:デフォルトの名無しさん
08/01/13 05:07:50
ウンキングナウ!
448:デフォルトの名無しさん
08/01/14 16:06:46
動きないのかなあ
449:デフォルトの名無しさん
08/01/14 18:04:37
D forum からネタ
URLリンク(www.digitalmars.com)
450:デフォルトの名無しさん
08/01/14 18:40:17
WPFでウィンドウを表示するのには成功したんだが、
イベントの受け取りをどうするか…
451:デフォルトの名無しさん
08/01/14 19:27:53
std.threadにsleepがないんだが、どっか別の場所にある?
452:デフォルトの名無しさん
08/01/14 19:42:43
$ find std -name '*.d' -exec grep -H 'sleep' \{\} \;
std/c/time.d:void sleep(time_t);
std/c/time.d:void usleep(uint);
std/c/time.d:void msleep(uint);
453:デフォルトの名無しさん
08/01/14 19:51:30
㌧
今更だがphobos手抜きすぎる気がしてきた
454:デフォルトの名無しさん
08/01/14 21:50:08
言語仕様は素晴らしいが開発環境とライブラリが貧弱すぎて使い物にならないのがD。
455:デフォルトの名無しさん
08/01/14 21:52:41
言語使用はC++なみに複雑で全然素晴らしくない。
C++の焼き直しに過ぎない。
456:デフォルトの名無しさん
08/01/14 21:55:45
言語仕様が素晴らしいと思われるようにころころ言語仕様を変更してるから、
開発環境とライブラリが成熟しなくて、結局使い物にならないのがD。
457:デフォルトの名無しさん
08/01/14 22:00:35
C++のように現実的な限界を認めてさっさとライブラリや文法を
固めてしまった方がはるかに現実的なのに。
458:デフォルトの名無しさん
08/01/14 22:02:04
Dは実用言語を目指した実験言語です
459:デフォルトの名無しさん
08/01/14 22:04:47
こんなところでケチ付けても、をるたんは日本語の掲示板なんて見ないよ。
460:デフォルトの名無しさん
08/01/14 22:28:21
>>457
それはPython
461:デフォルトの名無しさん
08/01/14 22:34:55
来年で10年だし そろそろ固まってもいいころだと思うんだが
462:デフォルトの名無しさん
08/01/14 22:52:40
Dの初心者向け解説を一通り見た感想なんだけど。
C++のキモ過ぎに絶えられない人。
英語読めない人。
せいぜい趣味の範囲。
windowsが主でパソコン(PC)しか見えてない人。
それ以外mac, linux, unixにあんまり関心ない人。
C++に抵抗があって、java, C#以外を考えるなら、
objective-cでいいかなと思うけど、英語勉強しないとねw
Dなんて、いまだに実用(プロジェクト・個人でも)で使うのは怖くてできないし、
おぼえようにも仕様が複雑すぎ・リテラルが多すぎで、結局C++とかわんないw
ということで、C++と同じくwindows向けのオナニー言語ってことだと思った。
この辺が一向に流行らない理由じゃないかな。
ちなみに、dmcは結構好きだけど。
463:デフォルトの名無しさん
08/01/14 23:00:30
D は Windows 以外でも使えるが・・・。
464:デフォルトの名無しさん
08/01/14 23:05:00
ニュースグループ読んでる感じだと、非Windows環境での話題のほうが多いぞ
465:デフォルトの名無しさん
08/01/14 23:08:46
つか言語がwindows向けってどういうことだ
466:デフォルトの名無しさん
08/01/14 23:16:04
windows(とlinux)がターゲットだからまずwinからサポート・実装される。次が非windows。
でもパソコンがターゲットならvmのjavaかc#でいいよ。
次世代目指すとかデスクトップ(win, gnome)とかターゲットかと思えば、
その割には、dはguiとか標準で持ってないし、一体何をしたいんだが理解に苦しむ。
dを追いかけるよりも他の言語やunixを追いかけたほうが日本人にはいいと思った。
ハードならcや分野専用のカスタマイズ言語(cgとか)があるし。
一応、嘆き。
467:デフォルトの名無しさん
08/01/14 23:16:36
>>462
日本語でおk
468:デフォルトの名無しさん
08/01/14 23:18:13
デーモンとか書くの楽になるならDもいいんだけど
469:デフォルトの名無しさん
08/01/14 23:19:07
>467
おまえ馬鹿じゃね?
>>462の言ってることはめちゃくちゃ明解
470:デフォルトの名無しさん
08/01/14 23:20:05
>>465
PCが主体で、携帯とかPDAとかじゃなくて、デスクトップ向けってことです。
ほぼwindowsの牙城というか。
C++にGCが標準で搭載されれば(bohem gcでも)、Dの存在価値は薄くなるかなってw
471:デフォルトの名無しさん
08/01/14 23:22:50
正式版が出てから急にシェアが増えたのはどう説明するんだろ>>257
対してC++のシェアはDの伸び以上に減ってるんだよな
言語が増えた今、C++は用途が限定されたオナニー言語になりつつあるという事だ
472:デフォルトの名無しさん
08/01/14 23:33:07
C++ はプログラマのオナニー向けじゃなく、コミュニティのオナニー向けだろ。
俺は Boost のイカれ具合とそれを崇拝する信者どもに嫌気が指した。
473:デフォルトの名無しさん
08/01/14 23:35:06
なんだ自演がはじまったのか
474:デフォルトの名無しさん
08/01/14 23:36:16
Dの目的のなさも似たようなもんじゃないか?
どうせC++についていけないでDに逃げてきたんだろうし。
475:デフォルトの名無しさん
08/01/14 23:37:45
0xスレでやれ
476:デフォルトの名無しさん
08/01/14 23:38:00
C++は標準化委員会があるからまだいいほうだろ。
477:デフォルトの名無しさん
08/01/14 23:43:39
>>476
Boost の lambda とか言われたままに採用せずに、あんなもん言語仕様のひとつに組み込めよ、と思う。
なんでもかんでも template で generic programming って間違った進化だろ。
で、こういうこと言うとパラダイムシフトできないアホグラマがどうのとか。
スレ違いだからこのへんにするが。
478:デフォルトの名無しさん
08/01/14 23:45:23
C++についていけなかった香具師らはRubyに逃げた
479:デフォルトの名無しさん
08/01/14 23:47:58
>>477
まあ今の言語の群雄割拠は地球の歴史でいうと先カンブリア紀のようなもんだからなぁ
480:デフォルトの名無しさん
08/01/15 00:04:41
パーサーが実質世界に一つしかなくてしかもオープンソースというのは
C++ からしたら天国じゃないか
481:デフォルトの名無しさん
08/01/15 00:23:46
同じ事が近いコーディングコストで達成できるのであれば、言語仕様は小さい程いい。
何でもかんでも言語仕様に取り込みゃいいってもんじゃない。
482:デフォルトの名無しさん
08/01/15 00:28:54
>>481
構文や意味に誤りがあった場合にまともなエラー表示ができていない。
達成できてるとは言い難い。
483:デフォルトの名無しさん
08/01/15 00:30:20
コンパイラが実装しなけりゃ絵に描いた餅。
export の二の轍を踏むだけ。
484:デフォルトの名無しさん
08/01/15 00:32:13
Dの設計・言語使用に携わっている人たちが、そもそもC++についていけなかった件について。
485:デフォルトの名無しさん
08/01/15 00:32:45
export は実装が難しすぎたからだろ。
lambda の実装ごときに何の問題があると。
486:デフォルトの名無しさん
08/01/15 00:34:34
>>449
forumに書き込んでる暇があれば自分で移植しろという感じだな
487:デフォルトの名無しさん
08/01/15 00:35:32
この様子だと、Dは実用とか稼動とかとは程遠いですね。
けっきょくは、better c++ なんでしょうか。
また1年後ぐらいにこのスレにきますわw
488:デフォルトの名無しさん
08/01/15 00:36:50
>言語仕様は小さい程いい。
D見るとつくづくそう思うよ。
バグは言語仕様に対して指数関数的に増えるからな
const周りの仕様変更でfinalメンバ関数の挙動がおかしくなったりとか
そういうのにぶつかると絶望感感じるよ。
489:デフォルトの名無しさん
08/01/15 00:38:38
仕様が増えれば、それだけ実装コストがかかるのは当然だろ。
言語は実装されて初めて意味を持つんだから、普及させたけりゃ仕様は少ない方がいい。
さらに、覚える方も楽だしね。
さらに、D の設計思想にある 「構文解析と意味解析を分離する」 が達成されていない C++ で
新たに仕様を増やしたときの実装コストはいかほどのものかちったぁ考えようぜ。
boost をそのまま取り込むとなれば実装コストは名前ちょっといじる程度。
この差は非常に大きい。
490:デフォルトの名無しさん
08/01/15 00:41:29
>>477
仕様に組み込みたい気持ちは分かりますが、Cの言語仕様にラムダはいかんでしょ。
あなた、プログラム言語のことをちゃんと学んでないようですね。
パラダイムとかテンプレートもいいたいこと分かるんですけど、世の中にはもっとキモイのがいるんで、
そういうの見ると少しはC++のそれも理解できるかとw
正規表現で不定方程式を解く
491:デフォルトの名無しさん
08/01/15 00:45:32
それは理解できるが、lamda プログラミングは素晴らしい!なんて語りながら
現実があれじゃどうかと思うぜ。あんなのIOCCCに応募するようなコードだろ。
マクロでマイ言語作って叩かれた25年前から何も変わってない。
492:デフォルトの名無しさん
08/01/15 01:16:36
Cのコンパイラも書いたことない奴らがDの設計思想とかぬかすなよ
おこちゃまはwinでrubyでいいからw
493:デフォルトの名無しさん
08/01/15 01:17:26
Dスレにまでいつものが湧くようになったか。
スルーしとけ
494:デフォルトの名無しさん
08/01/15 01:17:43
windowsならvbaで決定だな。
495:デフォルトの名無しさん
08/01/15 01:19:57
>>491
ラムダは制御には向いてませんよ。Cは制御に向いてますよ。
あなたに必要なのは、そういうところだと思います。
496:デフォルトの名無しさん
08/01/15 01:20:02
>>487
仕事で使ってる俺から言わせてもらうと
実用とか稼働とかとはほど遠いから趣味で使うのがいいよ
あと1年後じゃ無理だから5年後においでw
497:デフォルトの名無しさん
08/01/15 01:22:07
>>484
誤れ!アンドレイ・アンドレスクに誤れ!
498:デフォルトの名無しさん
08/01/15 01:31:45
それにしても、クロージャ実現したことだし、
そろそろDにもラムダ記法導入して欲しいよね。
499:デフォルトの名無しさん
08/01/15 02:23:07
>>497
誤ってるのはお前の書いた名前だw
500:デフォルトの名無しさん
08/01/15 06:06:19
アインシュタインがオナニー言語を超えてるの、みたいな事を昔言ってた人が再び降臨したのか
501:デフォルトの名無しさん
08/01/15 06:38:16
更新があったのかと思ったじゃないか
あーもーつまんね
502:デフォルトの名無しさん
08/01/15 07:27:12
結局なんなの
実の無い話があっただけ?
503:デフォルトの名無しさん
08/01/15 07:40:38
オナニー文章の中には頻繁にオナニー呼ばわりが登場する、
という毎度の傾向がまた一つ見られただけです。
504:デフォルトの名無しさん
08/01/15 08:34:10
DMD 1.020 って事は GDC だとまだクロージャは使えないの?
505:デフォルトの名無しさん
08/01/15 18:09:03
URLリンク(shootout.alioth.debian.org)
これでもみておちつこうぜ
506:デフォルトの名無しさん
08/01/15 21:25:55
g++に負けるのかー
507:デフォルトの名無しさん
08/01/15 21:32:53
C++ ごとき風前の灯
URLリンク(shootout.alioth.debian.org)
コードが冗長過ぎだもんね
508:デフォルトの名無しさん
08/01/15 21:40:55
>>507
生温い
URLリンク(tinyurl.com)
509:デフォルトの名無しさん
08/01/15 22:34:47
HDDが消去されます
510:デフォルトの名無しさん
08/01/15 22:48:14
あるDLLからインポートライブラリ作って、ダイナミックリンクし、
このDLLの関数をmainから直に呼べば問題なく動くのに、
オブジェクト指向なラッパとして、クラスを作ってメンバ関数から呼ぶと起動すらできずに実行時エラー
「アプリケーションを正しく初期化できませんでした (0xc0000005)。」が出る。
このクラスをプログラム内で一回も使っていなくても、定義しただけで起動できなくなる。
こんな奇妙な現象に悩まされているのですが、一体どんな原因が考えられますか。
511:デフォルトの名無しさん
08/01/15 23:22:58
>>510
再現コード+DLLを、どっかにアップしたらどう
512:デフォルトの名無しさん
08/01/16 00:28:08
>>511
すみません。原因はわかってしまいました。
クラス定義があると、どうやらモジュールコンストラクタで使っているDLLよりも、
クラスのメンバ関数で使っているDLLが先にロードされて、
そのロード順の違いによって問題が出たり出なかったりするようです。
COM周りは本当によく分かりません。
513:デフォルトの名無しさん
08/01/16 12:41:58
jscriptをちょっとだけやったことがある程度なのですが、
Winsockで簡易的なHTTPサーバーを作ろうと思い、
ためしにCで書かれたサンプルをDにしてみているのですが、
sockaddr_in型からsockaddr型への変換のところで詰まりました。
サンプルは
URLリンク(www.geekpage.jp)
のものです。
どうすればsockaddr_in型からsockaddr型への変換ができるのでしょうか。
Cでは (struct sockaddr *)&addrで変換しているようです。
514:デフォルトの名無しさん
08/01/16 13:14:18
普通にcast(sockaddr *)すればいいんでない?
515:デフォルトの名無しさん
08/01/16 13:20:32
>>514
ああ、それっぽいことをしていたのに真っ先に試すべきそれをやってませんでした。。。
どうもです。
516:デフォルトの名無しさん
08/01/18 06:32:42
ヲルタンは1.0と2.0のコンパイラのソースをどうやって
管理してるんだろうなぁ
いつも更新同時にでるし。
#ifdefでわけてるだけなのかな
517:デフォルトの名無しさん
08/01/18 08:26:55
>>516
ソース嫁
といいつつ見てみたけど #if V2 で分けてるだけに見えるな
518:デフォルトの名無しさん
08/01/18 11:29:14
phobosに入れてもらおうと思ったらどうしたらいいのだろう
たまに誰かのがマージされてるみたいだけど
519:デフォルトの名無しさん
08/01/18 11:47:52
をるたんに直談判
520:デフォルトの名無しさん
08/01/18 19:08:18
518じゃないけど、
>>519
まじっすかwwwなぜdsourceにいったんだろうw
521:デフォルトの名無しさん
08/01/19 00:06:30
変数に対するfinal指定がなくなってる…
コンストラクタで一度だけ初期化できるフィールドってどうやって書けばいいんだ
522:デフォルトの名無しさん
08/01/19 00:10:21
finalとconstはinvariantと違って使い分けの基準が分かりにくい
523:デフォルトの名無しさん
08/01/19 00:11:32
const 関連ごちゃごちゃしすぎて D 2.0 使う気が起きないっす。
524:デフォルトの名無しさん
08/01/19 03:21:59
周辺ライブラリがきちんとconst/invariant修飾されるようになれば
使いやすくなると思うんだけどな
525:デフォルトの名無しさん
08/01/19 04:26:52
たしかにD2.0はまだ未成熟のように感じる。
最低でもconst/invariant関連の仕様がいい具合になるまでは
D1.0+Tangoで当面様子見するのがいいかも。
526:デフォルトの名無しさん
08/01/19 07:18:04
std.string内関数、引数がstringなのがうざすぐる
527:デフォルトの名無しさん
08/01/19 09:28:06
phobos自体、,009の新しいルールに則ってなくて一部コンパイル通らんしな…
528:デフォルトの名無しさん
08/01/19 09:54:35
それphobos2.libってどうやって作ってるの?
529:デフォルトの名無しさん
08/01/19 11:52:33
Dはてんこもり過ぎね?
誰かD--言語のドラフト書いてくれよ
530:デフォルトの名無しさん
08/01/19 13:42:25
>>526
同意。せめてin char[]にして欲しい。
おかげで無駄なキャストがわらわらと必要に
531:デフォルトの名無しさん
08/01/19 16:24:10
D:\foo\bar\hoge\..\..\abc\def.txtという相対指定も含んだパスから
D:\foo\abc\def.txtというパスを取得する簡単な方法はありませんか?
532:デフォルトの名無しさん
08/01/19 22:16:30
\ でsplitして .. があったら左側を消せば。
533:デフォルトの名無しさん
08/01/19 23:07:01
.\..\.\..\
とかがあるんじゃね?
とか打ってみたらリズムが良くてわらた
534:デフォルトの名無しさん
08/01/19 23:15:00
string shorten_path(string orig_path) {
string[] path = [];
foreach(dir; orig_path.split("\\")) {
if(dir == ".")
continue;
if(dir == ".." && path.length > 1) {
path.length = path.length-1;
continue;
}
path ~= dir;
}
return path.join("\\");
}
こんな感じでどうだろ
535:デフォルトの名無しさん
08/01/19 23:22:00
string normalizePath(string path) {
auto a = path.split(`\`), b = new string[a.length], idx = 0;
foreach(e; a) {
switch(e) {
case ".":
break;
case "..":
if(--idx < 0) throw new Exception("invalid");
break;
default:
b[idx++] = e;
}
}
return b[0 .. idx].join(`\`);
}
536:デフォルトの名無しさん
08/01/19 23:25:43
被ったorz
537:デフォルトの名無しさん
08/01/19 23:57:02
534だけど
if(dir == ".." && path.length > 1) {
↓
if(dir == ".." && path.length > 0 && path[$-1] != "..") {
でした。
538:デフォルトの名無しさん
08/01/20 13:03:37
>>534-537
どうもです。
パスの正当性チェックを加えて使います。
539:デフォルトの名無しさん
08/01/20 14:37:06
>>538
ま、WindowsならそのものずばりなAPIがあったりするが。
540:デフォルトの名無しさん
08/01/20 15:01:16
>>539
似たような処理で、linuxやwebの不正なパスも調べようとしているので。
もしできれば参考までにその関数名を教えてくれると助かります。
541:デフォルトの名無しさん
08/01/20 17:16:46
>>540
PathCanonicalize()
あ、不正かどうかのチェックではなく、相対指定の削除の方な。
542:デフォルトの名無しさん
08/01/20 20:56:30
>>526, 530
dout.printf("%d\n".dup, 10);
.dupうぜええ
543:デフォルトの名無しさん
08/01/20 22:16:25
>>542
でじこ・うさだ・ぷちこ
544:デフォルトの名無しさん
08/01/21 06:41:00
DMD 2.010 & 1.026 リリース
545:デフォルトの名無しさん
08/01/21 10:03:31
バグフィックスが主だね
546:デフォルトの名無しさん
08/01/21 11:28:13
pureとな
何に使うんだろう
547:デフォルトの名無しさん
08/01/21 11:33:35
まさかpure関数か?
548:デフォルトの名無しさん
08/01/21 11:56:36
What's New for D 2.010
Jan 20, 2008
New/Changed Features
opAssign can no longer be overloaded for class objects.
WinMain and DllMain can now be in template mixins.
Added pure keyword.
549:デフォルトの名無しさん
08/01/21 17:30:10
とりあえず1.026でwin32が通る。
550:デフォルトの名無しさん
08/01/22 01:38:01
win32を使おうとすると出る>>110だが、関数ポインタ型の宣言が使っている所よりも後ろになっているところがあって、それが原因みたい。
Func func;
alias void function() Func;
というふうになっていると、そこでエラーになる。
rpcndr.dとか、rpcdcep.dとか。
だから、それを解消するように書き換えてやれば、使えるようになる。
alias void function() Func;
Func func;
というように。
まあ、ちょっと調べれば分かることだけど、とりあえず報告。
551:デフォルトの名無しさん
08/01/22 01:43:32
Bugs Fixed
* Bugzilla 1319: compiler crashes with functions that take const ref arguments
* Bugzilla 1697: Internal error: ..\ztc\cgcod.c 2322 with -O
* Bugzilla 1700: ICE attempting to modify member of const return struct
* Bugzilla 1707: '==' in TemplateParameterList in IsExpression causes segfault
* Bugzilla 1711: typeof with delegate literal not allowed as template parameter
* Bugzilla 1713: foreach index with tuples and templates fails
* Bugzilla 1718: obscure exit with error code 5
* Bugzilla 1719: Compiler crash or unstable code generation with scoped interface instances
* Bugzilla 1720: std.math.NotImplemented missing a space in message
* Bugzilla 1724: Internal error: toir.c 177
* Bugzilla 1725: std.stream.BufferedFile.create should use FileMode.OutNew
* Bugzilla 1757: there is an fault in phobos windows api interface
* Bugzilla 1762: Wrong name mangling for pointer args of free extern (C++) functions
* Bugzilla 1767: rejects-valid, diagnostic
* Bugzilla 1769: Typo on the page about exceptions
* Bugzilla 1773: excessively long integer literal
* Bugzilla 1779: Compiler crash when deducing more than 2 type args
* Bugzilla 1783: DMD 1.025 asserts on code with struct, template, and alias
* Bugzilla 1788: dmd segfaults without info
* D.announce/11066: Re: DMD 1.025 and 2.009 releases
552:デフォルトの名無しさん
08/01/22 01:44:06
ぺたぺた
やっと最初のやつ直ったのな
553:デフォルトの名無しさん
08/01/22 12:44:34
Open Tech Press | プログラマの生産性を高める新たな言語「D」
URLリンク(www.itmedia.co.jp)
これでD言語にも人気が出てくるといいな。
554:デフォルトの名無しさん
08/01/22 17:34:28
>>541
へー、WindowsAPIってOSの機能を使うだけって思ってたんですがこういう関数も結構あるんですね。
ありがとです。
555:デフォルトの名無しさん
08/01/22 18:26:52
functionをdelegateに変換!みたいなことってできないの?
556:デフォルトの名無しさん
08/01/22 18:37:44
>>553
>GDCはDMDとは違って今のところはまだ標準に100%の準拠はしていない。
標準?そんなものあったの?
557:デフォルトの名無しさん
08/01/22 18:50:09
>>556
ウォルたんのページに書いてるのが標準。ただし、頻繁に変わるw
558:デフォルトの名無しさん
08/01/22 18:56:03
>>555
delegateは実はただの構造体のようなもの。
TR delegate(TA) toDelegate(TR, TA...)(TR function(TA) fn) {
typeof(return) dg;
dg.ptr = null;
dg.funcptr = fn;
return dg;
}
559:デフォルトの名無しさん
08/01/22 19:07:24
>>558
それスタックずれる
560:デフォルトの名無しさん
08/01/22 19:13:03
じゃあこうかな
TR delegate(TA) toDelegate(TR, TA...)(TR function(TA) fn) {
return delegate TR(TA args){ return fn(args); };
}
561:デフォルトの名無しさん
08/01/22 21:49:56
private struct FunctionCaller(R, A...)
{
R call(A args)
{
return (cast(R function (A))this)(args);
}
}
R delegate (A) todg(R, A...)(R function (A) func)
{
FunctionCaller!(R, A) c = void;
auto res = &c.call;
res.ptr = cast(void*)func;
return res;
}
562:デフォルトの名無しさん
08/01/23 06:33:07
>>558-561
なんでそんなに詳しいんだ
563:デフォルトの名無しさん
08/01/23 12:23:38
>>557
そのアップデート速度がDの魅力。
仕様が10年も変わっていないC++には真似ができない。
ただ、最近はDMDの更新が遅いと思い始めた。病気だろうか。
564:デフォルトの名無しさん
08/01/23 13:49:37
>更新が遅い
超わかりすぎるw
565:デフォルトの名無しさん
08/01/23 14:07:56
機能追加されるたびに「迷走しすぎじゃね?」とか書き込むけど、バグフィックス中心の更新だとなんか寂しい俺は既に完全調教されているのか。
566:デフォルトの名無しさん
08/01/23 15:29:41
>>563,565
よう俺
567:デフォルトの名無しさん
08/01/23 16:56:03
さびしがりやさんかわいい
568:デフォルトの名無しさん
08/01/23 21:17:05
>>550
その手直しされたファイル群をうpしてくれ
569:デフォルトの名無しさん
08/01/23 22:08:47
if (s[$ - 2 .. $] == "\r\n")
if (s[$ - 1] == '\n' && s[$ - 2] == '\r')
文末にCRLFがあるか調べるだけの条件式ですが、
これらは似たようなものなのに、後者の方が6倍ほど速くなるのは何ででしょうか?
570:デフォルトの名無しさん
08/01/23 22:23:29
>>569
文字列の比較か整数の比較か。
571:デフォルトの名無しさん
08/01/23 23:27:42
>>569
一番大きいのは配列比較関数を呼び出すオーバーヘッドじゃなかろうか。
572:デフォルトの名無しさん
08/01/24 01:14:43
>>570-571
いろんな理由があるんですね。
でも、どっちにせよ10000000回まわしてやっと差が二秒出る程度なのであまり気にしないことにします。
573:デフォルトの名無しさん
08/01/25 10:40:33
DでつくったCOMサーバにTypelibを埋め込むにはどうしたらいいんだぜ?
574:573
08/01/25 10:49:57
言葉足らずすんません
DでつくったCOMをC#からつかってみようと思ったんだけど、
登録できなくて、いろいろしらべたら、タイプライブラリが組み込んでないからだと
思うようになったんです。
以下C++でDのサンプルにあるdserver.dを呼び出す方法です
GUID CLSID_Hello = { 0x30421140, 0, 0, {0xC0,0,0,0,0,0,0,0x46} };
GUID IID_IHello = { 0x00421140, 0, 0, {0xC0,0,0,0,0,0,0,0x46} };
HRESULT hr;
class IHello : IUnknown {
public:
virtual int STDMETHODCALLTYPE Print()= 0;
};
IHello* pIHello;
hr=CoCreateInstance( CLSID_Hello, NULL, CLSCTX_ALL, IID_IHello, (void**)&pIHello);
pIHello->Print();
575:デフォルトの名無しさん
08/01/25 14:31:29
IDLを書いて、midlでタイプライブラリにコンパイルして、typelib型のリソースとしてリンクすればいいんじゃなかろうか。
576:デフォルトの名無しさん
08/01/25 16:28:14
Ubuntu (amd64) 上でのGDC (amd64) で、Tango使えますか?
↓ここには、バイナリはi686用しか用意してないって書いてますが...
URLリンク(www.dsource.org)
ソースから自力コンパイルするといいのかしらん。
577:573
08/01/25 16:46:13
>>575
VisualStudioで適当なActiveXプロジェクトをつくって
そこでできたresファイルをDMDにくわせたら・・・
うをを、登録できた!
これで575さんの言うとおりの事をやればいける予感です
ありがとうございます!
578:デフォルトの名無しさん
08/01/25 19:00:57
pure関数ってconst関数となにか違うの?
579:デフォルトの名無しさん
08/01/25 19:14:37
結果が引数だけに左右される関数。
CTFE出来る関数は純粋関数。
580:デフォルトの名無しさん
08/01/25 23:55:01
副作用が無い関数か。
ところでpureキーワードの説明、どこに載ってる?
581:デフォルトの名無しさん
08/01/26 00:02:56
>>580
news://news.digitalmars.com:119/fn1p18$aem$1@digitalmars.com
> > Thanks! Are there any short-term plans to do anything with 'pure',
> > or are you just reserving the keyword (as was done for 'macro')?
>
> It's just to reserve it.
582:デフォルトの名無しさん
08/01/26 08:24:35
emacsのflymake使えるの?
使えたら設定の仕方教えてください。
583:デフォルトの名無しさん
08/01/26 13:36:06
【レス抽出】
対象スレ: D言語 Part16
キーワード: の?
抽出レス数:26
584:デフォルトの名無しさん
08/01/26 13:39:12
>>582
ちょっとはぐぐればいいのに
585:デフォルトの名無しさん
08/01/26 13:44:20
教えてください。
と丁寧に頼む割りに
使えるの?
というたずね方。
つまり
教えてください。
は形だけ丁寧にしたってことだね><
586:デフォルトの名無しさん
08/01/26 13:48:30
>>585
細かいぞ、と初レス
587:デフォルトの名無しさん
08/01/26 14:12:01
kmonos.net/alang/d/ がみえないよ(TT)
ど、どうしたのかなぁ・・・
588:デフォルトの名無しさん
08/01/26 14:30:55
>>587 少しはさがせよw
URLリンク(www.kmonos.net)
URLリンク(www.kmonos.net)
589:デフォルトの名無しさん
08/01/26 14:36:51
>>588
いやいや、更新中だったと思われ
/2.0フォルダが無かった
乙です。お世話になってます。>inaba氏
590:デフォルトの名無しさん
08/01/27 15:33:08
久々に一日みっちりコード書いたけど、
string回りでエラー出すとinvariant(char)[]がうじゃうじゃ見えるのが鬱陶しいー。
文字列=>文字列の連想配列とか使うともうわけわからん。
stringがクラスになる日はもう来ないのかなぁ……
ところでDで設定ファイルを扱うとなると、何が定番だろう。
591:デフォルトの名無しさん
08/01/27 15:40:04
iniとかyamlとかでいいんじゃね
592:デフォルトの名無しさん
08/01/27 17:41:01
ふとC++を知っている人にD言語のコードを説明するとき、ベースは似たようなものだから説明も少しでいいか…と思ってたら、
withだのsyncronizedだのscopeだの型推論だのプロパティだのとD節全開な自分のコードがそこに広がっていた。
(C++やJavaさえ知っていれば)習得が容易というのはDの売り文句なはずだけど、
誰かヲルタたんを止めないと…この調子でいったら……とおもった。
まぁ個人的にはバッチコイだけど。
593:デフォルトの名無しさん
08/01/27 17:49:42
syncronizedはJava、withはVBやJavascriptにあるから、それなりに知名度あると思う。
scope属性はC++のauto属性、scope文は他の言語では見たこと無いなぁ。
594:デフォルトの名無しさん
08/01/27 18:13:15
scope 文は C# の using 文じゃないの?
595:593
08/01/27 18:30:47
間違えた。scope文じゃなくてスコープガード文ね。
596:デフォルトの名無しさん
08/01/27 19:06:04
>>590
全然関係ないけど、うちの同僚が「久々にムッチリコード書いたぜ」ってメールだしてきたのを思い出してワラタ
597:デフォルトの名無しさん
08/01/27 21:27:15
>>595
boostにスコープガードなかったっけ。
598:デフォルトの名無しさん
08/01/27 23:19:11
エントリポイントってmain固定?
599:デフォルトの名無しさん
08/01/27 23:28:13
main
WinMain
DllMain
の3つじゃなかったかな
600:デフォルトの名無しさん
08/01/29 08:40:53
D1→D2の違いまとめ、だそうだ
URLリンク(www.digitalmars.com)
601:デフォルトの名無しさん
08/01/29 17:32:47
Version D 2.011 Jan 25, 2008
New/Changed Features
* Re-enabled auto interfaces.
Bugs Fixed
* Bugzilla 1072: CTFE: crash on for loop with blank increment
更新内容が最近寂しいのは、そろそろ3.0ですよってことなのだろうか
602:デフォルトの名無しさん
08/01/29 17:46:00
>>601
>そろそろ3.0ですよってことなのだろうか
だめだはやくウォルタンを止めないと・・・
603:デフォルトの名無しさん
08/01/29 18:30:36
D2は黒歴史ってことなのか
604:デフォルトの名無しさん
08/01/29 18:54:58
その問いにはまずD1.0が黒歴史か否かを答えねば
605:デフォルトの名無しさん
08/01/29 19:54:59
早くtangoを標準にしてくれ...
606:デフォルトの名無しさん
08/01/29 20:00:45
tangoは命名規則きもちわるいんだよなあ
607:デフォルトの名無しさん
08/01/29 20:58:43
だよなー
どうして推奨の命名規則を守らないのか
訊いてみたいが言葉の壁ががが
608:デフォルトの名無しさん
08/01/29 21:05:01
auto interfaceってなんだっけ。
609:デフォルトの名無しさん
08/01/30 00:00:09
tangoキモいキモい言いながら、実際に使ってみるとphobosよりもいい感じなんだよなぁ
610:デフォルトの名無しさん
08/01/30 00:08:47
tangoはStdoutのopCallのオーバーロードがきもすぎ。
C++のシフト演算子よりも寒気のする記法があるとはおもわなんだ。
611:デフォルトの名無しさん
08/01/30 02:05:01
>>610
>C++のシフト演算子よりも
そんなまさか
612:デフォルトの名無しさん
08/01/30 02:32:17
>>609
そうなんだあ・・・勉強してみようかな
613:デフォルトの名無しさん
08/01/30 02:35:20
おまいらキモイキモイ言いたいだけちゃうんかと
614:デフォルトの名無しさん
08/01/30 03:38:33
opCall使わないほうのやつなかったっけ?
615:デフォルトの名無しさん
08/01/30 07:10:43
foo("")(1)(2)(3)(4)(5); みたいな形だっけ?
616:デフォルトの名無しさん
08/01/30 13:21:17
Stdout("foo")(bar)とかもう何ひとつ分からない。
「標準出力に"foo"、barを書き込む」って言わせてほしいのに、
「barを"foo"を標準出力したものする」と言わされるという不思議。
あ、なんか書いてて「標準出力って動詞じゃね? ”標準出力する”て自然じゃん」て思えてきた……。
「"foo"を標準出力先する」 うん、これならちゃんと不自然だ。
んあ? API Index見たら、tango.group以下のだけちゃんと小文字だな。
tango.group.collectionならtango.util.collection以下を全部public importするのか。ほほー。
617:デフォルトの名無しさん
08/01/30 13:45:39
実際はこういうことをやってるだけなんだよな
auto o = Stdout(1);
o = o(2);
o = o.newline();
o = o(3);
o.newline();
618:デフォルトの名無しさん
08/01/30 13:47:59
newlineをメソッドにしちゃうあたり、神経を疑うわ
619:デフォルトの名無しさん
08/01/30 14:39:47
無理にopCallのを使わなくても、tango.io.Print 使えばC#形式で使える。
620:619
08/01/30 14:52:34
すまん。tango.io.Stdout だった。classがtango.io.Printな
621:デフォルトの名無しさん
08/01/30 19:48:19
2.011ってどこにあるの
622:デフォルトの名無しさん
08/01/30 19:49:55
をるたんのマシン
623:デフォルトの名無しさん
08/01/31 17:09:33
2.011は落とさせる気はないのか
624:デフォルトの名無しさん
08/01/31 17:18:11
まえもあったな、こんなこと。
625:デフォルトの名無しさん
08/01/31 17:21:11
作りかけので更新して気づいてないんじゃね。
それか気づいてても直すの面倒なだけか。
626:デフォルトの名無しさん
08/01/31 17:44:50
D2.0でコンパイル通るGUIライブラリないかね。
Winだけで動けばいいから、あまりごてごてしてなくて、
普通にWinAPIのオブジェクト指向ラッパみたいなのでも構わないんだが。
627:デフォルトの名無しさん
08/01/31 20:53:43
>>626
豊富な日本語ドキュメントもほすぃ
628:626
08/01/31 22:05:19
どう探しても無いみたいだから、自分で作るかなあ。
激しく車輪の再発明なわけだが、勉強にはなりそうだし…
時代はWPFに遷りかけてるのに一体何をやってるんだか。
629:デフォルトの名無しさん
08/01/31 22:16:13
>>628
完成したころにD3.0が…
630:デフォルトの名無しさん
08/01/31 22:57:26
さっきDFLとWinAPI同時に使おうとしたらエラー出て使えなかった。
SetWindowsHookExとDFLのフォームを使いたかったんだけどなぁ。
ちなみにWinAPIってのは
URLリンク(www.dsource.org)
を利用した方ね。tango内のWin32ではなくて。
...あ、static importすればいいのか。
631:630
08/01/31 22:59:50
↑なんでstatic importだよw
そうじゃなくて「選択 import」ね。
でもstatic importも選択importも使ったこと無いなぁ。
632:デフォルトの名無しさん
08/02/01 01:25:04
バージョン1.026とbinding win32apiだけでコンパイルできる
GUIライブラリを使わないでwin32apiだけを使ったウインドウをただ表示するだけのサンプルコードはどこかにありませんか?
633:デフォルトの名無しさん
08/02/01 11:14:51
>>632
わなDのが近い。書庫の展開とかやってるけど、main関数はまんま。
つか、その条件ならDじゃなくて、C/C++のサンプルコード探したほうがいいんじゃね?
634:デフォルトの名無しさん
08/02/01 15:28:53
>>632
URLリンク(www.kmonos.net)
635:デフォルトの名無しさん
08/02/01 17:39:16
>>634
そこからWin32のバインディングをダウンロードしたいのですが
やりかたがわかりません・・・
TortoiseSVNでやってみてるのですが・・・
636:デフォルトの名無しさん
08/02/01 18:22:12
あー、あれね。俺も迷った。←SVNよく分からない
ダウンロードは
URLリンク(www.dsource.org)
の一番下のDownload in other formats: Zip Archiveから出来る。
trunk以下すべてが入ってるけどそこからWin32だけ抜き出せばOK
trunk/win32をブラウザで開いてもZip Archiveのリンク無くて迷った。
637:636
08/02/01 18:30:15
ちなみにあれってSVN使えばDL出来るのかな。一応試したんだけどエラーばかりだった。(自分の操作が間違ってた可能性大)
それと今exeファイルのアイコンを変える方法探してるんだけど。。。無理?だよねぇ。
外部ツール使って書き換えでもいいけど、コマンドラインから使えるタイプのものってないだろうか。
638:デフォルトの名無しさん
08/02/01 18:40:14
>>636
ををっそんな小さなところに!
ありがとうございます
これすごいですね、DirectX10まである
639:デフォルトの名無しさん
08/02/01 18:40:34
>>637
URLリンク(www5.atwiki.jp)
これ? でいいんかな。試してないんでよく知らんが。
640:デフォルトの名無しさん
08/02/01 18:51:33
svn co URLリンク(svn.dsource.org)
641:デフォルトの名無しさん
08/02/01 19:00:34
ここで>>550氏の出番ですよ
642:636
08/02/01 19:02:03
>>639
サンクス!これで出来た。dsssはresの扱い方知らないとか言ってきたけどw
643:636
08/02/01 19:17:50
>>640
なるほどアドレスが違ったのか。そのままwww.dsource.org/でコマンド打ってたらそりゃ無理だ罠。
644:636
08/02/01 19:34:46
dsssでも以下のようにするとresをつけれました。
dsss build main.d -L/RC:test.res
645:デフォルトの名無しさん
08/02/01 19:36:41
某所にあったシリアライザーをちっとだけ修正してみました
{{は.diになったときのエラーよけ
ubyte[] serialize(T)(in T t)
{
ubyte[] rv;
static if( is(T==struct) ) {{
foreach(x;t.tupleof)
rv~=serialize(x);
}} else
static if( __traits(isIntegral,T) ) {{
rv=(cast(ubyte*)[t].ptr)[0..T.sizeof];
}} else
static if(__traits(isStaticArray,T)) {{
rv=cast(ubyte[])t;
}} else
static if(is(T U:U[][])) {{
rv=serialize(t.length);
foreach( v; t) {
rv~= serialize(v);
}
}} else
static if(is(T U:U[])) {{
rv=serialize(t.length) ~ cast(ubyte[])t;
}} else {{
assert(0,"unsupported");
}}
return rv;
}
646:デフォルトの名無しさん
08/02/01 19:37:10
template ReturnType(T)
{
static if(__traits(isStaticArray,T) && is(T U:U[])) {
alias U[] ReturnType;
} else {
alias T ReturnType;
}
}
ReturnType!(T) deserialize(T)(ubyte[] t)
{
ubyte* ptr = t.ptr;
return _deserialize!(T)(ptr);
}
647:デフォルトの名無しさん
08/02/01 19:37:54
private ReturnType!(T) _deserialize(T)(ref ubyte* t){
ReturnType!(T) rv;
static if(is(T==struct)) {{
foreach(i,x;rv.tupleof) {
static if(__traits(isStaticArray,typeof(x)))
rv.tupleof[i][]/*x[]=*/=_deserialize!(typeof(x))(t)[];
else
rv.tupleof[i]/*x=*/=_deserialize!(typeof(x))(t);
}
}} else static if(__traits(isIntegral,T)){{
rv=*cast(T*)t;
t+=T.sizeof;
}} else static if(__traits(isStaticArray,T)&&is(T U:U[])){{
rv=cast(U[])t[0..T.sizeof];
t+=T.sizeof;
}} else static if(is(T U:U[][])){{
int len = _deserialize!(size_t)(t);
rv.length= len;
foreach( i; 0..len) {
rv[i]= _deserialize!(U[])( t);
}
}} else static if(is(T U:U[])){{
int len = _deserialize!(size_t)(t);
rv= (cast(U*)t)[0..len];
t+=len*U.sizeof;
}} else {{
assert(0,"unsupported");
}}
return rv;
}
だれか連想配列たのむ
648:デフォルトの名無しさん
08/02/01 20:04:16
>>647
単に長さを最初に入れて、キーと値を交互にserializeして詰めていけばおkじゃね?
649:デフォルトの名無しさん
08/02/01 22:04:22
こういうの見るとC++はつらかったな・・・と思いだす
650:デフォルトの名無しさん
08/02/01 22:36:59
>>633-634
どうもです。
そこの気合いの入った例のコードをとりあえずコンパイルしてみました。
何度かエラーが出たりしましたが何とかコンパイルできました。
出たエラーは
tchar.dのtc.TtoW().toUTF8()の部分。
no property 'toUTF8' for type 'int'といわれてしまった。
これはほかのサンプルソースを拾ってきて学習しているときにも、同様の形式でよく出た。
javascriptでこういう書き方を良くやったけど、出来ないのかな?
toUTF8(TtoW(tc))にしたらコンパイルは通った。
後はインポートするファイルがどれかわからなかったのと、
リンクするファイルもどれかわからなかった。
で、コンパイルのコマンドラインはtcharを同じディレクトリにおいて
dmd test tchar shell32.lib win32.lib main.def -version=Unicode
で
import win32.core;
import win32.shellapi; // DragQueryFile 等
import tchar;
import std.windows.charset;
をインポートしたら通った。
tchar.dの方は
module tchar;
import win32.windef;
import std.utf;
import std.string;
private import win32.winbase;
で通った。