[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Add option for forcing a 64bit hash on 32bit systems
From: |
Kevin Atkinson |
Subject: |
Re: Add option for forcing a 64bit hash on 32bit systems |
Date: |
Sat, 26 Dec 2020 15:26:42 -0500 (EST) |
User-agent: |
Alpine 2.20 (DEB 67 2015-01-07) |
On Tue, 22 Dec 2020, Érico Nogueira wrote:
As seen in [1], aspell has a rather unfortunate design limitation in its
compiled dictionary format. This not only makes it impossible to share
these files between systems with different endianness, but, if compiled
with default settings, makes sharing impossible between 32bit and 64bit
systems as well.
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.
The only compatibility option offered is forcing 32bit hashes for all
systems, which makes 64bit systems incapable of reading 64bit dictionaries.
Since most systems nowadays (especially ones where aspell would be used) are
64bit, it feels kind of backwards to force 32bit dicts. Would it be
possible, then, to force 64bit dicts on 32bit systems? Would a contribution
that adds this possibility be accepted?
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:
#ifdef USE_32_BIT_HASH_FUN
typedef u32int hash_int_t;
#else
typedef size_t hash_int_t;
#endif
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.
Kevin