summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-08-15 12:49:44 +0200
committerAndy Wingo <wingo@pobox.com>2009-08-15 12:49:55 +0200
commitacf04ab4621d9b558f0c403897d36ef9369d1dfc (patch)
treeec528d76ea243d68fc90c608fcb96fae20d927b6
parent7577d1c4bac443a6cf220cbdbf0d637b6d388431 (diff)
downloadguile-acf04ab4621d9b558f0c403897d36ef9369d1dfc.tar.gz
update NEWS for 1.9.2
* NEWS: Update.
-rw-r--r--NEWS118
1 files changed, 65 insertions, 53 deletions
diff --git a/NEWS b/NEWS
index 96c3a9b1d..f8aea59ec 100644
--- a/NEWS
+++ b/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
-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.
+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.
-** EBCDIC support is removed.
+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.
-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.
+The VM has new special-case operations, `add1' and `sub1'.
-Changes in 1.9.1 (since the 1.9.0 prerelease):
+** VM robustness improvements
-** `scm_set_port_seek' and `scm_set_port_truncate' use the `scm_t_off' type
+The maximum number of live local variables has been increased from 256
+to 65535.
-Previously they would use the `off_t' type, which is fragile since its
-definition depends on the application's value for `_FILE_OFFSET_BITS'.
+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.
-** Automatically compiled files will be placed in ~/.cache, not ~/.guile-ccache.
+Some lingering cases in which the VM could perform unaligned accesses
+have been fixed.
-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.
+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.
-** New language: Brainfuck.
+** Compiler optimizations
-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.
+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.
-** A number of Scheme files were corrected to be LGPLv3+.
+** Compiler robustness
-Some Scheme files imported for the compiler were erroneously labeled as
-being LGPLv2+ or GPLv2+. This oversight has been fixed.
+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)'.
-** Bytevectors may now be accessed with a C-friendly API.
+** Incomplete support for Unicode characters and strings
-New functions: `scm_is_bytevector ()', `scm_c_bytevector_length ()',
-`scm_c_bytevector_length ()', and `scm_c_bytevector_set_x ()'. See the
-manual for details.
+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.
-** Bytevectors are now accessible using the generalized-vector API.
+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.
-As a side effect, this change allows compilation of literal bytevectors
-(`#vu8(...)').
+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.
-** Meta-commands to the REPL work better with strange languages.
+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.
-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.
+** `defined?' may accept a module as its second argument
-** The object code file format has changed.
+Previously it only accepted internal structures from the evaluator.
-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.
+** `let-values' is now implemented with a hygienic macro
-** Vector access has been sped up considerably.
+This could have implications discussed below in the NEWS entry titled,
+"Lexical bindings introduced by hygienic macros may not be referenced by
+nonhygienic macros".
-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.
+** Global variables `scm_charnames' and `scm_charnums' are removed
-In the next release, we hope to extend this speedup to other kinds of
-uniform vectors.
+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.
-** The `long_long' C type, deprecated in 1.8, has been removed.
+** EBCDIC support is removed
-** And of course, the usual collection of bugfixes.
+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.
+** 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)