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