FLIM 1.14 API (Re: flim-1_13-rfc2231 vs flim-1_14-rfc2231)

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2001年 5月 9日 (水) 19:09:40 JST


>>>>> In <htx1ypznmpy.fsf @ urania.kanji.zinbun.kyoto-u.ac.jp>,
>>>>> tomo @ kanji.zinbun.kyoto-u.ac.jp (守岡 知彦 / MORIOKA Tomohiko) wrote:
> 1つは API 上、inline function/macro を一切使わないということだと思い
> ますが、macro を使わないとできないこととかもあるかも知れないので、そう
> 規定するのは留保したいです。

macro でなければできないこともあるので, inline function とは分けて考え
ましょう. (FLIM API に含まれる macro の必然性については未検討なので...)


> もう一つは、inline function が実際に展開される関数として実現されている
> 場合に、展開された結果利用される関数を規定するということです。

この事は考えてみたのですが, 「展開された結果利用される関数を規定する」と
いうのでは不十分なのですよ. 利用のされ方まで規定しないと意味がないです.

単純な例でいうと

| (defun make-mime-content-type (type subtype &optional parameters)
|   (cons (cons 'type type)
|         (cons (cons 'subtype subtype)
|               parameters)))

と

| (defun make-mime-content-type (type subtype &optional parameters)
|   (cons type (cons subtype parameters)))

の二通りの `mime-content-type' に対する `mime-content-type-primary-type'
を inline function として定義すると, それぞれ

| (defsubst mime-content-type-primary-type (content-type)
|   "Return primary-type of CONTENT-TYPE."
|   (cdr (car content-type)))

と

| (defsubst mime-content-type-primary-type (content-type)
|   "Return primary-type of CONTENT-TYPE."
|  (car content-type)))

になり, 展開された結果利用される関数を `car' と `cdr' に制限したところで
互換性は得られませんよね?


また, ある実装では互換性に影響しないということで展開した関数が, 別の実装
では展開の結果が内部構造に依存してしまうかもしれません.

そんなわけで, API 上, inline function は一切使わないことにしたいです.
-- 
Shuhei KOBAYASHI

おまけ:

(defsubst luna-arglist-to-arguments (arglist)
  (let (dest)
    (while arglist
      (let ((arg (car arglist)))
	(or (memq arg '(&optional &rest))
	    (setq dest (cons arg dest))))
      (setq arglist (cdr arglist)))
    (nreverse dest)))

`luna-arglist-to-arguments' は macro の展開時(byte-compile 時)に使用さ
れる関数で, inline function にする意味は全くないですよね? こんな使い方
を目にすると, inline function なんてやめてしまえと思ってしまいます;-p

ちなみに, `luna-arglist-to-arguments' は

(defun luna-arglist-to-arguments (arglist)
  (delq '&optional (delq '&rest (copy-sequence arglist))))

で済みますよね?




More information about the Emacs-mime-ja mailing list