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> は面白いで
す。おすすめ。:-)