make-temp-file definition is not effective

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2003年 6月 29日 (日) 23:39:40 JST


teranisi @ gohome.org (Yuuichi Teranishi) writes:
> > ;; APEL 10.5.1 か APEL 10.6 を出すことになる?
> 直せたら、10.6 を出すのですかね。

過去に 3.x.y や 7.1.1 という例はあったみたいですが, 10.6 でしょうね.

> > poe.elc の load 時にはなるべく make-temp-file を実行したくない
> > (定義が存在して実行できたとしても危険性はない)ので回避策がない
> > か考えてみます.

私は最近あまり意識していませんでしたが, APEL には当初から

  * version number を調べるのではなく対象の機能を実際に検査する.

という方針があります. そしてここしばらく問題になっていて XEmacs package
の APEL の問題にも関係するのが

  * compile 時の判定は乱用されて必要以上に *.elc が特殊化される.

であり, 今回の make-temp-file や literal-test-file の問題と関係するのが

  * load 時に副作用のある判定を行なうのは好ましくない.

です. さてどれを落とすべきか?


まず, version による判定は Emacs 21.4 や今後の XEmacs で make-temp-file
の定義がどうなるか不明なので避けた方がよさそうですね.

次に, compile 時の判定だけにして load 時の判定をなくすことができないか
を考えてみますが, これは broken.el のように compile 時の判定結果をあと
から利用可能にすればよさそうです.
;; ただ broken.el は私もよくわからんので個人的には使いたくないです(^^;

最後に, (load 時に)副作用なしで判定できないかということを考えてみます.
とりあえず,

  (aref (symbol-function 'make-temp-file) 0)
     => (prefix &optional dir-flag)

というのをすぐに思い付きましたがちょっと邪悪ですよね;-)

ちなみに, aref の docstring には byte-code object にも使用可能とありま
すが, 現在の XEmacs では不可能になっていて代わりに compiled-function-*
が提供されています. 今回は XEmacs は最初から判定の対象外ですけどね.
;; 以前 compiled-function-* を aref で実現するライブラリを書いた気が
;; するのですが自分では発掘できず(;_;) 誰か持っていませんか?


邪悪と書きましたが, 最後のがよさそうな気がしてきました. どうでしょうか?

-- 
Shuhei KOBAYASHI




More information about the APEL-ja mailing list