This will allow us to transcode characters to bytes and vice versa. This is
necessary to implement conductive UNREAD-BYTE and UNREAD-BYTE, but will allow us
to also add low-level parsers for binary objects in the future.
Previously, there were a lot of places that turned on or off C macros
which finally determined whether some particular entry was found
in *features* or not. Now, we do this all in the configure script.
This is necessary for cross compilation from a non-compatible host
which may have different features.
We will use this operators to allocate the first environment and stacks so that
there is no circularity between ecl_boot and starting the garbage collector.
sysfun declarations revolve strictly around c function inlining that is specific
to the C backend.
Moreover be more explicit about symbol packages and check feature-conditioned
inlines at runtime (not at readtime) in case that we construct the inline
information for a cross-compiled target. This should be further improved.
- Spinlocks have been replaced by ordinary locks. Without access to
the underyling scheduler, spinlocks provide no performace benefit
and may even be harmful in case of high contention.
- Synchronization of process creation and exiting has been simplified.
Instead of a spinlock, a barrier and atomic operations we now use
only a single lock protecting the shared process state and a
condition variable for implementing process joins.
- Some locks which were implemented using Lisp objects now directly
use a native mutex.
- Our own mutex implementation has been removed as it is now unused.
The file symbols_list2.h was automatically generated from the file
symbols_list.h for dpp. This commit unifies said structure definition and
removes a step for generating symbols_list2.h.
From now on at runtime the structurecl_symbol_initializer has an additional
element storing the function name. That will help solving #543.
Announcement proposal. When this is merged to the develop branch, then
we should make a PR against master and merge. Then we shall publish
tarballs and the announcement on the website.
The gmp manual (https://gmplib.org/manual/Custom-Allocation.html) states
> GMP may use allocated blocks to hold pointers to other allocated
blocks. This will limit the assumptions a conservative garbage
collection scheme can make.
Thus we can't use ecl_alloc_atomic. We could just use ecl_alloc
instead, however our implementation is already structured in such a
way that it is sufficient to use ecl_alloc_uncollectable. The reason
for that is that currently all bignums except those in the bignum
registers in the thread local environment are allocated as compact
objects so that we only need to call mpz_clear for the few non-compact
objects in the bignum registers.
See also commits 7b536161 and bd48b859.
Fixes#485.
Previously: unconditionally use the size from ECL_OPT_C_STACK_SIZE if
it is larger than the OS provided value and if possible resize the
stack at runtime.
Now: Use ECL_OPT_C_STACK_SIZE if provided. Otherwise, use a) the OS
provided value if we can resize the stack at runtime (for Unix) or b)
the new build option ECL_DEFAULT_C_STACK_SIZE (1 MB) if we can set the
stack size at link time (for Windows).
MS link.exe can pick the right crt libraries according to the compiler flags,
such as /MD, /MDd etc.
So we remove them to keep the command line tidy and clean.
This is a canary which errors when code needs to be adjusted. When
appropriate definitions are added the error condition should be
changed accordingly.
Because that needs the DbgHelp library, an additional make
option has been defined for users, who don't want to link to this
library. Some msvc Makefile cleanup has also been done.
- unicode name tables are always compiled in when we have unicode support
- thread local variables support is removed
- profile and rt contribs are deprecated
because windows using utf16 internally, by using 16bit unicode chararcter,
there is no need to convert ecl_character to wchar_t in embedding
environment.
It didn't work for some cases and wasn't documented, so I'm removing
it. Freshly written tests are left in tests for someone, who would
like to reimplement them.
Old MSVC apparently things, that char = unsigned char. Add explicit
prefixes to typedefs.
This is backward-compatibility fix, because this version of msvc doesn't
support some c99 types.
Reported and fixed by Jón Hallur Haraldsson.