Embeddable Common-Lisp main repository.
Find a file
Marius Gerbershagen 16faca09b6 hash-tables: performance improvements
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.
2022-02-19 16:02:57 +01:00
contrib contrib/unicode: improve ucd table generating code 2021-05-07 21:09:08 +02:00
examples more details added, and examples adjusted 2021-06-10 14:33:08 +01:00
msvc msvc: set HAVE_WCHAR_H in config.h 2021-12-23 09:39:44 +00:00
src hash-tables: performance improvements 2022-02-19 16:02:57 +01:00
.gitignore cmp: read msvc output in using the correct encoding 2020-08-02 10:55:25 +02:00
.gitlab-ci.yml Add .gitlab-ci.yml 2017-01-11 18:30:33 +00:00
appveyor.yml Add simple appveyor msvc build 2017-05-13 00:12:13 +02:00
CHANGELOG mp: semaphores: add tests and the documentation 2022-01-06 09:32:49 +01:00
configure Preserve quoting when passing the arguments to the build directory 2008-08-27 09:50:44 +02:00
COPYING cosmetic: rename LGPL->COPYING 2016-10-08 14:24:31 +02:00
INSTALL config-internal.h: automatically set ECL_C_COMPATIBLE_VARIADIC_DISPATCH for apple/arm64 2021-01-29 19:46:01 +01:00
LICENSE copyright: add Marius to the maintainer list. 2019-02-22 18:43:37 +00:00
Makefile.in doc: set new doc as standard documentation 2019-01-03 19:14:28 +01:00
README.md update readme (typos) 2015-08-31 08:22:52 +00:00

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.