AB5の最新リビジョンで静的リンクライブラリの生成及び静的リンクが可能になりました。今朝、それをコミットしたところ。久々のコミットです。

ここ一ヵ月半くらい、静的リンクライブラリの実装に伴う大規模なリファクタリング作業が発生していたため、外部へのコミットができずにいました。何かアウトプットが出せずに作業だけが次々と発生する。これはマジつらいです。自分は何か外に排出していかないといてもたってもいられない性格なので前みたいにコマメなアウトプットを心がけたいもんです。

と、ここらで本題、、、

EXE/DLL/LIBなどのファイルを作るうえで大変なことの一つに、データをストレージする際のフォーマットを熟知していなければならない点があります。EXEファイルを生成した場合は、WindowsのPE/COFFフォーマットに沿ってデータを格納しなければ動いてくれないため、その辺りはハードコーディングになりがちです。

また、静的リンクライブラリというと、単なるコンパイル済みの断片的なネイティブコードではなく、下記のようなデータを管理し、適切なタイミングで結合してやる必要があります。

– クラス情報
– アクセシビリティ情報
– メソッド情報
– メンバ情報
– 継承関係

– グローバル変数・定数
– グローバル関数
– ネイティブコードとソースファイル行番号との対応関係
– 名前空間情報
…etc

上記は必要なメタ情報のごくごく一部。これらのデータ構造を定義するcppヘッダファイルだけで数千行はいってます。

で、問題なのはこういう大きめなデータ構造を依存関係を保持しながらファイルにストレージしたり、読み込んだり、はたまた結合したりする処理をどうするかといったところ。Read/Writeをハードコーディングするのは骨の折れる作業です。

そこで大活躍したのがboost::serialization。オブジェクトを依存関係を保持したまま、ゴソッとストレージしてくれるライブラリです。

http://www.boost.org/libs/serialization/doc/index.html

データ形式としては、XML、テキスト、バイナリがあります。XMLは読み書きに時間を要するため、テキスト・バイナリをチョイス。ABが生成する静的リンクライブラリはboost::serializationによって生成されるオブジェクトフォーマットになっているんです。

週末はがんばってブログもう一本書きたいな~書けるかな~