[Mew-dist 09255] Re: Add address to Aliases

Shuhei KOBAYASHI shuhei at example.com
1999年 6月 8日 (火) 17:50:07 JST


benchmark & BBDB ネタなので Elips にも振ります。
followup 先も Elips の方が適当になると思います。
(Elips での follow は subject も変えてほしいな)

>>>>> In <19990607213032O.kazu at example.com>,
>>>>> Kazu Yamamoto (山本和彦) <kazu at example.com> wrote:
> ユーザ会でも話題になりましたが、Emacs で効率よい検索をする方法としては
> obarray が挙げられます。また、assoc (関数)も速いと思います。XEmacs で
> は、ハッシュが使えます。

assoc は primitive なので自前で loop を書くよりは速いですが、O(n) なので
遅いです。可能なら assq を使った方がまだ 2 倍くらい速い(FSF 20.3 で測定)

obarray は hash なので O(1) で、assq が使用可能で要素数が少ない(10 程度?)
のでなければこちらの方が速いみたいです。


> 僕が数ヵ月前にみた bbdb はこれらの工夫はなにもなく、とてもがっかりしま
> した。

そんなはずはないでしょう。

(defmacro bbdb-gethash (name &optional ht)
  (list 'symbol-value
	(list 'intern-soft name
	      (or ht '(bbdb-hashtable)))))

などに気付きませんでしたか?  ただ、loop を回して検索しているというのも
間違いではなくて、bbdb-search-simple では hash (obarray) を使いますが、
bbdb-search では loop による検索をしています。この使い分けにはちゃんと
理由があって、hash は名前や address から record を検索するのに使われ、
bbdb-search の方は特定の要素が正規表現に match する record を集めるの
に使われるためです。後者に hash や assoc を使うことはできませんね。


> bbdb を使うぐらいなら、自分で最適なコードを書いた方がいいと思いました。

BBDB を書いた人は最適な elisp の code を書く事に関しては最も詳しい一人
だと思いますけど:-)

-- 
Shuhei KOBAYASHI

BBDB の作者を知らない人のために:

(最初の)作者は最近では mozilla で有名だった jwz で、彼は XEmacs の最初の
作者であり、emacs の byte compiler の作者でもあります。



Mew-dist メーリングリストの案内