プログラミング/MagicReflection v0.7

NADECに直接参加された方々、Ustreamで視聴された方々、お疲れ様でした。
定員35名弱、一人持ち時間15分という短く小規模な勉強会ながら、どのセッションも大変濃い内容でとても楽しく、かつ勉強になりました。
@mnagakuさんの設定された15分縛りというプレゼン時間は自分にとっては初めての経験で、本当に15分で要点を紹介出来るのだろうかと心配していましたが、逆に余計なモノがそぎ落とされた事でよりよい結果になったと思っています。

NADECで私が紹介させて頂いた「C++で開発されるゲームのためのRTTIを使用しない高速なReflection(仮)」ですが、嬉しいことに概ね好評を頂いたようでホッとしています。また、自分が思った以上に注目・期待している人がおり、大変嬉しく思っています。


NADECでのプレゼンテーションスライドと、同プレゼンで実装例として紹介したMagicReflectionのプロジェクトホームは、以下になります。プレゼンを見逃した人や、キーワードで何となくこのページにたどり着いた人は、興味があったらご覧下さい。


■NADEC(2010.10.9) プレゼンテーションスライド
- http://www.slideshare.net/pigeon6/nadec-magicreflection-20101009


■MagicReflection プロジェクト ホーム(sourcecode download)
- http://code.google.com/p/magicreflection/


さて、いよいよ一般公開してしまったMagicReflectionですが、現状ではまだまだ中途半端な状態で、
「コンセプトは分かるけど実用にはちょっと」というレベルのシロモノです。
以下に、今後version 1.0のリリースまでに行われる予定のタスクを列挙しておきます。google codeのBTSを使う気になったら、いずれそちらにも入れておきます。

1. 中途半端なセレクタの部分を書き上げる
現状では、メソッドセレクタの実装がいい加減でチェックが足りません。また、セレクションの速度を向上させるためのセレクション・キャッシュも実装していません。

2. typeidの発行ポリシーが中途半端
T* と T* constを同一視する旨は設計方針ですが、T*とconst T*は分けようと思いつつ、現状では特に確認していません。このあたりのポリシー決めをハッキリして、「こうなるよ!」と名言する必要があります。

3. メモリアロケーションの改善
現在は中で無遠慮にnewを使ってしまっています。MRが独立したヒープで動作するようにするための改善と、幾つかの初期化ポリシーへの対応、インスタンス生成時のアロケータ指定といったメモリ確保に関する改善が必要です。

4. 必要なメモリ量の計算
 MRのシステム初期化(MRの起動)に何byteのメモリが必要なのか、事前計算する機能を入れたいと考えています。


5. スタティック関数、グローバル関数への対応
現在は対応するメソッドはメンバ関数のみですが、グローバル関数やスタティックメンバ関数にも対応した方が便利です。

6. std::vectorの除去
 現在は一カ所だけstd::vectorを使っている場所がありますが、本質的には不要なので除去します。これによりMagicReflectionは外部依存するシステムがほぼなくなります。

7. ライセンスの整理
MITライセンスでの提供を現在考えていますが、条件を子細把握している訳ではないので整理確認の上、条文付ける必要があるならそれを行ったりと言った作業が必要と考えています。

8. VisualStudio.NETプロジェクトの作成
VisualStudio.NETのプロジェクトを作っていなかったことに気がついたので、それに対する対応です。私が所有しているのは2008のみなので、対応はVS2008によるものとします。
特に、VisualStudio.NET2003はC++コンパイラに問題が多いためMRのコードはビルド出来ないと思いますが、対象外とします。

ここまでが、version 1.0と僕が呼ぼうと思っているものまでのタスクです。
無論、これに追加してバグフィクスとテストコード実装が入ります。


■それ以降に考えていること
以降は、version 1.0以降にやろうかな、と考えている事です。

. プロパティアクセス代行
メンバーに対するGet/Setのインターフェイスの付与と、それらを利用するためのオペレーションを簡単に実現するための仕組みを導入します。

. マクロ・コードジェネレータ
MRをより快適に使うための、CppUnitの子河童/子馬(cocuppa/couma)のようなコードジェネレータ・コードモディファイアやVisualStudioのマクロなど。(作ってくれる方、大歓迎です!)

. luaやpythonなどへの汎用バインディングの実装
せっかくだから汎用バインディング例でも一つ実装してみようかしら、という感じです。

. サンプルコード
セミナーで例として挙げた、動的な設定のロードを行うサンプルコードなど実装してみようかしら、という感じです。


以上です。
現在本業が忙しくゆっくりしたペースでの更新となりますが、気長にお付き合い頂ければと思います。

Comment

管理者だけに表示を許可する

Trackback

Trackback URL:

http://deathcube.blog36.fc2.com/tb.php/27-4b4f9963