Hat die Verwendung eines Obarrays anstelle einer Hash-Tabelle in Emacs Lisp Vorteile?

8

Ich habe ein Emacs Lisp-Programm, das eine Reihe von Strings verfolgen muss, sie für die Vervollständigung verwenden und andere Strings auf Mitgliedschaft im Set testen muss. In den meisten Sprachen ohne integrierten set -Typ würde ich dafür eine Dictionary- oder Hash-Tabelle mit einem Dummy t oder 1 verwenden, aber mir fiel ein, dass Elisps obarray type auch den Zweck, mit intern , intern-soft und unintern anstelle von puthash , gethash und remhash .

(Ich kenne die cl-lib -Funktionen, die auf Listen als Mengen funktionieren, aber diese sind nicht besonders relevant für dieses Problem, das nur einen festgelegten Mitgliedschaftstest benötigt).

Gibt es einen Vorteil (in Geschwindigkeit, Speichernutzung oder anders), wenn Sie in einem modernen Emacs eher eine Obra- ray als eine Hash-Tabelle verwenden, oder sind Objektras außer der Hauptsymboltabelle mehr von einem Rest, bevor Emacs Lisp ein separates hatte Hash-Tabellentyp?

    
Jon O. 08.08.2014, 17:35
quelle

1 Antwort

5

Da beide funktionieren, ist es zu einem großen Teil eine Frage des Geschmacks oder der Leistung.

In Bezug auf die Speichernutzung (gezählt in Worten) verwendet ein Obarray 1 Array fester Größe N plus ein Symbol pro Eintrag (der Größe 6), während eine Hash-Tabelle eine Größe von mehr oder weniger 5 pro Element hat plus ein bisschen mehr. Also memorywise, es ist eine Wäsche.

Was die Geschwindigkeit anbelangt, kenne ich niemanden, der sich darum gekümmert hat, es zu messen, also ist es wahrscheinlich auch kein großes Problem.

IOW, es ist eine Frage des Geschmacks. FWIW, ich bevorzuge Hash-Tabellen, die mehr Optionen bieten; Obarrays sind meiner Meinung nach größtenteils ein historischer Unfall.

    
Stefan 09.08.2014, 01:35
quelle

Tags und Links