namazu-dev(ring)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

memo: libnamazu



備忘録。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