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