mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 04:40:29 +02:00
Update NEWS
* NEWS: Update.
This commit is contained in:
parent
9de674e6e6
commit
e15f3e3328
1 changed files with 55 additions and 10 deletions
65
NEWS
65
NEWS
|
@ -25,13 +25,28 @@ Notably, weak hash tables are now transparently thread-safe. Ports are
|
||||||
also thread-safe; see "New interfaces" below for details on the changes
|
also thread-safe; see "New interfaces" below for details on the changes
|
||||||
to the C interface.
|
to the C interface.
|
||||||
|
|
||||||
|
** Better space-safety
|
||||||
|
|
||||||
|
It used to be the case that, when calling a Scheme procedure, the
|
||||||
|
procedure and arguments were always preserved against garbage
|
||||||
|
collection. This is no longer the case; Guile is free to collect the
|
||||||
|
procedure and arguments if they become unreachable, or to re-use their
|
||||||
|
slots for other local variables. Guile still offers good-quality
|
||||||
|
backtraces by determining the procedure being called from the
|
||||||
|
instruction pointer instead of from the value in slot 0 of an
|
||||||
|
application frame, and by using a live variable map that allows the
|
||||||
|
debugger to know which locals are live at all points in a frame.
|
||||||
|
|
||||||
** Off-main-thread finalization
|
** Off-main-thread finalization
|
||||||
|
|
||||||
Following Guile 2.0.6's change to invoke finalizers via asyncs, Guile
|
Following Guile 2.0.6's change to invoke finalizers via asyncs, Guile
|
||||||
2.2 takes the additional step of invoking finalizers from a dedicated
|
2.2 takes the additional step of invoking finalizers from a dedicated
|
||||||
finalizer thread, if threads are enabled. This avoids concurrency
|
finalizer thread, if threads are enabled. This avoids concurrency
|
||||||
issues between finalizers and application code, and also speeds up
|
issues between finalizers and application code, and also speeds up
|
||||||
finalization.
|
finalization. If your application's finalizers are not robust to the
|
||||||
|
presence of threads, see "Foreign Objects" in the manual for information
|
||||||
|
on how to disable automatic finalization and instead run finalizers
|
||||||
|
manually.
|
||||||
|
|
||||||
** Better locale support in Guile scripts
|
** Better locale support in Guile scripts
|
||||||
|
|
||||||
|
@ -65,6 +80,12 @@ loop that collect its results in reverse order only to re-reverse them
|
||||||
at the end, now you can just recurse without worrying about stack
|
at the end, now you can just recurse without worrying about stack
|
||||||
overflows.
|
overflows.
|
||||||
|
|
||||||
|
** Out-of-memory improvements
|
||||||
|
|
||||||
|
Instead of aborting, failures to allocate memory will now raise an
|
||||||
|
unwind-only `out-of-memory' exception, and cause the corresponding
|
||||||
|
`catch' expression to run garbage collection in order to free up memory.
|
||||||
|
|
||||||
* Performance improvements
|
* Performance improvements
|
||||||
|
|
||||||
** Faster programs via new virtual machine
|
** Faster programs via new virtual machine
|
||||||
|
@ -95,9 +116,11 @@ as well. See "Object File Format" in the manual, for full details.
|
||||||
Guile's compiler now uses a Continuation-Passing Style (CPS)
|
Guile's compiler now uses a Continuation-Passing Style (CPS)
|
||||||
intermediate language, allowing it to reason easily about temporary
|
intermediate language, allowing it to reason easily about temporary
|
||||||
values and control flow. Examples of optimizations that this permits
|
values and control flow. Examples of optimizations that this permits
|
||||||
are optimal contification, dead code elimination, parallel moves with at
|
are optimal contification, optimal common subexpression elimination,
|
||||||
most one temporary, and allocation of stack slots using precise liveness
|
dead code elimination, parallel moves with at most one temporary,
|
||||||
information. For more, see "Continuation-Passing Style" in the manual.
|
allocation of stack slots using precise liveness information, and
|
||||||
|
closure optimization. For more, see "Continuation-Passing Style" in the
|
||||||
|
manual.
|
||||||
|
|
||||||
** Faster interpreter
|
** Faster interpreter
|
||||||
|
|
||||||
|
@ -125,6 +148,12 @@ its string hash, and Thomas Wang's integer hash function for `hashq' and
|
||||||
`hashv'. These functions produce much better hash values across all
|
`hashv'. These functions produce much better hash values across all
|
||||||
available fixnum bits.
|
available fixnum bits.
|
||||||
|
|
||||||
|
** Optimized generic array facility
|
||||||
|
|
||||||
|
Thanks to work by Daniel Llorens, the generic array facility is much
|
||||||
|
faster now, as it is internally better able to dispatch on the type of
|
||||||
|
the underlying backing store.
|
||||||
|
|
||||||
* New interfaces
|
* New interfaces
|
||||||
|
|
||||||
** New `cond-expand' feature: `guile-2.2'
|
** New `cond-expand' feature: `guile-2.2'
|
||||||
|
@ -180,10 +209,6 @@ For more on `SCM_HAS_TYP7', `SCM_HAS_TYP7S', `SCM_HAS_TYP16', see XXX.
|
||||||
the old `SCM2PTR' and `PTR2SCM'. Also, `SCM_UNPACK_POINTER' yields a
|
the old `SCM2PTR' and `PTR2SCM'. Also, `SCM_UNPACK_POINTER' yields a
|
||||||
void*.
|
void*.
|
||||||
|
|
||||||
** `scm_c_weak_vector_ref', `scm_c_weak_vector_set_x'
|
|
||||||
|
|
||||||
Weak vectors can now be accessed from C using these accessors.
|
|
||||||
|
|
||||||
** <standard-vtable>, standard-vtable-fields
|
** <standard-vtable>, standard-vtable-fields
|
||||||
|
|
||||||
See "Structures" in the manual for more on these
|
See "Structures" in the manual for more on these
|
||||||
|
@ -340,15 +365,35 @@ of compiling to objcode and then calling `make-program', now the way to
|
||||||
do it is to compile to `bytecode' and then call `load-thunk-from-memory'
|
do it is to compile to `bytecode' and then call `load-thunk-from-memory'
|
||||||
from `(system vm loader)'.
|
from `(system vm loader)'.
|
||||||
|
|
||||||
** Remove weak pairs.
|
** Weak pairs removed
|
||||||
|
|
||||||
Weak pairs were not safe to access with `car' and `cdr', and so were
|
Weak pairs were not safe to access with `car' and `cdr', and so were
|
||||||
removed.
|
removed.
|
||||||
|
|
||||||
** Remove weak alist vectors.
|
** Weak alist vectors removed
|
||||||
|
|
||||||
Use weak hash tables instead.
|
Use weak hash tables instead.
|
||||||
|
|
||||||
|
** Weak vectors may no longer be accessed via `vector-ref' et al
|
||||||
|
|
||||||
|
Weak vectors may no longer be accessed with the vector interface. This
|
||||||
|
was a source of bugs in the 2.0 Guile implementation, and a limitation
|
||||||
|
on using vectors as building blocks for other abstractions. Vectors in
|
||||||
|
Guile are now a concrete type; for an abstract interface, use the
|
||||||
|
generic array facility (`array-ref' et al).
|
||||||
|
|
||||||
|
** scm_t_array_implementation removed
|
||||||
|
|
||||||
|
This interface was introduced in 2.0 but never documented. It was a
|
||||||
|
failed attempt to layer the array implementation that actually
|
||||||
|
introduced too many layers, as it prevented the "vref" and "vset"
|
||||||
|
members of scm_t_array_handle (called "ref" and "set" in 1.8, not
|
||||||
|
present in 2.0) from specializing on array backing stores.
|
||||||
|
|
||||||
|
Notably, the definition of scm_t_array_handle has now changed, to not
|
||||||
|
include the (undocumented) "impl" member. We are sorry for any
|
||||||
|
inconvenience this may cause.
|
||||||
|
|
||||||
* New deprecations
|
* New deprecations
|
||||||
|
|
||||||
** SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1, SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_N
|
** SCM_WTA_DISPATCH_0, SCM_WTA_DISPATCH_1, SCM_WTA_DISPATCH_2, SCM_WTA_DISPATCH_N
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue