XEmacs and APEL

Katsumi Yamaoka yamaoka @ jpl.org
2002年 7月 24日 (水) 13:53:12 JST


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

小林さん> 何となく山岡さんの問題意識がわかってきたような...

山岡> (defun-maybe md5 (args) ....)
山岡> のような微妙なものを書いてしまうと失敗するので、

小林さん> ええと, これの状況がよく理解できないのですが.

ごめんなさい、的確な具体例が思い出せません。それは md5 ではなかっ
たかもしれません。ですが、

小林さん> * Emacs-w3 は, 自身の compile 時の warning を無くすために
小林さん>  (eval-when-compile (defun md5 (args) ...)) のようなことをし
小林さん>  ている?

そういう理由で defun-maybe で関数が生成されないことはよくありました。

小林さん> * (defun-maybe md5 (args) ...) を含むファイルが (require 'w3) 
小林さん>   している?
小林さん> いや, これでは問題は起きないはずだなぁ... あぁ, なるほど,

それは自分の数ある失敗例にありますが、比較的簡単に原因が見つかり
ますね。

小林さん> * Emacs-w3 は md5 を含む(本当?)多くの emulating functions を
小林さん> 持っている.

小林さん> * (defun-maybe md5 (args) ...) を含むファイルが warning を無
小林さん>   くすだけの目的で (eval-when-compile (require 'w3)) してい
小林さん>   る.

こういうのも簡単に原因が見つかる失敗の例です。そして

小林さん> => compile 時に Emacs-w3 によって定義された md5 を見つけた 
小林さん>    defun-maybeは, その環境には常に md5 が存在すると判断して
小林さん>    何もしない.

となってしまうことは何度か経験しました。

小林さん> ということでしょうか? これはこれで変なことをしているという気
小林さん> もしますが;-p

うーん、やっぱり md5 ではなかった気がします。とは言え lpath.el
や dgnushack.el をいじる機会が多いぼくは、defun-maybe が関数を生
成しない例を何度も経験しており、以前は単に「無かったら関数を生成」
する便利なマクロとしてしか認識していなかったために、失敗を繰り返
していたのでした。

山岡> しかし、たいていの環境には存在している、でもそうでない場合も確か
山岡> にあるから何とかしようという場合は、例えば XEmacs にある

山岡> (macroexpand '(defun-when-void FOO (BAR) BODY))
山岡>  => (if (fboundp 'FOO)
山岡>         nil
山岡>       (defun FOO (BAR)
山岡>         BODY))

山岡> のようなものを使えばよかったのですよね。

小林さん> ;; この定義では (symbol-file FOO) が出来なくなるような...

あ、これはすごい。

(if (fboundp 'FOO)
    nil
  (defalias 'FOO (lambda (BAR)
		   BODY)))

これなら良いのでしょうか。

小林さん> 「たいていの環境」から「そうでない環境」に .elc を持って行く
小林さん> という話ならそうです. うーん, そうか, XEmacs では多くのもの
小林さん> が base system の外に出されてしまって, edebug なども常に存在
小林さん> するとは限らなくなっているのだよなぁ.
小林さん> ;; (require 'pym) しても edebug-def-spec の存在は保証されな
小林さん> ;; いということ.

小林さん> (XEmacs Packages に限らない) package system というのは 
小林さん> *-maybe よりも後から広まったので想定外なのだよなぁ. package
小林さん> system が入ってきたことで, compile 時には存在したはずのもの
小林さん> が .elc が load された環境では存在しないということが起こりや
小林さん> すくなっていて, *-maybe の使用には細心の注意が必要になってい
小林さん> るのか.

各パッケージの auto-autoloads.elc が正しく作られていて、同じパッ
ケージが存在する環境で使うぶんには問題無いと思いますよ。

山岡> ;; XEmacs with/without Mule の件は、ちょっと話が違いますが。

小林さん> ひとつ確認したいのですが, XEmacs Packages というのはどんな範
小林さん> 囲の XEmacsを対象としているのでしょうか? 安定版と開発版の最
小林さん> 新の version だけですか?

XEmacs 21.1 以上のすべての版で共通であると認識しています。
with/without Mule で共通なのが xemacs-package で、Mule 専用のも
のが mule-package としてそれぞれ別のディレクトリにインストールす
ることになっています。

小林さん> ;; ところで, XEmacs with Mule で Packages を作る特別な理由は
小林さん> ;; あるのかな?

え? ユーザの利便性、って、そんなことおっしゃってるのではないです
ね。あまりにパッケージの存在になれてしまったので、わかりませんが。
^^;;

小林さん> "Use `*-maybe' only when you exactly know what you are doing!"
小林さん> ↑こう思われていないことが問題なのね.

さよう、いつでも使える便利なマクロ。:-p
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>




More information about the APEL-ja mailing list