1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-09 21:40:33 +02:00

Update NEWS for 2.2.3

* NEWS: Update.
This commit is contained in:
Andy Wingo 2017-12-01 11:34:58 +01:00
parent 19c0e30243
commit ca4d16c7dc

92
NEWS
View file

@ -8,7 +8,7 @@ Please send Guile bug reports to bug-guile@gnu.org.
Changes in 2.2.3 (since 2.2.2):
* New interfaces
* New interfaces and functionality
** (web uri) module has better support for RFC 3986
@ -22,6 +22,53 @@ Identifiers" in the manual, for more.
These procedures should be used when accessing struct fields with type
`u' (unboxed). See "Structure Basics" in the manual, for full details.
** Improved support for arrays with non-zero lower bounds
Thanks to work by Daniel Llorens, Guile no longer exhibits buggy
behavior in "sort" or "sort!" on arrays with non-zero lower dimension
bounds. Arrays with non-zero lower dimension bounds are now allowed for
array-slice-for-each, and truncated-print now supports bitvectors and
arrays with non-zero lower bounds. General arrays are now supported as
well for random:hollow-sphere!.
** Add `uintptr_t' and `intptr_t' to FFI types.
See "Foreign Types" in the manual for full details.
* Compiler improvements
** Improve speed of compiler backend for functions without loops
This is a marginal speed improvement, especially for code compiled with
optimization level "-O1" or below.
** Disable slot pre-coloring for optimization level "-O1" or below
This improves the speed of the compiler backend.
** Improve complexity of constant subexpression elimination pass
This is a large speed improvement when compiling large files with the
default "-O2" pass.
** CPS conversion avoids generating return arity adapters if possible
In Guile, the expression in (define a EXP) may return 1 or more values.
This value elision in "value" context is implicit earlier in the Guile
compiler, in Tree-IL, but is made explicit in the CPS middle-end
language by the addition of the equivalent of explicit call-with-values
continuations that ignore additional values. However in many cases we
can avoid generating these extra continuations if we know that EXP is
single-valued, as is the case for example for constants or variable
references or the like.
Although these "arity-adapting continuations" would be removed by dead
code elimination at optimization level "-O2" or above, they were still
being needlessly generated in the first place. Guile now avoids
generating them, speeding up not only the optimizer at -O2 but also the
entire compiler pipeline at -O1 or below, as well as improving the
residual code at -O1 or below.
* New deprecations
** Using `uri?' as a predicate on relative-refs deprecated
@ -75,7 +122,7 @@ slot values manually on initialization.
** Struct fields with opaque ("o") protection deprecated
Struct fields are declared with a "protection", meaning read-only ('r'),
read-write ('w'), or opaque ('o'). There is also "hidden" ('o') which
read-write ('w'), or opaque ('o'). There is also "hidden" ('h') which
is read-write but which isn't initialized by arguments passed to
`make-struct/no-tail', but that's a detail. Opaque struct fields were
used to allocate storage in a struct that could only be accessed by C.
@ -92,6 +139,47 @@ Use the new `struct-ref/unboxed' and `struct-set!/unboxed' instead.
* Bug fixes
** guile.m4 now checks for Guile 2.2 by default
Before, it was still preferring Guile 2.0. It now also supports the
Guile 3.0 prereleases.
** Fix setting breakpoints from the REPL
** Allow GDB support to be used with GDB linked against Guile 2.0.
** Fix deadlock in `readdir' on error.
** Fix crash on ia64 during thread switches.
** Fix bug inferring range of `logand' computations with negative numbers
** Fix bug when issuing HTTP requests through proxies.
** Refactor weak hash table implementation to be more robust
Guile 2.2's weak hash table implementation had three big problems. The
first was a bug causing these tables to leak memory when they would be
resized. The second was that the implementation was designed so that
tables should be visited by the mark phase of the garbage collector in
one big piece. This could cause the garbage collector to see too many
newly marked objects at once, causing inefficies in garbage collection.
Finally, the way in which lost weak references were ultimately removed
from weak tables caused a race between the finalizer threads and the
mutator threads, leading to unbounded excess space retention in
pathological cases. All of this problems have been fixed.
** Allow garbage collection of revealed file ports
Guile can mark a file port as "revealed" if Scheme has been given access
to the file descriptor. In that case, the file descriptor will not be
closed when the port is garbage-collected. However we had a bug that
for revealed ports prevented the port from ever being garbage-collected,
leading to memory leaks of Guile's internal port buffers. This is now
fixed.
** Fix put-bytevector, unget-bytevector with start == bytevector length
** Enable GNU Readline 7.0's support for "bracketed paste".
Before, when pasting an expression that contained TAB characters into