Previously, we used the "tombstones" approach for removing entries from a hash-table, that is buckets were marked as previously occupied but currently empty. If the hash-table did not grow in size these tombstones were never cleaned up, only reused for new entries. For a general purpose hash-table this is a problematic strategy because there are workloads where this significantly slows down any attempted lookup or deletion for elements that are not contained in the hash-table. This happens when new elements are added and deleted regularly for a long time without the size of the hash-table changing. Even if the hash-table is never filled above a small fraction of its size, tombstones will eventually accumulate which an unsuccessfull search for an element will have to skip over. In the new implementation, we don't use any tombstones at all but instead shift elements into more optimal buckets. In the case where the hash-table in the old approach was free of tombstones, the new approach is a little slower for the process of deleting from highly occupied hash-tables itself but inserting into a hash-table is a little bit faster on the other hand. |
||
|---|---|---|
| contrib | ||
| examples | ||
| msvc | ||
| src | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| appveyor.yml | ||
| CHANGELOG | ||
| configure | ||
| COPYING | ||
| INSTALL | ||
| LICENSE | ||
| Makefile.in | ||
| README.md | ||
ECL stands for Embeddable Common-Lisp. The ECL project aims to produce an implementation of the Common-Lisp language which complies to the ANSI X3J13 definition of the language.
The term embeddable refers to the fact that ECL includes a Lisp to C compiler, which produces libraries (static or dynamic) that can be called from C programs. Furthermore, ECL can produce standalone executables from Lisp code and can itself be linked to your programs as a shared library. It also features an interpreter for situations when a C compiler isn't available.
ECL supports the operating systems Linux, FreeBSD, NetBSD, DragonFly BSD, OpenBSD, Solaris (at least v. 9), Microsoft Windows (MSVC, MinGW and Cygwin) and OSX, running on top of the Intel, Sparc, Alpha, ARM and PowerPC processors. Porting to other architectures should be rather easy.