前回追加した機能が次のバージョンでは削除される.
それが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
そして今回の熱い更新,メンバ関数テンプレート!!
とうとうやったね!
こっちは次回触れよう.