【D言語】dmd v2.063がリリース【dmd】

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*への暗黙キャストが無くなった

MODULEFUNCTIONPRETTY_FUNCTIONの追加

構造体が、ビット比較ではなくメンバー比較されるようになった

UFCSがローカルimportでも動作するようになった

関数内にテンプレートが書けるようになった

こんな感じです。 その他の変更はここに載っています。

担当:美馬(まだまだ変わっていくdmd