...ing logging 4.0

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

dmd 0.168

http://f17.aaa.livedoor.jp/~labamba/

  • デリゲートに.ptrプロパティを追加
  • ネストされたクラスのインスタンスに.outerプロパティを追加
  • スタック変数を配列リテラルで初期化できるようになった
  • 配列リテラルを、型にキャストできるようになった
  • Mixinで複数のデストラクタを挿入できるようになった

配列リテラルで変数を初期化できるようになった.
今度はautoも使えるようにして欲しいな.

import std.stdio;

template Const()
{
    this() { writefln("call Const"); }
}

template Dest()
{
    ~this() { writefln("call Dest"); }
}

class Mixin
{
    mixin Const!();      // コンストラクタのミックスイン1回目
    // mixin Const!();   // コンストラクタのミックスイン2回目 -> エラー
    mixin Dest!();       // デストラクタのミックスイン1回目
    mixin Dest!();       // デストラクタのミックスイン2回目 (*)
}

class Foo
{
    class Bar {}
}

void main()
{
    const int[] a = [1,2,3];      // 静的初期化
    int[] b = [1,2,3];            // 配列リテラルで初期化 (*)
    //auto c = [1,2,3];           // 配列リテラルで初期化 -> エラー (*)
    auto d = ([1,2,3]);           // 配列リテラルで初期化 (*)
    auto e = cast(int[])[1,2,3];  // 配列リテラルで初期化 (*)
    
    char[][] i = ["abc","def","ghi"]; // 配列リテラルの[][]へのキャスト (*)
    
    Foo f = new Foo;              // 普通にnew
    Foo.Bar g = f.new Foo.Bar;    // interクラスのnew
    Foo h = g.outer;              // outerプロパティ (*)
    
    Mixin j = new Mixin();        // ミックスインを含むクラスのnew
}

実行結果

call Const
call Dest
call Dest

コメントの最後に(*)が付いているのが今回から使えるようになるはずの部分.
エラーになるところは今後改善されるかな?
それにしてもmixin関係の意義は何なんだかさっぱりわからん.