mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-07 18:30:25 +02:00
update NEWS for 1.9.2
* NEWS: Update.
This commit is contained in:
parent
7577d1c4ba
commit
acf04ab462
1 changed files with 80 additions and 68 deletions
148
NEWS
148
NEWS
|
@ -10,87 +10,99 @@ prerelease, and a full NEWS corresponding to 1.8 -> 2.0.)
|
|||
|
||||
Changes in 1.9.2 (since the 1.9.1 prerelease):
|
||||
|
||||
** Global variables `scm_charnames' and `scm_charnums' are removed.
|
||||
** VM speed improvements
|
||||
|
||||
Closures now copy the free variables that they need into a flat vector
|
||||
instead of capturing all heap-allocated variables. This speeds up access
|
||||
to free variables, avoids unnecessary garbage retention, and allows all
|
||||
variables to be allocated on the stack.
|
||||
|
||||
Variables which are `set!' are now allocated on the stack, but in
|
||||
"boxes". This allows a more uniform local variable allocation
|
||||
discipline, and allows faster access to these variables.
|
||||
|
||||
The VM has new special-case operations, `add1' and `sub1'.
|
||||
|
||||
** VM robustness improvements
|
||||
|
||||
The maximum number of live local variables has been increased from 256
|
||||
to 65535.
|
||||
|
||||
The default VM stack size is 64 kilo-words, up from 16 kilo-words. This
|
||||
allows more programs to execute in the default stack space. In the
|
||||
future we will probably implement extensible stacks via overflow
|
||||
handlers.
|
||||
|
||||
Some lingering cases in which the VM could perform unaligned accesses
|
||||
have been fixed.
|
||||
|
||||
The address range for relative jumps has been expanded from 16-bit
|
||||
addresses to 19-bit addresses via 8-byte alignment of jump targets. This
|
||||
will probably change to a 24-bit byte-addressable strategy before Guile
|
||||
2.0.
|
||||
|
||||
** Compiler optimizations
|
||||
|
||||
Procedures bound by `letrec' are no longer allocated on the heap,
|
||||
subject to a few constraints. In many cases, procedures bound by
|
||||
`letrec' and `let' can be rendered inline to their parent function, with
|
||||
loop detection for mutually tail-recursive procedures.
|
||||
|
||||
Unreferenced variables are now optimized away.
|
||||
|
||||
** Compiler robustness
|
||||
|
||||
Guile may now warn about unused lexically-bound variables. Pass
|
||||
`-Wunused-variable' to `guile-tools compile', or `#:warnings
|
||||
(unused-variable)' within the #:opts argument to the `compile' procedure
|
||||
from `(system base compile)'.
|
||||
|
||||
** Incomplete support for Unicode characters and strings
|
||||
|
||||
Preliminary support for Unicode has landed. Characters may be entered in
|
||||
octal format via e.g. `#\454', or created via (integer->char 300). A hex
|
||||
external representation will probably be introduced at some point.
|
||||
|
||||
Internally, strings are now represented either in the `latin-1'
|
||||
encoding, one byte per character, or in UTF-32, with four bytes per
|
||||
character. Strings manage their own allocation, switching if needed.
|
||||
|
||||
Currently no locale conversion is performed. Extended characters may be
|
||||
written in a string using the hexadecimal escapes `\xXX', `\uXXXX', or
|
||||
`\UXXXXXX', for 8-bit, 16-bit, or 24-bit codepoints, respectively.
|
||||
|
||||
This support is obviously incomplete. Many C functions have not yet been
|
||||
updated to deal with the new representations. Users are advised to wait
|
||||
for the next release for more serious use of Unicode strings.
|
||||
|
||||
** `defined?' may accept a module as its second argument
|
||||
|
||||
Previously it only accepted internal structures from the evaluator.
|
||||
|
||||
** `let-values' is now implemented with a hygienic macro
|
||||
|
||||
This could have implications discussed below in the NEWS entry titled,
|
||||
"Lexical bindings introduced by hygienic macros may not be referenced by
|
||||
nonhygienic macros".
|
||||
|
||||
** Global variables `scm_charnames' and `scm_charnums' are removed
|
||||
|
||||
These variables contained the names of control characters and were
|
||||
used when writing characters. While these were global, they were
|
||||
never intended to be public API. They have been replaced with private
|
||||
functions.
|
||||
|
||||
** EBCDIC support is removed.
|
||||
** EBCDIC support is removed
|
||||
|
||||
There was an EBCDIC compile flag that altered some of the character
|
||||
processing. It appeared that full EBCDIC support was never completed
|
||||
and was unmaintained.
|
||||
|
||||
Changes in 1.9.1 (since the 1.9.0 prerelease):
|
||||
|
||||
** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type
|
||||
|
||||
Previously they would use the `off_t' type, which is fragile since its
|
||||
definition depends on the application's value for `_FILE_OFFSET_BITS'.
|
||||
|
||||
** Automatically compiled files will be placed in ~/.cache, not ~/.guile-ccache.
|
||||
|
||||
Actually, they will be placed in $XDG_CACHE_HOME/guile/ccache/1.9,
|
||||
defaulting to XDG_CACHE_HOME=~/.cache. Users may remove their
|
||||
~/.guile-ccache directories.
|
||||
|
||||
** New language: Brainfuck.
|
||||
|
||||
Brainfuck is a toy language that closely models Turing machines. Guile's
|
||||
brainfuck compiler is meant to be an example of implementing other
|
||||
languages. See the manual for details, or
|
||||
http://en.wikipedia.org/wiki/Brainfuck for more information about the
|
||||
Brainfuck language itself.
|
||||
|
||||
** A number of Scheme files were corrected to be LGPLv3+.
|
||||
|
||||
Some Scheme files imported for the compiler were erroneously labeled as
|
||||
being LGPLv2+ or GPLv2+. This oversight has been fixed.
|
||||
|
||||
** Bytevectors may now be accessed with a C-friendly API.
|
||||
|
||||
New functions: `scm_is_bytevector ()', `scm_c_bytevector_length ()',
|
||||
`scm_c_bytevector_length ()', and `scm_c_bytevector_set_x ()'. See the
|
||||
manual for details.
|
||||
|
||||
** Bytevectors are now accessible using the generalized-vector API.
|
||||
|
||||
As a side effect, this change allows compilation of literal bytevectors
|
||||
(`#vu8(...)').
|
||||
|
||||
** Meta-commands to the REPL work better with strange languages.
|
||||
|
||||
Specifically, meta-commands that take expressions as arguments will use
|
||||
the current language's reader to read those expressions, which may span
|
||||
multiple lines, with readline integration if the user has that enabled.
|
||||
|
||||
** The object code file format has changed.
|
||||
|
||||
The objcode loader will complain about a "bad header cookie" if it
|
||||
happens to find an old file. The workaround for that is currently to
|
||||
find all stale .go files and remove them. This is likely to affect users
|
||||
who have checked out Guile's git repository, not those that build from
|
||||
tarballs.
|
||||
|
||||
** Vector access has been sped up considerably.
|
||||
|
||||
Guile's virtual machine now has vector and bytevector operations. Using
|
||||
Guile to process large amounts of data is now easier. This is because
|
||||
`vector-ref' and `vector-set!' now have fast opcodes. In addition, there
|
||||
are opcodes for `ref' and `set' operations on bytevectors for everything
|
||||
from 8-bit integers to 64-bit floating-point values.
|
||||
|
||||
In the next release, we hope to extend this speedup to other kinds of
|
||||
uniform vectors.
|
||||
|
||||
** The `long_long' C type, deprecated in 1.8, has been removed.
|
||||
|
||||
** And of course, the usual collection of bugfixes.
|
||||
|
||||
** And of course, the usual collection of bugfixes
|
||||
|
||||
Interested users should see the ChangeLog for more information.
|
||||
|
||||
|
||||
Changes in 1.9.x (since the 1.8.x series):
|
||||
|
||||
* New modules (see the manual for details)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue