Re: Add option for forcing a 64bit hash on 32bit systems
Kevin Atkinson <[email protected]> Sun, 27 Dec 2020 16:11:16 -0500 (EST)
| Newsgroups | gmane.comp.gnu.aspell.devel |
|---|---|
| Message-ID | <[email protected]> |
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323329-1543701896-1609103477=:29310 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8BIT On Sat, 26 Dec 2020, Érico Nogueira via The New Aspell Develpment Mailing List wrote: > On Sat Dec 26, 2020 at 5:26 PM -03, Kevin Atkinson wrote: >> On Tue, 22 Dec 2020, Érico Nogueira wrote: >> >> Aspell compiled dictionary formats are not really meant to be portable. >> Compiling a dictionary is now very fast, it is even faster if checks are >> disabled. One thing I will be open to is the creation of a portable text >> based format which can be compiled very quickly on startup. This will >> take some refactoring though to make it work. > > Allowing compilation at run time would allow for simpler packaging, > especially when cross compiling. So this would be very nice :) The basic idea behind the format is just to store the sorted word list (optionally after passing though "aspell clean", and maybe with soundslikes) in a file with a special header. The file will then be compressed using prezip (a special compression for sorted wordlists) and then gzip. When Aspell is given a portable format it will first check if a compiled dictionary already exists in either $XDG_CACHE_HOME/aspell/ or /var/cache/aspell/ (or maybe /usr/lib/aspell) and if so use that, otherwise it will attempt to compile it to $XDG_CACHE_HOME/aspell/ and if that fails try compiling it to /tmp/aspell/. I am not sure when I will get around to doing this. Patches are welcome. :) >>> The only compatibility option offered is forcing 32bit hashes for all >>> systems, which makes 64bit systems incapable of reading 64bit dictionaries. >> >> To be clear the only thing this does is change the type the hash function >> used from size_t to u32int in modules/speller/default/readonly_ws.cpp: << ... >> All integers used in the dictionary are 32 bit as 64 bit integers will be an >> overkill. The fact that a 64 bit hash function is used on a 32 bit integer is >> an oversight. I would rather that a 32 bit hash function is used on all >> systems. The only reason that option exists is to avoid breaking dictionary >> compatibility on 64bit systems. I am open to enabling 32 bit hashes by >> default on the next major version bump. >> >> Note that on Debian Aspell is compiled with --enable-32-bit-hash-fun. I should also note that Debian compiles the dictionary as part of the post-install process. This saves a lot of space (often an order of magnetite) and avoids having to package architecture specific dictionary packages. > I was looking into simplifying how we build the dictionaries in Void > Linux. Since our (32-bit) ARM packages are cross compiled from 64-bit > hosts, including aspell dictionaries, I thought standardizing on a > 64-bit format would be best. It might make sense, then, to clear up the > explanation in [1], since it isn't clear that 32-bit hashes are actually > preferred. Given your explanation, I will simply force the 32-bit hashes > for all platforms, which is definitely simpler. How about if a add something like this: A 32-bit hash function is preferred as the hash table uses 32-bit integers on all platforms. Future versions of Aspell may default to forcing a 32-bit hash function. Kevin --8323329-1543701896-1609103477=:29310--