在Emacs Lisp中使用obarray而不是散列表有什么好处吗?

Jon*_* O. 10 emacs elisp

我有一个Emacs Lisp程序,需要跟踪一组字符串,使用它们完成并测试其他字符串以获取集合中的成员资格.在没有内置大多数语言set类型,我会用一本字典或哈希表的虚拟t1此值,但它发生,我认为的elisp的obarray类型也可以达到目的,用intern,intern-soft以及unintern采取的地方puthash,gethashremhash.

(我知道cl-lib作为集合在列表上运行的函数,但这些函数与此问题并不特别相关,只需要设置成员资格测试).

在现代Emacs中使用obarray而不是散列表是否有任何优势(速度,内存使用或其他方面),或者是主要符号表之外的obarray更多的是Emacs Lisp之前的剩余部分有一个单独的散列表类型?

Ste*_*fan 7

由于两者都有效,因此在很大程度上是品味或表现的问题.

在内存使用方面(以单词计算),obarray使用1个固定大小的数组N加上每个条目的一个符号(大小为6),而散列表的大小大约为每个元素5个加上一个更多.记忆中,这是一个洗涤.

在速度方面,我不知道有谁费心去测量它,所以它可能也不是一个大问题.

IOW,这是一个品味问题.FWIW,我更喜欢提供更多选项的哈希表; 在我看来,obarrays在很大程度上是一次历史性事故.