移植性や拡張性のためには UNIX における Vnode/VFS interface (vnode(9)参 照)のような構造をあらゆるレイヤーに導入する必要があります。
struct vnode {
...
voff_t v_size; /* size of file */
int v_numoutput; /* num pending writes */
long v_writecount; /* ref count of writers */
...
int (**v_op)(void *); /* vnode ops vector */
...
void *v_data; /* private data for fs */
};
v_op の先に、
vop_open()
vop_read()
vop_getattr()
などが定義されています。つまり struct vnode の **v_op (vnode operation vector) にあたるものが IO に使われるクラスの各メソッドです。たとえば、IO::Adapter はユーザリ ストというオブジェクトに対する IO インターフェイスを抽象化したものです。
fml8 全体の基調となる型は IO::Adapter といえるでしょう。実装もすでに完成形であり、primitive なメソッドは何か などについて十分考えられています。
IO::Adapter クラスは
KEY => VALUEもしくは
KEY => [ VALUE, VALUE2, VALUE3 ]のいづれかの型のデータ構造を抽象化していると考えられます。 つまり、これは RDBMS の基礎理論同様の表型のデータ構造です。
KEY1 VALUE1-1 "" "" KEY2 VALUE2-1 VALUE2-2 VALUE2-3 KEY3 VALUE3-1 VALUE3-2 VALUE3-3 KEY4 VALUE4-1 VALUE4-2 VALUE4-3
ユーザリストを管理する上で必要最低限の基本メソッド群は、 IO::Adapter の裏にあるオブジェクト本体を呼びだすための
open() close()および、そのオブジェクトへの IO である
add(KEY, ARGV) (ARGV はクラス依存のデータ渡しのためにある引数) delete(KEY) find(KEY or REGEXP) get_next_key()があれば十分のようです。 少なくとも、ユーザ管理はこれらだけで十分書けます。
author's homepage is www.fml.org/home/fukachan/.
Also, visit nuinui's world :) at www.nuinui.net.
For questions about FML, e-mail <fml-bugs@fml.org>.