title: Is there any benefit to using an obarray rather than a hash-table in Emacs Lisp?
body: <p>I have an Emacs Lisp program that needs to keep track of a set of strings, use them for completion and test other strings for membership in the set.  In most languages without a built-in <code>set</code> type, I would use a dictionary or hash table with a dummy <code>t</code> or <code>1</code> value for this, but it occurred to me that Elisp's <code>obarray</code> type could also serve the purpose, with <code>intern</code>, <code>intern-soft</code> and <code>unintern</code> taking the place of <code>puthash</code>, <code>gethash</code> and <code>remhash</code>.  </p>
  
  <p>(I know about the <code>cl-lib</code> functions which operate on lists as sets, but those are not particularly relevant for this problem, which only needs a set membership test).</p>
  
  <p>Is there any advantage (in speed, memory usage or otherwise) in using an obarray rather than a hash table in a modern Emacs, or are obarrays other than the main symbol table more of a leftover from before Emacs Lisp had a separate hash-table type?</p>