APEL version

Keiichi Suzuki keiichi @ nanap.org
1999年 11月 8日 (月) 21:19:13 JST


>>>>> apel-ja の No. 00032
>>>>> Message-Id: <htxso2h2tpb.fsf @ mulelab3.etl.go.jp> で、
>>>>> "守岡" == tomo @ etl.go.jp (守岡 知彦 / MORIOKA Tomohiko)さま曰く...

守岡> もし、APEL に version 名関連の機構を入れるなら、現在、FLIM に入れ
守岡> ている mime-product-* と同等の機能を持つ機構を実装し、FLIM/SEMI で
守岡> はそれを使うのが良いかなと思います。

守岡> そうすると、例えば、product という抽象型を考え、

[...]

守岡> というような関数を用意すれば良いでしょうか。

ここまでは全面的に賛成です。

守岡> また、PRODUCT の実体は vector だとしても、定数を直接見せる(ことを保証
守岡> する)のは後々厄介ですから、

守岡> define-product (NAME VERSION &optional CODE-NAME)

守岡>     名前が文字列 NAME, version 番号が VERSION (整数の list) である
守岡>     product を定義し、その product object を返す。

守岡>     CODE-NAME は code name を表す文字列である。

守岡> find-product (NAME)

守岡>     NAME に対応する product を返す。

守岡>     見付からなかった場合は nil を返す。

守岡> みたいなのを設け、内部表現を隠蔽するのが良いかも知れません。

守岡> 例えば、

守岡> (define-product "APEL" (9 23) "Nippori")

守岡> という風に定義し、

守岡> (product-version (find-product "APEL"))

守岡> で APEL の version を得ることができるという訳です。

守岡> ;; 実体は例えば hash (XEmacs, Emacs 21) とか obarray で。

ここまでは良いと思います。

ただ、名称は define-product -> product-define のように prefix にしておい
た方が無難ではないでしょうか?

守岡> あるいは、

守岡> provide-product (FEATURE NAME &optional VERSION CODE-NAME)

守岡>     FEATURE が product 情報付き feature であることを告知する。

守岡>     NAME は product の名前を表す文字列である。

守岡>     NAME に対応する product が存在しない場合、NAME に対応する product
守岡>     object を生成する。この時、VERSION は番号を表す整数の list であり、
守岡>     CODE-NAME は code name を表す文字列である。

これを「あるいは」ではなくて、

product-provide (FEATURE NAME &optional SUB-VERSION SUB-CODE-NAME)

とし、 NAME に指定するものは、あらかじめ product-define したものとします。

;; こうすると provide-product だと意味が合わなくなりますので、 product
;; を prefix にするとうれしい、というところもあります。

Compile 時に define-product した、バージョン情報を product-provide した
*.elc に埋め込んでしまうようにすると良いと思います。

守岡> find-product-by-feature (FEATURE)

守岡>     FEATURE に対応する product を返す。

守岡>     見付からなかった場合は nil を返す。

守岡> というようなものを設け、feature と対応させると良いかも知れません。

守岡> 例えば、

守岡> (require 'poe)

守岡> :

守岡> (provide-product 'poem "APEL")

守岡> みたいに書いて、poem が APEL の一部であることを宣言できます。


守岡> こういうのと

守岡> (provide-product 'product "APEL" '(9 23) "Nippori")

守岡> が入った product.el を設け、(require 'product) することで、こうした
守岡> service が利用できます。

私の案では、

product.el に...

(define-product "APEL" '(9 23) "Nippori")
(provide 'product)

としておいて、構成する各ファイルには...

(eval-when-compile
    (require 'product))
(product-provide 'poem "APEL")

のようになると思います。

守岡> ;; なんかやりすぎな気がしますが。(^_^;

;; 途中まで同じようなことを考えて一旦メイルにも書いたのですが、やりすぎ
;; かな? と思いやめてしまいました。 ^^;;;;

こんな感じでしょうか?

-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: product.el
型:         application/octet-stream
サイズ:     2546 バイト
説明:       無し
URL:        <http://lists.chise.org/pipermail/apel-ja/attachments/19991108/6cbd6fa2/attachment-0001.obj>
-------------- next part --------------

-- 
鈴木圭一 / keiichi @ nanap.org
PGP finger print (DH/DSS)
0B32 B37E 6DE9 3BC1 68A4  4089 7AAF 2B03 ECBD 614B


More information about the APEL-ja mailing list