namazu-dev(ring)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
memo: libnamazu
- From: Satoru Takabayashi <satoru-t@xxxxxxxxxxxxxxxxxx>
- Date: Sat, 04 Dec 1999 22:28:06 +0900
備忘録。libnamazu について。今後の作業予定。(コメント歓迎)
* libnmz という名前の方がいいかも (迷うところ)
- ディレクトリ名は nmz だし…
* nmz/libnamazu.c を廃止 (中の関数は適切なファイルに移動する)
* nmz/*.c からは libnamazu.h を *インクルードしない*
* extern関数のプロトタイプ宣言は search.h, idxname.h など
の各ヘッダファイルに記述する (従来通り)
- ライブラリとして外に公開する関数だけ特別に libnamazu.h
に宣言するのは一貫性がなくて気持ちが悪い。よって、
* ライブラリとして外から利用する関数は libnamazu.h に *も*
プロトタイプ宣言を記述する
- たとえば search.c の search_main() のプロトタイプ宣言
は search.h と libnamazu.h の両方に記述する
(search_main() はライブラリとして外から利用する関数)
- プロトタイプ宣言を 2つのファイルに記述するのは面倒だが、
大した数ではない。libnamazu.hは自動生成してもいい。
- 本当にこの方法でいいのかは自信がない
* search_main という名前はダサイので nmz_search に変更
- ダサイ名前はいまのうちにじゃんじゃん改名する (ライブラ
リの関数として定着してからでは手遅れなので)
* HLIST 型はとりあえず NmzResult 型に名前を変えた。が、自
分で定義した型の表記を NMZ_REULST, nmz_result, NmzResult
のどれにするかは悩むところ。(スタイルの問題)
- NmzResult より大胆に "Namazu"型の方がいいかな? :-)
* グローバル変数の Query, Idx はそれぞれ query.c,
idxname.c に閉じ込めてアクセス関数を用意する
* (var.c で定義されている) その他のグローバル変数もどこか
に閉じ込めてアクセス関数を用意する
* var.[ch] を廃止 (グローバル変数を一掃)
* libnamazu.h さえインクルードすればライブラリとして手軽に
使えるようにする
* src/*.c からは基本的に "libnamazu.h" のみをインクルード
するようにする
- re.h とか hlist.h をインクルードするのはずるいでしょ? :-)
* 関数のプロトタイプ宣言にはパラメータの変数名をつける
例: extern void set_debugmode ( int mode );
- cextract を使えばプロトタイプ宣言を自動生成できる
(current の libnamazu.h を参照のこと)
* prefix "nmz" を徹底する (面倒くさいよー)
* (旧)HLISTの関連の関数の戻り値をポインタにする [namazu-dev 889]
* エラー処理を見直す (関数の戻り値, enum の用法)
* 雑なルーチンをきれいに書き直す
* データ構造を見直す
- Namazu *foo = nmzNewNamazu() みたいにしてインスタンス
もどきを生成できるとかっこいいかな
* やはり zlib 対応はしたいところ
- インデックスを zlibで圧縮
* boehm GC <http://reality.sgi.com/boehm/gc.html> を導入す
るとどうだろう?
* Perl 5.6 が公開され次第、内部コードを UTF-8 にする
* 一から書き直したいという野望はあるけど…
- まだまだプログラミングについて勉強不足 (精進せねば)
- 「Namazuを開発」という仕事で給料を払ってくれる会社はな
いものか? :-)
# 近いうちに簡単なドキュメントを用意して 1.9.9 を公開するつ
# もりです。あくまでもベータ版という位置づけで。
p.s
Java風の表記がいいかな、という気がしてきました。さすがに今の
コードを全面的に書き換えるのは面倒なのでやりませんが。;-)
# ライブラリとして外に公開する関数だけ Java風に表記するとい
# う手はあります。他の関数と容易に識別できて便利かも。:-)
こんな感じ: (なんだか本当にいいような気がしてきた)
/*
* インデックス foo と bar を検索式 "quux" で検索する
* 検索結果は title フィールドで昇順にソートする
*/
Namazu *foobar = nmzNewNamazu();
nmzAddIndex(foobar, "/usr/local/var/namazu/index/foo");
nmzAddIndex(foobar, "/usr/local/var/namazu/index/bar");
nmzSearch(foobar, "quux");
nmzSetSortMethod(foobar, NMZ_SORT_BY_FIELD);
nmzSetSortField(foobar, "title");
nmzSetSortOrder(foobar, NMZ_ASCENDING);
nmzSort(foobar);
int total = nmzGetTotal(foobar);
for (i = 0; i < total; i++) {
/* 検索結果を一つづつ処理する */
NamazuElement *elem = nmzGetElement(foobar, i);
char *uri = nmzElementGetField(elem, "uri");
char *title = nmzElementGetField(elem, "title");
printf("<li><a href=\"%s\">%s</a>\n", uri, title);
}
# おとなしく C++ を覚えた方がいいかも
-- Satoru Takabayashi
Only wise programmers structure large software system.
-- Jon Bentley