簡易シリアライザSER
このプログラムについて
このプログラムは、C言語ベースで、
構造体やポインタを使用して構築したデータ構造をシリアライズし、
ファイルにセーブ(等)するためのライブラリです。
SERという名前は...
私のCのコーディングスタイルでは、3文字のプレフィクスを付けます。
そして、SERというのは、
このシリアライザを作るに当たって付けたプレフィクスです。
気のきいた名前が思い付かなかったので、
"serializer"から先頭の3文字を選んだんですね(情けない)。
SERを使えば、構造体・共用体・ポインタ・配列といった
C言語の機能をフルに使ったデータ構造を、
簡単にシリアライズ(ファイルに保存等)することができます。
ファイルフォーマットを考えたり、
シリアライズのためだけの(退屈な)コーディングをする必要はありません。
この手のことを行なうプログラムは色々ある気がしますが、SERは、
「最初にファイルを開いて、それを加工して、終わったらセーブする、
1台のマシンの上で動作する単一のプロセスのアプリケーション」
の開発に便利なように設計したつもりです。
複数のアプリケーションから使用できるわけでもなく、
トランザクションの概念もないので
データベースとはとても呼べない、
分散オブジェクトとは縁もゆかりもない、
お手軽・ご気楽な私流のアプローチとして、
拙いプログラムですが、勉強と実験を兼ねて書いてみました。
このプログラムについて、著作権は全て作者である私に留保しますが、
このプログラムの使用・複製・改変は、商用・非商用を問わず
御自由に行なって頂いて結構です。
ただし、それによりいかなる損害を受けたとしても、
作者は一切関知いたしません。
御意見・御感想等は、
掲示板
までお願いします。
機能
- C言語で、構造体・共用体・ポインタ・配列等により構築された
データ構造をまるごとシリアライズできます。
- 専用言語にて「スキーマファイル」を記述し、
それを「スキーマコンパイラ」に処理させることによって生成された
Cのヘッダファイルを用いてアプリケーションを開発します。
- 構造体・共用体についても、
アプリケーションプログラマがシリアライズのための関数を
書く必要はありません。SERが自動的にメンバ毎に解体し、
シリアライズします。
- ポインタによる参照関係もまとめてシリアライズし、
デシリアライズ時に復元します。
- シリアライズしたデータは、環境非依存にすることが可能です
(エンコーダ次第)。
- 多少のデータ構造の拡張(たとえば構造体を拡張してメンバがひとつ増えた)
があっても、過去のデータをそのまま読み込むことができます。
- ガベージコレクトの機能があります。
- ルートオブジェクトから到達不能なオブジェクトについて、
保守的ではない回収を行ないます。
- コンパクションも(一応)行ないます。
注)
ここでは、「オブジェクト」とは、ヒープに確保されるひとつのデータの固まり、
のような意味です。
メソッドは附属しないので、いわゆるオブジェクト指向で言う所の
「オブジェクト」とはちょっと違います。
制限
- トランザクションの概念がありません。
よって、コミットもなければロールバックもありません。
- いわゆるOODBとは異なり、二次記憶を主記憶のように透過的に使うような
機能はありません。
あくまで、仮想記憶上に展開されたデータモデルを、
二次記憶(等)に一気に書き込むだけです。
- ガベージコレクタは、アプリケーションから明示的に呼び出すことにより
起動します。
その時点でルートオブジェクトから到達不能なオブジェクトは、
たとえグローバル変数・static変数・ローカル変数から
指されていたとしても、ゴミと見倣され回収されてしまいます。
- 原理的に、一括型のガベージコレクタ以外実装できません。
ガベージコレクトの実行中、アプリケーションの実行は停止してしまいます。
- (現時点では)シリアライズの単位は、オブジェクトの貯蔵庫である
「ストレージ」単位です。オブジェクトをひとつだけシリアライズしたり、
あるオブジェクトから下位のオブジェクトだけをシリアライズすることは
できません。
- ストレージ内のポインタは、全てストレージ内のオブジェクトの
先頭を指している必要があります。
- コンパクション・デシリアライズの際の原理の都合により、
以下の条件を満たす環境でなければ動作しません。
「0から始まる整数値をポインタ型にキャストしてポインタの領域に格納し、
後でそのポインタを整数型にキャストすれば、
元の値が取り出せること」
大抵の環境でOKだと思います。
- デバッグ半ばです(_o_)。
ダウンロード
SER Version 0.13をダウンロードするには、こちらをクリックしてください。
tar + gzip形式です。
ser0.13.tgz(107KB)
使い方
動作原理
スキーマファイルの文法
スキーマファイルの例
AP向けヘッダファイルの例
内部情報ヘッダファイルの例
コンパイル方法
サンプルプログラム"draw"について
関数リファレンス
ディレクトリ構成
今後の拡張について
更新履歴
ひとつ上のページに戻る |
トップページに戻る