dmd v2.063がリリースされました! 主な変更点を挙げていきます。
・foreachのインデックスがデフォルトで参照じゃなくなった
下のようなコードの場合、
void main()
{
foreach(i; 0 .. 10)
{
i = 9;
}
}
今までは、iが暗黙的に参照だったので、iに何らかの代入を行うとループ回数が10になりませんでした。 が、参照ではなくなったので、きっちり10回ループするようになりました。 参照にしたい場合、ref iと書きます。
void main()
{
foreach(ref i; 0 .. 10)
{
i = 9;
}
}
・代入されるまで連想配列に値が追加されないようになった
今までは、
void main()
{
int[int] aa;
assert(aa[5] == 0) // work in v2.062 / RangeError in v2.063
}
と、参照された時点で値が存在していない場合、追加されデフォルト初期化されてました。 v2.063になって、上のようなコードでRangeErrorが投げられるようになりました。
・コンストラクタを持たないclassのnewや配列のdupで作ったオブジェクトをimmutableに暗黙的キャスト出来るようになった
class C{}
void main()
{
immutable C c = new C();
immutable int[] a = [1, 2].dup;
immutable C[] cs = [new C(), new C()].dup;
}
・is式がちょっと改善された
・「-main」が追加された
・T[]からT*への暗黙キャストが無くなった
・MODULEとFUNCTIONとPRETTY_FUNCTIONの追加
・構造体が、ビット比較ではなくメンバー比較されるようになった
・UFCSがローカルimportでも動作するようになった
・関数内にテンプレートが書けるようになった
こんな感じです。 その他の変更はここに載っています。
担当:美馬(まだまだ変わっていくdmd)