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:
parent
19c0e30243
commit
ca4d16c7dc
1 changed files with 90 additions and 2 deletions
92
NEWS
92
NEWS
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue