shinichiro_hの日記

2007-03-26

1.010 22:06

readln に目をひかれがちですが、 ClassInfo#create が結構おいしい。 create(...) にはしてくれないものかな。

class C {
    void p(){ printf("C\n"); }
}
class D : C {
    void p(){ printf("D\n"); }
}

T clone(T)(T t) {
    return cast(T)t.classinfo.create;
}

void main() {
    C c = new C();
    C d = new D();
    c.p;
    d.p;
    c = clone(d);
    c.p;
}

これで C D D と出る。

なんか cast(T) とか書いてて共変戻り値あってもいいんじゃないかとか思った。

nihaniha2007/03/26 22:29一体どこからそんなものを…
火星のドキュメントからClassInfoが消えているんですが何かの前兆なんでしょうか。

haru-sharu-s2007/03/27 00:50http://www.kmonos.net/alang/d/comparison.html
共変の戻り値はあるはずなんですけどね

shinichiro_hshinichiro_h2007/03/27 01:13あ、共変戻り値あるんですね。そしてこの場合あっても全然意味ないですね。ボケてました。ご指摘感謝です。

k.inabak.inaba2007/03/27 13:14cast(T)を消すには、ClassInfoクラスがテンプレートになってて、かつJavaのGenericsみたいなvariance指定があれば…ですね。

2007-03-22

自分を返す関数 13:44

まじでー

i@um ~/test/d> cat retretret.d
typedef typeof(F) function() F;
F f() {
    printf("hoge\n");
    return &f;
}
void main() {
    f()()()()()()()();
}
i@um ~/test/d> gdc retretret.d
i@um ~/test/d> ./a.out
hoge
hoge
hoge
hoge
hoge
hoge
hoge
hoge

via http://d.hatena.ne.jp/ytqwerty/20070321#c1174504538 & http://d.hatena.ne.jp/h_sakurai/20070322#p1

DMD 1.009 だと通らないな 13:52

通ったのは gdc-0.22 (dmd 1.004)

後で遊ぶ。

nihaniha2007/03/22 22:41おおもう食いついてますねさすがです。自己言及的なテンプレートに通じるものがありますね。
普通はclass F{F opCall()}とかするんでしょうか。DMD1.009で通らないのは悲しいことですね。

2007-03-11

む、よく見ると 22:35

* Updated lib to insert COMDATs into symbol table.

ってのが 1.007 で入ってるんですね。

http://www.interq.or.jp/chubu/r6/reasm/PE_FORMAT/5_5_6.html

別に面白くもなさそう、かな。

2007-03-08

flectioned 15:04

http://www.kmonos.net/alang/wnd/topics/flectioned.ja.html

こんなのできてたんだなー。コイツはナイスだ。えせマカーとしては Mach-O も対応させてみるかなぁ。

nihaniha2007/03/09 19:27おお何時のまにこんな便利なものが。余裕でテンプレートの所しか見てなかったので気づきませんでした。

2007-03-02

おおおお D Group 使われてた! すっかり存在忘れてました!! D Group は本当にあったんだ!

というわけでなんか書いてみます。

返り値とか template 妄想 12:26

http://dprogramming.g.hatena.ne.jp/kurimura/20070224

を見てて、

template (T, U) T convTo(U u) { ... }

int main() {
  int i = convTo("123");
  auto a = convTo("123"); // エラー。にいちゃんそらムリや
}

とか書けるとどうかと思った。逆方向に型伝播させるというか。

TODO: 次はもう少し生産的なことを書く

12:40

Perl に毒されている気がした。

kurimurakurimura2007/03/02 18:45C++もDも引数の型しか推論してくれませんからねぇ。
帰り値の型も推論してくれれば良いのに。
あ、というか、帰り値の型でオーバーロード出来ないC++から由来するの欠陥ですね。
この辺を解決してくれれば...(以下どうでもいい事を延々と妄想しているので省略