update NEWS
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 225a4ef..ad0910c 100644 (file)
--- a/NEWS
+++ b/NEWS
 Guile NEWS --- history of user-visible changes.
-Copyright (C) 1996-2011 Free Software Foundation, Inc.
+Copyright (C) 1996-2012 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
 
 
-Changes in 2.0.1 (since 2.0.0):
-
+Changes in 2.0.4 (since 2.0.3):
 
+* Notable changes
 
-* New modules (see the manual for details)
+** Better debuggability for interpreted procedures.
+    
+Guile 2.0 came with a great debugging experience for compiled
+procedures, but the story for interpreted procedures was terrible.  Now,
+at least, interpreted procedures have names, and the `arity' procedure
+property is always correct (or, as correct as it can be, in the presence
+of `case-lambda').
 
-** `(ice-9 binary-ports)', XXX
+** Support for cross-compilation.
     
-* Memory leak fixes
+One can now use a native Guile to cross-compile `.go' files for a
+different architecture.  See the documentation for `--target' in the
+"Compilation" section of the manual, for information on how to use the
+cross-compiler.  See the "Cross building Guile" section of the README,
+for more on how to cross-compile Guile itself.
 
-close-port leaking iconv_t    
+** The return of `local-eval'.
 
-weak hash table pumping
+Back by popular demand, `the-environment' and `local-eval' allow the
+user to capture a lexical environment, and then evaluate arbitrary
+expressions in that context.  There is also a new `local-compile'
+command.  See "Local Evaluation" in the manual, for more.  Special
+thanks to Mark Weaver for an initial implementation of this feature.
 
-* doc work
+** Fluids can now have default values.
 
-goops mop
+Fluids are used for dynamic and thread-local binding.  They have always
+inherited their values from the context or thread that created them.
+However, there was a case in which a new thread would enter Guile, and
+the default values of all the fluids would be `#f' for that thread.
 
-* guile.m4 supports linking with rpath
-    
-    * guile.m4 (GUILE_FLAGS): Also set GUILE_LIBS and GUILE_LTLIBS. Fix
-      documentation.
+This has now been fixed so that `make-fluid' has an optional default
+value for fluids in unrelated dynamic roots, which defaults to `#f'.
 
-* Add omitted exports from `(ice-9 vlist)'.
-    
-    * module/ice-9/vlist.scm: Export `vhash-delq' and `vhash-delv'.
+** Garbage collector tuning.
 
-*    re-enable the after-gc-hook
-    
-*    chi-top-sequence defines macros before expanding other exps
-    
-(begin
-  (define even?
-    (lambda (x)
-      (or (= x 0) (odd? (- x 1)))))
-  (define-syntax odd?
-    (syntax-rules ()
-      ((odd? x) (not (even? x)))))
-  (even? 10))
+The garbage collector has now been tuned to run more often under some
+circumstances.
+
+*** Unmanaged allocation
+
+The new `scm_gc_register_allocation' function will notify the collector
+of unmanaged allocation.  This will cause the collector to run sooner.
+Guile's `scm_malloc', `scm_calloc', and `scm_realloc' unmanaged
+allocators eventually call this function.  This leads to better
+performance under steady-state unmanaged allocation.
 
-*    flush all input on a read error
+*** Transient allocation
     
-    * module/system/repl/repl.scm (flush-all-input): New helper.
-      (prompting-meta-read): Flush all input on a read error, as we could be
-      within some expression or a string or something.
+When the collector runs, it will try to record the total memory
+footprint of a process, if the platform supports this information.  If
+the memory footprint is growing, the collector will run more frequently.
+This reduces the increase of the resident size of a process in response
+to a transient increase in allocation.
 
-*    repl.scm understands comments
+*** Management of threads, bignums
+
+Creating a thread will allocate a fair amount of memory.  Guile now does
+some GC work (using `GC_collect_a_little') when allocating a thread.
+This leads to a better memory footprint when creating many short-lived
+threads.
+    
+Similarly, bignums can occupy a lot of memory.  Guile now offers hooks
+to enable custom GMP allocators that end up calling
+`scm_gc_register_allocation'.  These allocators are enabled by default
+when running Guile from the command-line.  To enable them in libraries,
+set the `scm_install_gmp_memory_functions' variable to a nonzero value
+before loading Guile.
+
+** SRFI-39 parameters are available by default.
     
-    * module/system/repl/repl.scm (read-comment, read-scheme-line-comment)
-      (read-scheme-datum-comment): New helpers.
-      (meta-reader): Take a language instead of a reader.  If we have a
-      nonwhitespace char, first check to see that it's a comment, and if so,
-      read it off and loop.
-      (prompting-meta-read): Call meta-reader with the lang.
-
-*    Add ,width meta-command to set screen width in debug output
+Guile now includes support for parameters, as defined by SRFI-39, in the
+default environment.  See "Parameters" in the manual, for more
+information.  `current-input-port', `current-output-port', and
+`current-error-port' are now parameters.
     
-terminal-width by default
+** Add `current-warning-port'.
+    
+Guile now outputs warnings on a separate port, `current-warning-port',
+initialized to the value that `current-error-port' has on startup.
 
-* man page updates
+** Syntax parameters.
 
-Mark Harig
+Following Racket's lead, Guile now supports syntax parameters.  See
+"Syntax parameters" in the manual, for more.
 
-* add ice-9 eval-string
+Also see Barzilay, Culpepper, and Flatt's 2011 SFP workshop paper,
+"Keeping it Clean with syntax-parameterize".
+    
+** Parse command-line arguments from the locale encoding.
     
-Fly Evaluation in the manual
+Guile now attempts to parse command-line arguments using the user's
+locale.  However for backwards compatibility with other 2.0.x releases,
+it does so without actually calling `setlocale'.  Please report any bugs
+in this facility to bug-guile@gnu.org.
+
+** One-armed conditionals: `when' and `unless'
+
+Guile finally has `when' and `unless' in the default environment.  Use
+them whenever you would use an `if' with only one branch.  See
+"Conditionals" in the manual, for more.
+
+** `current-filename', `add-to-load-path'
+
+There is a new form, `(current-filename)', which expands out to the
+source file in which it occurs.  Combined with the new
+`add-to-load-path', this allows simple scripts to easily add nearby
+directories to the load path.  See "Load Paths" in the manual, for more.
+
+** `random-state-from-platform'
+
+This procedure initializes a random seed using good random sources
+available on your platform, such as /dev/urandom.  See "Random Number
+Generation" in the manual, for more.
+
+* New interfaces
+
+** (ice-9 session): `apropos-hook'
+** New print option: `escape-newlines', defaults to #t.
+** (ice-9 ftw): `file-system-fold', `file-system-tree', `scandir'
+** `scm_c_value_ref': access to multiple returned values from C
+** Some new syntax helpers in (system syntax)
+
+Search the manual for these identifiers and modules, for more.
+
+* Build fixes
+
+** FreeBSD build fixes.
+** OpenBSD compilation fixes.
+** Solaris 2.10 test suite fixes.
+** IA64 compilation fix.
+** MinGW build fixes.
+** Work around instruction reordering on SPARC and HPPA in the VM.
+** Gnulib updates: added `dirfd', `setenv' modules.
+
+* Bug fixes
+
+** Add a deprecated alias for $expt.
+** Add an exception printer for `getaddrinfo-error'.
+** Add deprecated shim for `scm_display_error' with stack as first argument.
+** Add warnings for unsupported `simple-format' options.
+** Allow overlapping regions to be passed to `bytevector-copy!'.
+** Avoid calling `u32_conv_from_encoding' on the null string.
+** Better function prologue disassembly
+** Compiler: fix miscompilation of (values foo ...) in some contexts.
+** Compiler: fix serialization of #nil-terminated lists.
+** Compiler: allow values bound in non-tail let expressions to be collected.
+** Deprecate SCM_ASRTGO.
+** Document invalidity of (begin) as expression; add back-compat shim.
+** Don't leak file descriptors when mmaping objcode.
+** Empty substrings no longer reference the original stringbuf.
+** FFI: Fix `set-pointer-finalizer!' to leave the type cell unchanged.
+** FFI: Fix signed/unsigned pointer mismatches in implementation.
+** FFI: Hold a weak reference to the CIF made by `procedure->pointer'.
+** FFI: Hold a weak reference to the procedure passed to `procedure->pointer'.
+** FFI: Properly unpack small integer return values in closure call.
+** Fix R6RS `fold-left' so the accumulator is the first argument.
+** Fix `validate-target' in (system base target).
+** Fix bit-set*! bug from 2005.
+** Fix bug in `make-repl' when `lang' is actually a <language>.
+** Fix bugs related to mutation, the null string, and shared substrings.
+** Fix <dynwind> serialization.
+** Fix erroneous check in `set-procedure-properties!'.
+** Fix generalized-vector-{ref,set!} for slices.
+** HTTP: Extend handling of "Cache-Control" header.
+** HTTP: Fix qstring writing of cache-extension values
+** HTTP: Fix validators for various list-style headers.
+** HTTP: Permit non-date values for Expires header.
+** HTTP: `write-request-line' writes absolute paths, not absolute URIs.
+** Hack the port-column of current-output-port after printing a prompt.
+** Have `cpu-word-size' error out on unknown CPUs; add support for MIPSEL.
+** Make sure `regexp-quote' tests use Unicode-capable string ports.
+** Peval: Fix bugs in the new optimizer.
+** Peval: fold (values FOO) to FOO in more cases
+** Statistically unique marks and labels, for robust hygiene across sessions.
+** Web: Allow URIs with empty authorities, like "file:///etc/hosts".
+** `,language' at REPL sets the current-language fluid.
+** `primitive-load' returns the value(s) of the last expression.
+** `scm_from_stringn' always returns unique strings.
+** `scm_i_substring_copy' tries to narrow the substring.
+** guile-readline: Clean `.go' files.
+** i18n: Fix gc_malloc/free mismatch on non-GNU systems.
+
+Changes in 2.0.3 (since 2.0.2):
+
+* Speed improvements
+
+** Guile has a new optimizer, `peval'.
+
+`Peval' is a partial evaluator that performs constant folding, dead code
+elimination, copy propagation, and inlining.  By default it runs on
+every piece of code that Guile compiles, to fold computations that can
+happen at compile-time, so they don't have to happen at runtime.
+
+If we did our job right, the only impact you would see would be your
+programs getting faster.  But if you notice slowdowns or bloated code,
+please send a mail to bug-guile@gnu.org with details.
+
+Thanks to William R. Cook, Oscar Waddell, and Kent Dybvig for inspiring
+peval and its implementation.
+
+You can see what peval does on a given piece of code by running the new
+`,optimize' REPL meta-command, and comparing it to the output of
+`,expand'.  See "Compile Commands" in the manual, for more.
+
+** Fewer calls to `stat'.
+
+Guile now stats only the .go file and the .scm file when loading a fresh
+compiled file.
+
+* Notable changes
+
+** New module: `(web client)', a simple synchronous web client.
+
+See "Web Client" in the manual, for more.
+
+** Users can now install compiled `.go' files.
+
+See "Installing Site Packages" in the manual.
+
+** Remove Front-Cover and Back-Cover text from the manual.
+    
+The manual is still under the GNU Free Documentation License, but no
+longer has any invariant sections.
 
-* add scm_c_public_ref et al
+** More helpful `guild help'.
     
-    * libguile/modules.h:
-    * libguile/modules.c (scm_public_lookup, scm_private_lookup)
-      (scm_c_public_lookup, scm_c_private_lookup, scm_public_ref)
-      (scm_private_ref, scm_c_public_ref, scm_c_private_ref)
-      (scm_public_variable, scm_private_variable, scm_c_public_variable)
-      (scm_c_private_variable): New helpers to get at variables and values
-      in modules.
+`guild' is Guile's multi-tool, for use in shell scripting.  Now it has a
+nicer interface for querying the set of existing commands, and getting
+help on those commands.  Try it out and see!
+
+** New macro: `define-syntax-rule'
+
+`define-syntax-rule' is a shorthand to make a `syntax-rules' macro with
+one clause.  See "Syntax Rules" in the manual, for more.
 
-"Accessing Modules from C" in the manual
+** The `,time' REPL meta-command now has more precision.
 
-*    add scm_call_{5,6}
+The output of this command now has microsecond precision, instead of
+10-millisecond precision.
+
+** `(ice-9 match)' can now match records.
     
-    * doc/ref/api-evaluation.texi (Fly Evaluation): Document
-      scm_call_{5,6,n}.
+See "Pattern Matching" in the manual, for more on matching records.
+
+** New module: `(language tree-il debug)'.
 
-*    Add scm_from_latin1_keyword and scm_from_utf8_keyword
+This module provides a tree-il verifier.  This is useful for people that
+generate tree-il, usually as part of a language compiler.
+
+** New functions: `scm_is_exact', `scm_is_inexact'.
     
-    * doc/ref/api-data.texi: Document new functions.  Remind users that
-      scm_from_locale_keyword should not be used when the name is a C string
-      constant.  Change formal parameter from `str' to `name'.
+These provide a nice C interface for Scheme's `exact?' and `inexact?',
+respectively.
 
-* srfi-9 define-record-type in nested contexts
+* Bugs fixed
 
-* Add `get-string-n' and `get-string-n!' for binary and R6RS ports
+See the git log (or the ChangeLog) for more details on these bugs.
+
+** Fix order of importing modules and resolving duplicates handlers.
+** Fix a number of bugs involving extended (merged) generics.
+** Fix invocation of merge-generics duplicate handler.
+** Fix write beyond array end in arrays.c.
+** Fix read beyond end of hashtable size array in hashtab.c.
+** (web http): Locale-independent parsing and serialization of dates.
+** Ensure presence of Host header in HTTP/1.1 requests.
+** Fix take-right and drop-right for improper lists.
+** Fix leak in get_current_locale().
+** Fix recursive define-inlinable expansions.
+** Check that srfi-1 procedure arguments are procedures.
+** Fix r6rs `map' for multiple returns.
+** Fix scm_tmpfile leak on POSIX platforms.
+** Fix a couple of leaks (objcode->bytecode, make-boot-program).
+** Fix guile-lib back-compatibility for module-stexi-documentation.
+** Fix --listen option to allow other ports.
+** Fix scm_to_latin1_stringn for substrings.
+** Fix compilation of untyped arrays of rank not 1.
+** Fix unparse-tree-il of <dynset>.
+** Fix reading of #||||#.
+** Fix segfault in GOOPS when class fields are redefined.
+** Prefer poll(2) over select(2) to allow file descriptors above FD_SETSIZE.
 
-* rnrs io ports work
+\f
+Changes in 2.0.2 (since 2.0.1):
 
-Export `current-input-port', `current-output-port' and
-`current-error-port'.
-    
-    Enhance transcoder-related functionality of `(rnrs io ports)'
-    
-    * module/rnrs/io/ports.scm (transcoder-eol-style)
-      (transcoder-error-handling-mode): Export these.
-      (textual-port?): Implement this procedure and export it.
-    * module/rnrs.scm: Export these here as well.
+* Notable changes
+
+** `guile-tools' renamed to `guild'
     
-    * module/rnrs/io/ports.scm (port-transcoder): Implement this procedure.
-      (binary-port?): Treat only ports without an encoding as binary ports,
-      add docstring.
-      (standard-input-port, standard-output-port, standard-error-port):
-      Ensure these are created without an encoding.
-      (eol-style): Add `none' as enumeration member.
-      (native-eol-style): Switch to `none' from `lf'.
+The new name is shorter.  Its intended future use is for a CPAN-like
+system for Guile wizards and journeyfolk to band together to share code;
+hence the name.  `guile-tools' is provided as a backward-compatible
+symbolic link.  See "Using Guile Tools" in the manual, for more.
+
+** New control operators: `shift' and `reset'
     
-    * test-suite/tests/r6rs-ports.test (7.2.7 Input ports)
-      (8.2.10 Output ports): Test binary-ness of `standard-input-port',
-      `standard-output-port' and `standard-error-port'.
-      (8.2.6 Input and output ports): Add test for `port-transcoder'.
+See "Shift and Reset" in the manual, for more information.
+
+** `while' as an expression
     
-    doc: Remove "lack of support for Unicode I/O and strings".
+Previously the return value of `while' was unspecified.  Now its
+values are specified both in the case of normal termination, and via
+termination by invoking `break', possibly with arguments.  See "while
+do" in the manual for more.
+
+** Disallow access to handles of weak hash tables
     
-    * doc/ref/api-io.texi (R6RS I/O Ports): Remove 1.8ish comment.
+`hash-get-handle' and `hash-create-handle!' are no longer permitted to
+be called on weak hash tables, because the fields in a weak handle could
+be nulled out by the garbage collector at any time, but yet they are
+otherwise indistinguishable from pairs.  Use `hash-ref' and `hash-set!'
+instead.
 
-*    add pointer->scm, scm->pointer
+** More precision for `get-internal-run-time', `get-internal-real-time'
     
-    * libguile/foreign.c (scm_pointer_to_scm, scm_scm_to_pointer): New
-      functions, useful to pass and receive SCM values to and from foreign
-      functions.
+On 64-bit systems which support POSIX clocks, Guile's internal timing
+procedures offer nanosecond resolution instead of the 10-millisecond
+resolution previously available.  32-bit systems now use 1-millisecond
+timers.
+
+** Guile now measures time spent in GC
     
-    * module/system/foreign.scm: Export the new functions.
+`gc-stats' now returns a meaningful value for `gc-time-taken'.
+
+** Add `gcprof'
     
-    * doc/ref/api-foreign.texi (Foreign Variables): Add docs.
+The statprof profiler now exports a `gcprof' procedure, driven by the
+`after-gc-hook', to see which parts of your program are causing GC.  Let
+us know if you find it useful.
 
-* gc-stats update
+** `map', `for-each' and some others now implemented in Scheme
 
-add heap-allocated-since-gc; fix ,stat.
-    
-* allow ,option on-error report instead of debug
-    
-"System Commands" in the manual.
+We would not mention this in NEWS, as it is not a user-visible change,
+if it were not for one thing: `map' and `for-each' are no longer
+primitive generics.  Instead they are normal bindings, which can be
+wrapped by normal generics.  This fixes some modularity issues between
+core `map', SRFI-1 `map', and GOOPS.
 
-* Make VM string literals immutable.
-    
-* don't redirect pthread_create et al
+Also it's pretty cool that we can do this without a performance impact.
 
-    * libguile/bdw-gc.h: Don't do pthread redirects, because we don't want
-      to affect applications' pthread_* bindings.
+** Add `scm_peek_byte_or_eof'.
     
-    * libguile/pthread-threads.h (scm_i_pthread_create)
-      (scm_i_pthread_detach, scm_i_pthread_exit, scm_i_pthread_cancel)
-      (scm_i_pthread_sigmask): Do pthread redirects here, in this internal
-      header.
+This helper is like `scm_peek_char_or_eof', but for bytes instead of
+full characters.
 
-*    Document SRFI-23
+** Implement #:stop-at-first-non-option option for getopt-long
     
-     * doc/ref/srfi-modules.texi: mention that we support SRFI 23
-     * module/ice-9/boot-9.scm (%cond-expand-features): add srfi-23
+See "getopt-long Reference" in the manual, for more information.
 
-*    with-continuation-barrier calls exit(3) _after_ unwinding
+** Improve R6RS conformance for conditions in the I/O libraries
     
-    * libguile/continuations.c (scm_handler, c_handler)
-      (scm_c_with_continuation_barrier, scm_with_continuation_barrier):
-      Instead of calling scm_handle_by_message_noexit in the pre-unwind
-      handler, roll our own exception printing in the pre-unwind, and do to
-      exit()-on-quit in the post-unwind handler.  This lets the stack unwind
-      at exit-time so that pending dynwinds run.
-    
-    * test-suite/tests/continuations.test ("continuations"): Add a test.
+The `(rnrs io simple)' module now raises the correct R6RS conditions in
+error cases.  `(rnrs io ports)' is also more correct now, though it is
+still a work in progress.
 
-*    string->pointer and pointer->string have optional encoding arg
+** All deprecated routines emit warnings
     
-"Void Pointers and Byte Access" in the manual.
+A few deprecated routines were lacking deprecation warnings.  This has
+been fixed now.
 
-* Several optimizations for R6RS fixnum arithmetic
-    
-*    Move `define-inlinable' into the default namespace
-    
-    * module/ice-9/boot-9.scm (define-inlineable): Moved here from SRFI-9.
-    * module/srfi/srfi-9 (define-inlinable): Removed here.
-    
-    * doc/ref/api-procedures.texi (Inlinable Procedures): Add subsection
-      about `define-inlinable'.
+* Speed improvements
 
-*    Implement R6RS' `fixnum?' in a smarter way
-    
-    * module/rnrs/arithmetic/fixnums.scm (fixnum?): Implemented using
-      bit-twiddling, and using `define-inlinable'.
+** Constants in compiled code now share state better
 
-commit 882c89636a2a4afa26cff17c7cdbc1d8c1cb2745
-Author: Mark H Weaver <mhw@netris.org>
-Date:   Wed Apr 6 15:09:42 2011 -0400
+Constants with shared state, like `("foo")' and `"foo"', now share state
+as much as possible, in the entire compilation unit.  This cuts compiled
+`.go' file sizes in half, generally, and speeds startup.
 
-    Fix the R6RS exact-integer-sqrt and import into core guile
-    
-    * libguile/numbers.c (scm_exact_integer_sqrt): New C procedure to
-      compute exact integer square root and remainder.
-      (scm_i_exact_integer_sqrt): New Scheme procedure `exact-integer-sqrt'
-      from the R6RS, imported into core guile.
+** VLists: optimize `vlist-fold-right', and add `vhash-fold-right'
+
+These procedures are now twice as fast as they were.
+
+** UTF-8 ports to bypass `iconv' entirely
     
-    * libguile/numbers.h: Add prototypes.
+This reduces memory usage in a very common case.
+
+** Compiler speedups
+
+The compiler is now about 40% faster.  (Note that this is only the case
+once the compiler is itself compiled, so the build still takes as long
+as it did before.)
+
+** VM speed tuning
     
-    * module/rnrs/base.scm: Remove broken stub implementation, which would
-      fail badly when applied to large integers.
+Some assertions that were mostly useful for sanity-checks on the
+bytecode compiler are now off for both "regular" and "debug" engines.
+This together with a fix to cache a TLS access and some other tweaks
+improve the VM's performance by about 20%.
+
+** SRFI-1 list-set optimizations
+
+lset-adjoin and lset-union now have fast paths for eq? sets.
+
+** `memq', `memv' optimizations
+
+These procedures are now at least twice as fast than in 2.0.1.
+
+* Deprecations
+
+** Deprecate scm_whash API
     
-    * doc/ref/api-data.texi: Add documentation.
+`scm_whash_get_handle', `SCM_WHASHFOUNDP', `SCM_WHASHREF',
+`SCM_WHASHSET', `scm_whash_create_handle', `scm_whash_lookup', and
+`scm_whash_insert' are now deprecated.  Use the normal hash table API
+instead.
+
+** Deprecate scm_struct_table
     
-    * doc/ref/r6rs.texi: Change documentation for `exact-integer-sqrt' to a
-      stub that xrefs the core docs, as is done for other operations
-      available in core.
+`SCM_STRUCT_TABLE_NAME', `SCM_SET_STRUCT_TABLE_NAME',
+`SCM_STRUCT_TABLE_CLASS', `SCM_SET_STRUCT_TABLE_CLASS',
+`scm_struct_table', and `scm_struct_create_handle' are now deprecated.
+These routines formed part of the internals of the map between structs
+and classes.
+
+** Deprecate scm_internal_dynamic_wind
     
-    * test-suite/tests/numbers.test: Add tests.
+The `scm_t_inner' type and `scm_internal_dynamic_wind' are deprecated,
+as the `scm_dynwind' API is better, and this API encourages users to
+stuff SCM values into pointers.
+
+** Deprecate scm_immutable_cell, scm_immutable_double_cell
     
-    * NEWS: Add news entries.
+These routines are deprecated, as the GC_STUBBORN API doesn't do
+anything any more.
 
-commit adf43b3f081878860ed1d4d5091b9a432b44da90
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Mon Apr 11 10:13:48 2011 +0200
+* Manual updates
 
-    ignore SIGPIPE in (system repl server)
+Andreas Rottman kindly transcribed the missing parts of the `(rnrs io
+ports)' documentation from the R6RS documentation.  Thanks Andreas!
+
+* Bugs fixed
+
+** Fix double-loading of script in -ds case
+** -x error message fix
+** iconveh-related cross-compilation fixes
+** Fix small integer return value packing on big endian machines.
+** Fix hash-set! in weak-value table from non-immediate to immediate
+** Fix call-with-input-file & relatives for multiple values
+** Fix `hash' for inf and nan
+** Fix libguile internal type errors caught by typing-strictness==2
+** Fix compile error in MinGW fstat socket detection
+** Fix generation of auto-compiled file names on MinGW
+** Fix multithreaded access to internal hash tables
+** Emit a 1-based line number in error messages
+** Fix define-module ordering
+** Fix several POSIX functions to use the locale encoding
+** Add type and range checks to the complex generalized vector accessors
+** Fix unaligned accesses for bytevectors of complex numbers
+** Fix '(a #{.} b)
+** Fix erroneous VM stack overflow for canceled threads
     
-    * module/system/repl/server.scm (run-server): Ignore SIGPIPE when we run
-      a server, as otherwise a rudely disconnected client could cause the
-      server to quit.  Thanks to John Proctor for the report, and Detlev
-      Zundel for the debugging.
+\f
+Changes in 2.0.1 (since 2.0.0):
 
-commit 15671c6e7fd86160b415b5373b2c1539e23556f3
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Mon Apr 11 11:52:35 2011 +0200
+* Notable changes
 
-    refactor scm_i_print_symbol_name
+** guile.m4 supports linking with rpath
     
-    * libguile/print.c (symbol_has_extended_read_syntax)
-      (print_normal_symbol, print_extended_symbol, scm_i_print_symbol_name):
-      Factor scm_i_print_symbol_name into separate routines.  Add comments.
-      There are a number of bugs here.
+The GUILE_FLAGS macro now sets GUILE_LIBS and GUILE_LTLIBS, which
+include appropriate directives to the linker to include libguile-2.0.so
+in the runtime library lookup path.
 
-commit d9527cfafdad1046770437a7a59d3745e7243c67
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Mon Apr 11 12:48:06 2011 +0200
+** `begin' expands macros in its body before other expressions
 
-    read-extended-symbol handles backslash better, including r6rs hex escapes
+This enables support for programs like the following:
+
+    (begin
+      (define even?
+        (lambda (x)
+          (or (= x 0) (odd? (- x 1)))))
+      (define-syntax odd?
+        (syntax-rules ()
+          ((odd? x) (not (even? x)))))
+      (even? 10))
+
+** REPL reader usability enhancements
+
+The REPL now flushes input after a read error, which should prevent one
+error from causing other errors.  The REPL also now interprets comments
+as whitespace.
+
+** REPL output has configurable width
+
+The REPL now defaults to output with the current terminal's width, in
+columns.  See "Debug Commands" in the manual for more information on
+the ,width command.
+
+** Better C access to the module system
+
+Guile now has convenient C accessors to look up variables or values in
+modules and their public interfaces.  See `scm_c_public_ref' and friends
+in "Accessing Modules from C" in the manual.
+
+** Added `scm_call_5', `scm_call_6'
     
-    * libguile/read.c (scm_read_extended_symbol): Interpret '\' as an escape
-      character.  Due to some historical oddities we have to support '\'
-      before any character, but since we never emitted '\' in front of
-      "normal" characters like 'x' we can interpret "\x..;" to be an R6RS
-      hex escape.
+See "Fly Evaluation" in the manual.
+
+** Added `scm_from_latin1_keyword', `scm_from_utf8_keyword'
     
-    * test-suite/tests/reader.test ("#{}#"): Add tests.
+See "Keyword Procedures" in the manual, for more.  Note that
+`scm_from_locale_keyword' should not be used when the name is a C string
+constant.
 
-commit 2e9fc9fc73a8157152e6b2e122ec545d96478c2a
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Mon Apr 11 13:38:27 2011 +0200
+** R6RS unicode and string I/O work
 
-    symbols with odd characters print better in #{}#
+Added efficient implementations of `get-string-n' and `get-string-n!'
+for binary ports.  Exported `current-input-port', `current-output-port'
+and `current-error-port' from `(rnrs io ports)', and enhanced support
+for transcoders.
+
+** Added `pointer->scm', `scm->pointer' to `(system foreign)'
     
-    * libguile/print.c (symbol_has_extended_read_syntax): Use a more
-      general, unicode-appropriate algorithm.  Hopefully doesn't cause
-      any current #{}# cases to be unescaped.
-      (print_extended_symbol): Use more appropriate unicode algorithm, and
-      emit unicode hex escapes instead of our own lame escapes.
+These procedure are useful if one needs to pass and receive SCM values
+to and from foreign functions.  See "Foreign Variables" in the manual,
+for more.
     
-    * test-suite/tests/symbols.test: Add tests.
-
-commit b9e22602bb9c7d82500e4e5612bf80e478e28b8c
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Mon Apr 11 13:49:29 2011 +0200
+** Added `heap-allocated-since-gc' to `(gc-stats)'
 
-    regen psyntax-pp.scm
+Also fixed the long-standing bug in the REPL `,stat' command.
     
-    * module/ice-9/psyntax-pp.scm: Regenerate, to take advantage of better
-      #{}# serialization.
+** Add `on-error' REPL option
+    
+This option controls what happens when an error occurs at the REPL, and
+defaults to `debug', indicating that Guile should enter the debugger.
+Other values include `report', which will simply print a backtrace
+without entering the debugger.  See "System Commands" in the manual.
 
-commit 62ef23cbb828accf1f5b9622ff17775aa539d354
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Mon Apr 11 17:21:20 2011 +0200
+** Enforce immutability of string literals
 
-    fix reader.test for --disable-deprecated
+Attempting to mutate a string literal now causes a runtime error.
+    
+** Fix pthread redirection
+
+Guile 2.0.0 shipped with headers that, if configured with pthread
+support, would re-define `pthread_create', `pthread_join', and other API
+to redirect to the BDW-GC wrappers, `GC_pthread_create', etc.  This was
+unintended, and not necessary: because threads must enter Guile with
+`scm_with_guile', Guile can handle thread registration itself, without
+needing to make the GC aware of all threads.  This oversight has been
+fixed.
+
+** `with-continuation-barrier' now unwinds on `quit'
+
+A throw to `quit' in a continuation barrier will cause Guile to exit.
+Before, it would do so before unwinding to the barrier, which would
+prevent cleanup handlers from running.  This has been fixed so that it
+exits only after unwinding.
+    
+** `string->pointer' and `pointer->string' have optional encoding arg
     
-    * test-suite/tests/reader.test: Fix deprecated tests; begin-deprecated
-      was splicing in expression context before, which is a no-no.
+This allows users of the FFI to more easily deal in strings with
+particular (non-locale) encodings, like "utf-8".  See "Void Pointers and
+Byte Access" in the manual, for more.
 
-commit cf9d4a82146556ff45d40d6eec8579082287900e
-Author: Ian Price <ianprice90@googlemail.com>
-Date:   Wed Apr 6 01:53:38 2011 +0100
+** R6RS fixnum arithmetic optimizations
+    
+R6RS fixnum operations are are still slower than generic arithmetic,
+however.
 
-    Added optional second arg to R6RS log function
+** New procedure: `define-inlinable'
     
-    * module/rnrs/base.scm (log): now takes a base argument, using the
-      change of base formula for logs.
-    * test-suite/tests/r6rs-base.test ("log (2nd arg)"): Add test cases.
+See "Inlinable Procedures" in the manual, for more.
 
-commit 15993bce1cd0a2e69f11a6ac1725fa7a219c5b7c
-Author: Ian Price <ianprice90@googlemail.com>
-Date:   Wed Apr 6 13:51:44 2011 +0100
+** New procedure: `exact-integer-sqrt'
 
-    fix assert to return true value.
-    
-    * module/rnrs/base.scm (assert): returns value instead of void.
+See "Integer Operations" in the manual, for more.
     
-    * test-suite/tests/r6rs-base.test ("assert"): add test cases.
+** "Extended read syntax" for symbols parses better
 
-commit c89b45299329d034875429804f18768c1ea96713
-Author: Ian Price <ianprice90@googlemail.com>
-Date:   Fri Apr 8 02:49:20 2011 +0100
+In #{foo}# symbols, backslashes are now treated as escapes, as the
+symbol-printing code intended.  Additionally, "\x" within #{foo}# is now
+interpreted as starting an R6RS hex escape.  This is backward compatible
+because the symbol printer would never produce a "\x" before.  The
+printer also works better too.
 
