namazu-dev(ring)


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

Re: memo: libnamazu



knok@xxxxxxxxxxxxx (NOKUBI Takatsugu) wrote:

>>   * ライブラリとして外から利用する関数は libnamazu.h に *も*
>>     プロトタイプ宣言を記述する
>
>  この辺りを最初に書いたとき、自分の中では
>
>* 外部に公開する関数のみ libnamazu.c に記述
>* それにあわせて libnamazu.h を記述
>
>  といった方法をとることを念頭においていました。他のファイルは機能単位
>で分けていますが、libnamazu.{c,h}のみ分割の切り口をかえる、という感じ
>です。というのも、

うーむ、せっかく「機能単位で分けてい」るのに、「外部に公開す
る関数のみ libnamazu.c に記述」するのは気持ち悪いです。


>>     - たとえば search.c の search_main() のプロトタイプ宣言
>>       は search.h と libnamazu.h の両方に記述する
>>       (search_main() はライブラリとして外から利用する関数)
>
>  こういうアプローチがあんまり好きじゃないので...

たしかに 2重に保守するのは好ましくないです。ミスが起きやすい
ので。


>>     - プロトタイプ宣言を 2つのファイルに記述するのは面倒だが、
>>       大した数ではない。libnamazu.hは自動生成してもいい。
>
>  自動生成するにしても外部公開用の新しい関数が増えたときに、
>
>* 適切なファイルにコードを書く
>* 自動生成用スクリプトに手を入れる
>
>  という手順を取るよりは、
>
>* 外部公開用のファイルにコードを書く
>
>  だけで済む方が保守も楽じゃないかと思います。

別の案として、

  * 関数は機能単位でファイルに分ける - 従来通り
  * 外部に公開する関数のプロトタイプ宣言だけは libnmz.h に記
    述する

という方法が考えられますが、これも「外部に公開する関数のプロ
トタイプ宣言だけは libnmz.h に記述する」という例外が気持ち悪
いです。(現在は関数を定義した .cファイルと basename が等しい 
.hファイルに宣言を記述しています)

さらに、別の案として

  * 関数は機能単位でファイルに分ける - 従来通り
  * 外部に公開する関数はラッパー関数を Java風の表記 :-)
    で libnmz.[ch] に定義・宣言する 
    - 例: idxname.c の add_index() に対してはラッパ─関数
      nmzAddIndex() を定義・宣言する

なる方法も考えましたが、保守が面倒そうです。

# Java風の表記にするなら [namazu-dev 933] の終わりの方に書い
# たようにオブジェクト指向風のインターフェイスにしたいところ。

まとめると、次のようになります。

  0. libnmz.h にまとめるのをあきらめる
     - $(prefix)/include/nmz/*.h にすべてのヘッダを置く

  1. 外部に公開する関数は libnmz.h に *も* 宣言する
     - 宣言を 2重に保守するのが面倒。自動生成できなくもない

  2. 外部に公開する関数は libnmz.[ch] に定義・宣言する
     - 関数を機能別にファイルに分ける方針に反する

  3. 外部に公開する関数は libnmz.h に宣言する
     - 外部に公開する関数の宣言だけ例外的に扱うのは気持ち悪い

  4. 外部に公開する関数は libnmz.[ch] にラッパ─関数を Java
     風の表記で定義・宣言する
     - 保守が面倒そう。外部に公開する関数だけスタイルが違うのは変

どれがいいと思いますか? > みなさま
あるいは別のいい方法があれば教えてくださいませ。

# ライブラリは難しい…


>> ライブラリとして外から利用する関数を選定してもらえませんか? > 野首さん
>
>  そうですね。このあたりは追々... といっていると、いつまでたっても終ら
>ないかも ^^; 最低限、Search::Namazu で使っている関数群は libnmz.h 行き
>ですかね。

よろしくお願いします。

-- Satoru Takabayashi
<http://www.programmingpearls.com/sortanim.html> は面白いで
す。おすすめ。:-)