HLSLメモ

 VAIO T(2013年春モデル)の液晶を色温度6500Kぽくする設定

 デスクトップで右クリック→グラフィックプロパティ→ディプレイ→色調整 にて以下の設定

全色
明度 -10
コントラスト 50
ガンマ 0.7
色合い 0
彩度 15

デフォルトだと大分青いので、色を確認するには辛かったので、探してみました。
これ以上はお好みで。

CodePtrのインスタンスがGCに回収されない不具合と回避方法

 現状のXtal(r434以下)には、特定状況でCodePtrのインスタンスGCに回収されない不具合があります。主に以下のようなコードを書いた時に発生します。

// コンパイル
xtal::CodePtr code = xtal::compile_file("test.xtal");
// C++のクラスをバインド
code->def(Xid(hoge),xtal::cpp_class<hoge>());
// toplevel実行
code->call();

上述のコードで生成したcodeが指している実体は、

code = xtal::null;
xtal::full_gc();

などとして、CodePtrの参照を外してもGCに回収されません。
 なぜなら、


defメソッドがxtal::cpp_class() が返してくるxtal::ClassPtrインスタンスXtal上の親としてcodeを設定する

からです。

 そのため、上述のコードの用に単にcodeの参照を切るだけでは、まだ参照が残っている状態なのでGCに回収されません。
 今のところ、根本的な対策はされてませんが、回避することは出来るようになっています。
 ようは、cpp_class() から、codeへの参照を外せば良いわけですが、r433までは明示的に親を外すことはできませんでした*1。そこで、r434で新しいメソッド(object_orphanメソッド)が追加され親を外すことができるようになりました。
 よって、以下のようにすることで回避できます。

xtal::cpp_class<hoge>()->object_orphan();
code = xtal::null;
xtal::full_gc();

codeの参照を外す前後で、バインドしたcpp_class() の親も外します。
こうすることで無事codeがGCによって回収されます。

*1:set_object_parentメソッドがあるのですがxtal::nul()を渡すと落ちます

Twitter Flash Widgetが使えないようなので

 JavaScript版を使おうと思ったら、はてなではまだ対応していない様子。なので、URLを改めて貼って置きます。

 現在は、http://twitter.com/katze_7514 にほぼ移行しました