-    Fix fencepost error in bip_seek
-    
-    * libguile/r6rs-ports.c (bip_seek): Fix to allow seeking to end of port.
-    
-    * test-suite/tests/r6rs-ports.test ("bytevector input port can seek to
-      very end"): Add tests.
+** Added `--fresh-auto-compile' option
 
-commit dcb1e3b0f8c79d1373f334909fa5d653ec7674eb
-Author: Andy Wingo <wingo@pobox.com>
-Date:   Wed Apr 13 12:03:50 2011 +0200
+This allows a user to invalidate the auto-compilation cache.  It's
+usually not needed.  See "Compilation" in the manual, for a discussion.
 
-    --disable-threads fix
-    
-    * libguile/threads.c (do_thread_exit_trampoline, on_thread_exit):
-      (scm_i_init_thread_for_guile): Only register and unregister threads
-      with bdw-gc when we are building with threads support.  Thanks to
-      Marijn for the report.
+* Manual updates
 
+** GOOPS documentation updates
 
+** New man page
 
+Thanks to Mark Harig for improvements to guile.1.
 
+** SRFI-23 documented
 
-* New procedures (see the manual for details)
+The humble `error' SRFI now has an entry in the manual.
 
-** exact-integer-sqrt, imported into core from (rnrs base)
+* New modules
 
+** `(ice-9 binary-ports)': "R6RS I/O Ports", in the manual
+** `(ice-9 eval-string)': "Fly Evaluation", in the manual
+** `(ice-9 command-line)', not documented yet
+    
 * Bugs fixed
 
-** exact-integer-sqrt now handles large integers correctly
+** Fixed `iconv_t' memory leak on close-port
+** Fixed some leaks with weak hash tables
+** Export `vhash-delq' and `vhash-delv' from `(ice-9 vlist)'
+** `after-gc-hook' works again
+** `define-record-type' now allowed in nested contexts
+** `exact-integer-sqrt' now handles large integers correctly
+** Fixed C extension examples in manual
+** `vhash-delete' honors HASH argument
+** Make `locale-digit-grouping' more robust
+** Default exception printer robustness fixes
+** Fix presence of non-I CPPFLAGS in `guile-2.0.pc'
+** `read' updates line/column numbers when reading SCSH block comments
+** Fix imports of multiple custom interfaces of same module
+** Fix encoding scanning for non-seekable ports
+** Fix `setter' when called with a non-setter generic
+** Fix f32 and f64 bytevectors to not accept rationals
+** Fix description of the R6RS `finite?' in manual
+** Quotient, remainder and modulo accept inexact integers again
+** Fix `continue' within `while' to take zero arguments
+** Fix alignment for structures in FFI
+** Fix port-filename of stdin, stdout, stderr to match the docs
+** Fix weak hash table-related bug in `define-wrapped-pointer-type'
+** Fix partial continuation application with pending procedure calls
+** scm_{to,from}_locale_string use current locale, not current ports
+** Fix thread cleanup, by using a pthread_key destructor
+** Fix `quit' at the REPL
+** Fix a failure to sync regs in vm bytevector ops
+** Fix (texinfo reflection) to handle nested structures like syntax patterns
+** Fix stexi->html double translation
+** Fix tree-il->scheme fix for <prompt>
+** Fix compilation of <prompt> in <fix> in single-value context
+** Fix race condition in ensure-writable-dir
+** Fix error message on ,disassemble "non-procedure"
+** Fix prompt and abort with the boot evaluator
+** Fix `procedure->pointer' for functions returning `void'
+** Fix error reporting in dynamic-pointer
+** Fix problems detecting coding: in block comments
+** Fix duplicate load-path and load-compiled-path in compilation environment
+** Add fallback read(2) suppport for .go files if mmap(2) unavailable
+** Fix c32vector-set!, c64vector-set!
+** Fix mistakenly deprecated read syntax for uniform complex vectors
+** Fix parsing of exact numbers with negative exponents
+** Ignore SIGPIPE in (system repl server)
+** Fix optional second arg to R6RS log function
+** Fix R6RS `assert' to return true value.
+** Fix fencepost error when seeking in bytevector input ports
+** Gracefully handle `setlocale' errors when starting the REPL
+** Improve support of the `--disable-posix' configure option
+** Make sure R6RS binary ports pass `binary-port?' regardless of the locale
+** Gracefully handle unterminated UTF-8 sequences instead of hitting an `assert'
 
-exact-integer-sqrt now works correctly when applied to very large
-integers (too large to be precisely represented by a C double).
-It has also been imported into core from (rnrs base).
 
 \f
 Changes in 2.0.0 (changes since the 1.8.x series):
@@ -1257,7 +1573,7 @@ Arguments", and "Case-lambda" in the manual.
 
 Instead of accessing a procedure's arity as a property, use the new
 `procedure-minimum-arity' function, which gives the most permissive
-arity that the the function has, in the same format as the old arity
+arity that the function has, in the same format as the old arity
 accessor.
 
 ** `lambda*' and `define*' are now available in the default environment
@@ -2027,7 +2343,7 @@ allocated to primitive procedures, each with its own calling convention.
 Now there is only one, the gsubr. This may affect user code if you were
 defining a procedure using scm_c_make_subr rather scm_c_make_gsubr. The
 solution is to switch to use scm_c_make_gsubr. This solution works well
-both with the old 1.8 and and with the current 1.9 branch.
+both with the old 1.8 and with the current 1.9 branch.
 
 Guile's old evaluator used to have special cases for applying "gsubrs",
 primitive procedures with specified numbers of required, optional, and
@@ -6064,7 +6380,7 @@ incrementally add to the innermost environment, without checking
 whether the restrictions specified in RnRS were met.  This lead to the
 correct behaviour when these restriction actually were met, but didn't
 catch all illegal uses.  Such an illegal use could lead to crashes of
-the Guile interpreter or or other unwanted results.  An example of
+the Guile interpreter or other unwanted results.  An example of
 incorrect internal defines that made Guile behave erratically:
 
   (let ()