XEmacs and APEL

Katsumi Yamaoka yamaoka @ jpl.org
2002年 7月 26日 (金) 09:58:24 JST


>>>>> In [apel-ja : No.00711]
>>>>>	Shuhei KOBAYASHI <shuhei @ aqua.ocn.ne.jp> wrote:

山岡> とても良いと思います。ただ、def*-maybe はそのままにして、新たに 
山岡> def*-when-void を作るというのも捨て難いです。

小林さん> def*-maybe は(def*-when-void の動作を期待して)広く使われてい
小林さん> るので,やはり「安全」なものに変更した上で, これはこれで新た
小林さん> に作りませんか?
小林さん> def*-maybe と両方に「普通は def*-when-void の方を使え」と書
小林さん> いておいて.

ということは def*-maybe-enable-compile-time-hack のデフォルト値
は t で良いですね(?)。
うーん、ぼくみたいな「危険」な人がたくさんいるかどうか定かではあ
りませんが、今のところ障害が起きた話は (自分の口以外からは ^^;;)
聞いたことが無いので、def*-when-void を併設するならばそんなフラ
グは要らない気もしますが。

;; (let ((def*-maybe-enable-compile-time-hack nil))
;;   (defun-maybe FOO (ARG) "DOC" BODY))
;; のような感じで部分的に切り替えるのは無理ですね。^^;;

ちょっと書いてみました。

(defmacro defun-maybe (name &rest everything-else)
  "Define NAME as a function if NAME is not defined.
Take notice that it will normally never produce a byte-compiled code
when the function NAME has already been defined at the compile-time.
Use `defun-when-void' to check for the existence of the function at
the load-time.  See also the function `defun' and the variable
`def*-maybe-enable-compile-time-hack'."
  ...)

(defmacro defun-when-void (name &rest everything-else)
  "Define NAME as a function if NAME is not defined at the load-time.
See also the function `defun' and the macro `defun-maybe'."
  (` (if (not (fboundp (quote (, name))))
	 ;; Use `defalias' to register the function in `load-history'.
	 (defalias (quote (, name)) (lambda (,@ everything-else))))))

Lisp 関数の defalias が FSF Emacs に登場したのがいつだったのか
ChangeLog からはよくわからないのですが、Nemacs (18.55) には無い
ので、もし上記の定義を使うならば pym.el は poe.el を load しなけ
ればなりませんから、やはり current-load-list を操作する方が良い
のでしょうね。もっとも Emacs 18 には load-history なんて無いので
すが。:)

それから少し気になること。

http://mail.gnu.org/pipermail/emacs-devel/2002-July/010629.html
http://mail.gnu.org/pipermail/emacs-devel/2002-July/010684.html

二本目の記事で RMS師が load-history の内部形式を変えるような話を
しています。たぶん current-load-list だけを操作する分には問題無
いのでしょうけれども、やはりこういった Emacs の内部資源をいじる
のはちょっと怖いですね。^^;;
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>




More information about the APEL-ja mailing list