...ing logging 4.0

はてなブログに移行しました。D言語の話とかいろいろ。

DMD 0.166

前回追加した機能が次のバージョンでは削除される.
それがD言語

What's New for D 0.166
Aug 30, 2006
New/Changed Features

  • Upgraded zlib from 1.2.1 to 1.2.3 per Bugzilla 286
  • Removed implicit conversion to delegates, except in the case of typesafe variadic arguments.
  • Replaced with lazy parameter storage class per Tomasz Stachowiak's suggestion D/41633.
  • Incorporated Oskar Linde's patches to support member templates.

「式からデリゲートへの暗黙の変換」がなくなって,遅延評価専用の新しい予約語 lazy が追加された.
もう一度,遅延評価を試してみた.
1命令だったら関数の引数に lazy が付くだけか.
2命令だったら暗黙の変換が行われないから, delegate void() { someFunctions(); } () というように () が必要なんだなあ,たぶん.

import std.stdio;

void lazyEval(lazy void op)
{
    writef(">");
    op();
    writefln();
}

void someFunc(int i)
{
    writef(i);
}

void main()
{
    // 普通に
    lazyEval( someFunc(0) );
    // 2命令の場合はこれでもいいが気に入らない
    lazyEval( ( someFunc(1), someFunc(2) ) );
    // こうするとなぜか実行されない
    lazyEval( { someFunc(3); } );
    // 関数呼び出しの形だとOKみたい
    lazyEval( { someFunc(4); }() );
    // もちろん2命令でもOK
    lazyEval( { someFunc(5); someFunc(6); }() );
    // 省略せずに書くとこう
    lazyEval( delegate void() { someFunc(7); someFunc(8); }() );
}

出力はこうなる.

>0
>12
>
>4
>56
>78

そして今回の熱い更新,メンバ関数テンプレート!!
とうとうやったね!
こっちは次回触れよう.