2006-08-01から1ヶ月間の記事一覧

v0.166

D言語の新バージョンです。 とりあえずメンバ関数テンプレート最高とだけ。 これで変態チックなコードの幅が広がりました。 あと、lazyという遅延評価専用の予約語が登場。 この結果 exp -> exp delegate()は消えました。 ただ、遅延評価をさらに構造体に入…

可変長テンプレート関数

D

D言語の関数テンプレートはこういう書き方ができません T[] array(T)(T []dgs...){ return dgs.dup; }まぁ嫌だけど仕方がないかと思っていましたけど、 こういう誤魔化し方が通用するみたいです。 T[] array(T)(T a,T []dgs...){ return a ~ dgs; }インチキ…

D言語の遅延評価は複数回評価すると副作用も複数回生じます。 そういう評価方法もありとは思いますがあまり好きじゃないです。 そういうわけで値をキャッシュしてみた。 T delegate()lazy(T)(T delegate() dg){ struct lazy_t{ union{T delegate()dg;Object …

さらに

D

某所でも紹介されていたscaseとcondもせっかくだから、値を返すように。 void f(T)(T[]...)は無理なので適当に~を使って回避。 struct Pair(F,S){ F first; S second; Pair[]opCom(){return this[0..1];} } Pair!(F,S) make_pair(F,S)(F f,S s){ Pair!(F,S)r…

dmd v0.165

D

ひゃっほー新バージョンは相変わらずヘンテコだなぁ。 とりあえず、boost::spiritっぽいコードが手軽に書けて素敵 id:shinichiro_h:20060822 最後に評価した値を返すifとかはテンプレート関数との併用でどうでしょ? T if_(Pred,T)(Pred delegate()p,T deleg…