Changes from arch/CVS synchronization
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index d3b09d2..a68cff0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,8 +1,10 @@
 Guile NEWS --- history of user-visible changes.
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
 See the end for copying conditions.
 
-Please send Guile bug reports to bug-guile@gnu.org.
+Please send Guile bug reports to bug-guile@gnu.org.  Note that you
+must be subscribed to this list first, in order to successfully send a
+report to it.
 
 Each release reports the NEWS in the following sections:
 
@@ -12,46 +14,136 @@ Each release reports the NEWS in the following sections:
 * Changes to the C interface 
 
 \f
-Changes since the stable branch:
+Changes in 1.9.XXXXXXXX:
 
 * Changes to the distribution
+* Changes to the stand-alone interpreter
+* Changes to Scheme functions and syntax
+* Changes to the C interface 
 
-** Guile is now licensed with the GNU Lesser General Public License.
+\f
+Changes in 1.8.2 (since 1.8.1):
+
+* New procedures (see the manual for details)
+
+** set-program-arguments
+
+* Bugs fixed
+
+** Fractions were not `equal?' if stored in unreduced form.
+(A subtle problem, since printing a value reduced it, making it work.)
+** srfi-60 `copy-bit' failed on 64-bit systems
+** "guile --use-srfi" option at the REPL can replace core functions
+(Programs run with that option were ok, but in the interactive REPL
+the core bindings got priority, preventing SRFI replacements or
+extensions.)
+** `regexp-exec' doesn't abort() on #\nul in the input or bad flags arg
+** `kill' on mingw throws an error for a pid other than oneself
+** Procedure names are attached to procedure-with-setters
+** Array read syntax works with negative lower bound
+** `array-in-bounds?' fix if an array has different lower bounds on each index
+** `*' returns exact 0 for "(* inexact 0)"
+This follows what it always did for "(* 0 inexact)".
+** Build problems on Solaris fixed
+** Build problems on Mingw fixed
 
-** Guile now requires GNU MP (http://swox.com/gmp).
+\f
+Changes in 1.8.1 (since 1.8.0):
 
-Guile now uses the GNU MP library for arbitrary precision arithmetic.
-At the moment it is being used to handle Guile's bignums.
+* LFS functions are now used to access 64-bit files on 32-bit systems.
 
-** Guile now has separate private and public configuration headers.
+* New procedures (see the manual for details)
+
+** primitive-_exit - [Scheme] the-root-module
+** scm_primitive__exit - [C]
+** make-completion-function - [Scheme] (ice-9 readline)
+** scm_c_locale_stringn_to_number - [C]
+** scm_srfi1_append_reverse [C]
+** scm_srfi1_append_reverse_x [C]
+** scm_log - [C]
+** scm_log10 - [C]
+** scm_exp - [C]
+** scm_sqrt - [C]
+
+* New `(ice-9 i18n)' module (see the manual for details)
+
+* Bugs fixed
+
+** Build problems have been fixed on MacOS, SunOS, and QNX.
+
+** A one-dimensional array can now be 'equal?' to a vector.
+
+** Structures, records, and SRFI-9 records can now be compared with `equal?'.
+
+** SRFI-14 standard char sets are recomputed upon a successful `setlocale'.
+
+** `record-accessor' and `record-modifier' now have strict type checks.
+
+Record accessor and modifier procedures now throw an error if the
+record type of the record they're given is not the type expected.
+(Previously accessors returned #f and modifiers silently did nothing).
 
-Guile now has config.h and libguile/scmconfig.h.  The former is not
-installed and is private.  The latter is installed and used by Guile's
-public headers.  config.h is generated by configure and autoheader,
-and scmconfig.h is generated by a small C program, gen-scmconfig at
-build time based in part on the contents of config.h.
+** It is now OK to use both autoload and use-modules on a given module.
 
-Seen libguile/__scm.h and gen-scmconfig.c for more information.
+** `apply' checks the number of arguments more carefully on "0 or 1" funcs.
 
-Note too that nearly all public defines are now set to either 1 or 0
-rather than being set to 1 or left undefined.  See gen-scmconfig.c and
-the GNU Coding Guidelines for the rationale.  However, pre-existing
-defines that were not renamed were not changed.  i.e. GUILE_DEBUG is
-still either 1 or undefined.
+Previously there was no checking on primatives like make-vector that
+accept "one or two" arguments.  Now there is.
 
-** The INSTALL file is now the generic automake installed one.
+** The srfi-1 assoc function now calls its equality predicate properly.
+
+Previously srfi-1 assoc would call the equality predicate with the key
+last.  According to the SRFI, the key should be first.
+
+** A bug in n-par-for-each and n-for-each-par-map has been fixed.
+
+** The array-set! procedure no longer segfaults when given a bit vector.
+
+** Bugs in make-shared-array have been fixed.
+
+** string<? and friends now follow char<? etc order on 8-bit chars.
+
+** The format procedure now handles inf and nan values for ~f correctly.
+
+** exact->inexact should no longer overflow when given certain large fractions.
+
+** srfi-9 accessor and modifier procedures now have strict record type checks.
+
+This matches the srfi-9 specification.
+
+** (ice-9 ftw) procedures won't ignore different files with same inode number.
+
+Previously the (ice-9 ftw) procedures would ignore any file that had
+the same inode number as a file they had already seen, even if that
+file was on a different device.
+
+\f
+Changes in 1.8.0 (changes since the 1.6.x series):
+
+* Changes to the distribution
+
+** Guile is now licensed with the GNU Lesser General Public License.
 
-Guile specific instructions can be found in the README.
+** The manual is now licensed with the GNU Free Documentation License.
+
+** Guile now requires GNU MP (http://swox.com/gmp).
+
+Guile now uses the GNU MP library for arbitrary precision arithmetic.
+
+** Guile now has separate private and public configuration headers.
+
+That is, things like HAVE_STRING_H no longer leak from Guile's
+headers.
 
 ** Guile now provides and uses an "effective" version number.
 
 Guile now provides scm_effective_version and effective-version
 functions which return the "effective" version number.  This is just
 the normal full version string without the final micro-version number,
-so the current effective-version is "1.6".  The effective version
+so the current effective-version is "1.8".  The effective version
 should remain unchanged during a stable series, and should be used for
 items like the versioned share directory name
-i.e. /usr/share/guile/1.6.
+i.e. /usr/share/guile/1.8.
 
 Providing an unchanging version number during a stable release for
 things like the versioned share directory can be particularly
@@ -72,52 +164,89 @@ When you configure "--with-threads=pthreads" or "--with-threads=yes",
 you will get threads that are implemented with the portable POSIX
 threads.  These threads can run concurrently (unlike the previous
 "coop" thread implementation), but need to cooperate for things like
-the GC.  See the manual for details. [XXX - write this.]
+the GC.
 
 The default is "pthreads", unless your platform doesn't have pthreads,
 in which case "null" threads are used.
 
-** New module (ice-9 serialize):
+See the manual for details, nodes "Initialization", "Multi-Threading",
+"Blocking", and others.
+
+** There is the new notion of 'discouraged' features.
+
+This is a milder form of deprecation.
+
+Things that are discouraged should not be used in new code, but it is
+OK to leave them in old code for now.  When a discouraged feature is
+used, no warning message is printed like there is for 'deprecated'
+features.  Also, things that are merely discouraged are nevertheless
+implemented efficiently, while deprecated features can be very slow.
+
+You can omit discouraged features from libguile by configuring it with
+the '--disable-discouraged' option.
+
+** Deprecation warnings can be controlled at run-time.
+
+(debug-enable 'warn-deprecated) switches them on and (debug-disable
+'warn-deprecated) switches them off.
+** Support for SRFI 61, extended cond syntax for multiple values has
+   been added.
+
+This SRFI is always available.
+
+** Support for require-extension, SRFI-55, has been added.
+
+The SRFI-55 special form `require-extension' has been added.  It is
+available at startup, and provides a portable way to load Scheme
+extensions.  SRFI-55 only requires support for one type of extension,
+"srfi"; so a set of SRFIs may be loaded via (require-extension (srfi 1
+13 14)).
 
-(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when
-you don't trust the thread safety of most of your program, but
-where you have some section(s) of code which you consider can run
-in parallel to other sections.
+** New module (srfi srfi-26) provides support for `cut' and `cute'.
 
-They "flag" (with dynamic extent) sections of code to be of
-"serial" or "parallel" nature and have the single effect of
-preventing a serial section from being run in parallel with any
-serial section (including itself).
+The (srfi srfi-26) module is an implementation of SRFI-26 which
+provides the `cut' and `cute' syntax.  These may be used to specialize
+parameters without currying.
 
-Both serialize and parallelize can be nested.  If so, the
-inner-most construct is in effect.
+** New module (srfi srfi-31)
 
-NOTE 1: A serial section can run in parallel with a parallel
-section.
+This is an implementation of SRFI-31 which provides a special form
+`rec' for recursive evaluation.
 
-NOTE 2: If a serial section S is "interrupted" by a parallel
-section P in the following manner: S = S1 P S2, S2 is not
-guaranteed to be resumed by the same thread that previously
-executed S1.
+** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
+   been merged with the core, making their functionality always
+   available.
 
-WARNING: Spawning new threads within a serial section have
-undefined effects.  It is OK, though, to spawn threads in unflagged
-sections of code where neither serialize or parallelize is in
-effect.
+The modules are still available, tho, and you could use them together
+with a renaming import, for example.
 
-A typical usage is when Guile is used as scripting language in some
-application doing heavy computations.  If each thread is
-encapsulated with a serialize form, you can then put a parallelize
-form around the code performing the heavy computations (typically a
-C code primitive), enabling the computations to run in parallel
-while the scripting code runs single-threadedly.
+** Guile no longer includes its own version of libltdl.
 
-** Guile now includes its own version of libltdl.
+The official version is good enough now.
 
-We now use a modified version of libltdl that allows us to make
-improvements to it without having to rely on libtool releases.
+** The --enable-htmldoc option has been removed from 'configure'.
 
-* Changes to the standalone interpreter
+Support for translating the documentation into HTML is now always
+provided.  Use 'make html'.
+
+** New module (ice-9 serialize):
+
+(serialize FORM1 ...) and (parallelize FORM1 ...) are useful when you
+don't trust the thread safety of most of your program, but where you
+have some section(s) of code which you consider can run in parallel to
+other sections.  See ice-9/serialize.scm for more information.
+
+** The configure option '--disable-arrays' has been removed.
+
+Support for arrays and uniform numeric arrays is now always included
+in Guile.
+
+* Changes to the stand-alone interpreter
+
+** New command line option `-L'.
+
+This option adds a directory to the front of the load path.
 
 ** New command line option `--no-debug'.
 
@@ -129,221 +258,267 @@ evaluator turned off, even for interactive sessions.
 Previously, the normal evaluator would have been used.  Using the
 debugging evaluator gives better error messages.
 
+** The '-e' option now 'read's its argument.
+
+This is to allow the new '(@ MODULE-NAME VARIABLE-NAME)' construct to
+be used with '-e'.  For example, you can now write a script like
+
+  #! /bin/sh
+  exec guile -e '(@ (demo) main)' -s "$0" "$@"
+  !#
+
+  (define-module (demo)
+    :export (main))
+
+  (define (main args)
+    (format #t "Demo: ~a~%" args))
+
+
 * Changes to Scheme functions and syntax
 
-** 'call-with-current-continuation' is now also available under the name
-   'call/cc'.
+** Guardians have changed back to their original semantics
 
-** Checking for duplicate bindings in module system
+Guardians now behave like described in the paper by Dybvig et al.  In
+particular, they no longer make guarantees about the order in which
+they return objects, and they can no longer be greedy.
 
-The module system now can check for name conflicts among imported
-bindings.
+They no longer drop cyclic data structures.
 
-The behavior can be controlled by specifying one or more duplicates
-handlers.  For example, to make Guile return an error for every name
-collision, write:
+The C function scm_make_guardian has been changed incompatibly and no
+longer takes the 'greedy_p' argument.
 
-(define-module (foo)
-  :use-module (bar)
-  :use-module (baz)
-  :duplicates check)
+** New function hashx-remove!
 
-The new default behavior of the module system when a name collision
-has been detected is to
+This function completes the set of 'hashx' functions.
 
- 1. Give priority to bindings marked as a replacement.
- 2. Issue a warning (different warning if overriding core binding).
- 3. Give priority to the last encountered binding (this corresponds to
-     the old behavior).
+** The concept of dynamic roots has been factored into continuation
+   barriers and dynamic states.
 
-If you want the old behavior back without replacements or warnings you
-can add the line:
+Each thread has a current dynamic state that carries the values of the
+fluids.  You can create and copy dynamic states and use them as the
+second argument for 'eval'.  See "Fluids and Dynamic States" in the
+manual.
 
-  (default-duplicate-binding-handler 'last)
+To restrict the influence that captured continuations can have on the
+control flow, you can errect continuation barriers.  See "Continuation
+Barriers" in the manual.
 
-to your .guile init file.
+The function call-with-dynamic-root now essentially temporarily
+installs a new dynamic state and errects a continuation barrier.
 
-The syntax for the :duplicates option is:
+** The default load path no longer includes "." at the end.
 
-  :duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...)
+Automatically loading modules from the current directory should not
+happen by default.  If you want to allow it in a more controlled
+manner, set the environment variable GUILE_LOAD_PATH or the Scheme
+variable %load-path.
 
-Specifying multiple handlers is useful since some handlers (such as
-replace) can defer conflict resolution to others.  Each handler is
-tried until a binding is selected.
+** The uniform vector and array support has been overhauled.
 
-Currently available duplicates handlers are:
+It now complies with SRFI-4 and the weird prototype based uniform
+array creation has been deprecated.  See the manual for more details.
 
-  check                     report an error for bindings with a common name
-  warn              issue a warning for bindings with a common name
-  replace           replace bindings which have an imported replacement
-  warn-override-core issue a warning for imports which override core bindings
-                    and accept the override
-  first                     select the first encountered binding (override)
-  last              select the last encountered binding (override)
+Some non-compatible changes have been made: 
+ - characters can no longer be stored into byte arrays.
+ - strings and bit vectors are no longer considered to be uniform numeric 
+   vectors.
+ - array-rank throws an error for non-arrays instead of returning zero.
+ - array-ref does no longer accept non-arrays when no indices are given.
 
-These two are provided by the (oop goops) module:
-  
-  merge-generics     merge generic functions with a common name
-                    into an <extended-generic>
-  merge-accessors    merge accessors with a common name
+There is the new notion of 'generalized vectors' and corresponding
+procedures like 'generalized-vector-ref'.  Generalized vectors include
+strings, bitvectors, ordinary vectors, and uniform numeric vectors.
 
-The default duplicates handler is:
+Arrays use generalized vectors as their storage, so that you still
+have arrays of characters, bits, etc.  However, uniform-array-read!
+and uniform-array-write can no longer read/write strings and
+bitvectors.
 
-  (replace warn-override-core warn last)
+** There is now support for copy-on-write substrings, mutation-sharing
+   substrings and read-only strings.
 
-A recommended handler (which is likely to correspond to future Guile
-behavior) can be installed with:
+Three new procedures are related to this: substring/shared,
+substring/copy, and substring/read-only.  See the manual for more
+information.
 
-  (default-duplicate-binding-handler '(replace warn-override-core check))
+** Backtraces will now highlight the value that caused the error.
 
-** New define-module option: :replace
+By default, these values are enclosed in "{...}", such as in this
+example:
 
-:replace works as :export, but, in addition, marks the binding as a
-replacement.
+    guile> (car 'a)
 
-A typical example is `format' in (ice-9 format) which is a replacement
-for the core binding `format'.
+    Backtrace:
+    In current input:
+       1: 0* [car {a}]
 
-** Adding prefixes to imported bindings in the module system
+    <unnamed port>:1:1: In procedure car in expression (car (quote a)):
+    <unnamed port>:1:1: Wrong type (expecting pair): a
+    ABORT: (wrong-type-arg)
 
-There is now a new :use-module option :prefix.  It can be used to add
-a prefix to all imported bindings.
+The prefix and suffix used for highlighting can be set via the two new
+printer options 'highlight-prefix' and 'highlight-suffix'.  For
+example, putting this into ~/.guile will output the bad value in bold
+on an ANSI terminal:
 
-  (define-module (foo)
-    :use-module ((bar) :prefix bar:))
+    (print-set! highlight-prefix "\x1b[1m")
+    (print-set! highlight-suffix "\x1b[22m")
 
-will import all bindings exported from bar, but rename them by adding
-the prefix `bar:'.
 
-** Merging generic functions
+** 'gettext' support for internationalization has been added.
 
-It is sometimes tempting to use GOOPS accessors with short names.
-For example, it is tempting to use the name `x' for the x-coordinate
-in vector packages.
+See the manual for details.
 
-Assume that we work with a graphical package which needs to use two
-independent vector packages for 2D and 3D vectors respectively.  If
-both packages export `x' we will encounter a name collision.
+** New syntax '@' and '@@':
 
-This can now be resolved automagically with the duplicates handler
-`merge-generics' which gives the module system license to merge all
-generic functions sharing a common name:
+You can now directly refer to variables exported from a module by
+writing
 
-(define-module (math 2D-vectors)
-  :use-module (oop goops)
-  :export (x y ...))
-                 
-(define-module (math 3D-vectors)
-  :use-module (oop goops)
-  :export (x y z ...))
+    (@ MODULE-NAME VARIABLE-NAME)
 
-(define-module (my-module)
-  :use-module (math 2D-vectors)
-  :use-module (math 3D-vectors)
-  :duplicates merge-generics)
+For example (@ (ice-9 pretty-print) pretty-print) will directly access
+the pretty-print variable exported from the (ice-9 pretty-print)
+module.  You don't need to 'use' that module first.  You can also use
+'@' as a target of 'set!', as in (set! (@ mod var) val).
 
-x in (my-module) will now share methods with x in both imported
-modules.
+The related syntax (@@ MODULE-NAME VARIABLE-NAME) works just like '@',
+but it can also access variables that have not been exported.  It is
+intended only for kluges and temporary fixes and for debugging, not
+for ordinary code.
 
-There will, in fact, now be three distinct generic functions named
-`x': x in (2D-vectors), x in (3D-vectors), and x in (my-module).  The
-last function will be an <extended-generic>, extending the previous
-two functions.
+** Keyword syntax has been made more disciplined.
 
-Let's call the imported generic functions the "ancestor functions".  x
-in (my-module) is, in turn, a "descendant function" of the imported
-functions, extending its ancestors.
+Previously, the name of a keyword was read as a 'token' but printed as
+a symbol.  Now, it is read as a general Scheme datum which must be a
+symbol.
 
-For any generic function G, the applicable methods are selected from
-the union of the methods of the descendant functions, the methods of G
-itself and the methods of the ancestor functions.
+Previously:
 
-This, ancestor functions share methods with their descendants and vice
-versa.  This implies that x in (math 2D-vectors) can will share the
-methods of x in (my-module) and vice versa, while x in (math 2D-vectors)
-doesn't share the methods of x in (math 3D-vectors), thus preserving
-modularity.
+    guile> #:12
+    #:#{12}#
+    guile> #:#{12}#
+    #:#{\#{12}\#}#
+    guile> #:(a b c)
+    #:#{}#
+    ERROR: In expression (a b c):
+           Unbound variable: a
+    guile> #: foo
+    #:#{}#
+    ERROR: Unbound variable: foo
 
-Sharing is dynamic, so that adding new methods to a descendant implies
-adding it to the ancestor.
+Now:
 
-If duplicates checking is desired in the above example, the following
-form of the :duplicates option can be used instead:
+    guile> #:12
+    ERROR: Wrong type (expecting symbol): 12
+    guile> #:#{12}#
+    #:#{12}#
+    guile> #:(a b c)
+    ERROR: Wrong type (expecting symbol): (a b c)
+    guile> #: foo
+    #:foo
 
-  :duplicates (merge-generics check)
+** The printing of symbols that might look like keywords can be
+   controlled.
 
-** New function: effective-version
+The new printer option 'quote-keywordish-symbols' controls how symbols
+are printed that have a colon as their first or last character.  The
+default now is to only quote a symbol with #{...}# when the read
+option 'keywords' is not '#f'.  Thus:
 
-Returns the "effective" version number.  This is just the normal full
-version string without the final micro-version number.  See "Changes
-to the distribution" above.
+    guile> (define foo (string->symbol ":foo"))
+    guile> (read-set! keywords #f)
+    guile> foo
+    :foo
+    guile> (read-set! keywords 'prefix)
+    guile> foo
+    #{:foo}#
+    guile> (print-set! quote-keywordish-symbols #f)
+    guile> foo
+    :foo
 
-** Futures: future, make-future, future-ref
+** 'while' now provides 'break' and 'continue'
 
-Futures are like promises, but begun immediately in a new thread.  See
-the "Futures" section in the reference manual.
+break and continue were previously bound in a while loop, but not
+documented, and continue didn't quite work properly.  The undocumented
+parameter to break which gave a return value for the while has been
+dropped.
 
-** New syntax: parallel FORM ...
+** 'call-with-current-continuation' is now also available under the name
+   'call/cc'.
 
-Compute the results of FORM ... in parallel (in a separate thread for
-each form) and return them as multiple values.
+** The module system now checks for duplicate bindings.
 
-** New syntax: letpar ((VAR EXP) ...) BODYFORM ...
+The module system now can check for name conflicts among imported
+bindings.
 
-Like 'let' but evaluates the binding expressions EXP ... in parallel.
+The behavior can be controlled by specifying one or more 'duplicates'
+handlers.  For example, to make Guile return an error for every name
+collision, write:
 
-** New functions: par-map, par-for-each PROC ARGLIST ...
+(define-module (foo)
+  :use-module (bar)
+  :use-module (baz)
+  :duplicates check)
 
-Like 'map' and 'for-each' but evaluate the procedure PROC in a
-separate thread for each (set of) argument(s).  All applications are
-guaranteed to be completed before the procedure returns.
+The new default behavior of the module system when a name collision
+has been detected is to
 
-** New functions: n-par-map, n-par-for-each N PROC ARGLIST ...
+ 1. Give priority to bindings marked as a replacement.
+ 2. Issue a warning (different warning if overriding core binding).
+ 3. Give priority to the last encountered binding (this corresponds to
+     the old behavior).
 
-Like 'par-map' and 'par-for-each' but evaluate the procedure PROC in N
-threads.  This is useful when PROC uses large amounts of resources
-and/or the argument list(s) is/are long so that one thread per (set
-of) argument(s) would consume too much system resources.  On a
-dual-CPU system, N = 4 would often be a good choice.
+If you want the old behavior back without replacements or warnings you
+can add the line:
 
-** New function: n-for-each-par-map N S-PROC P-PROC ARGLIST ...
+  (default-duplicate-binding-handler 'last)
 
-Using N parallel processes, apply S-PROC in serial order to each
-result of applying P-PROC to each set of arguments in the argument
-lists ARGLIST ...
+to your .guile init file.
 
-Like a composition of 'for-each' and 'n-par-map', but allows S-PROC to
-start processing while the results of P-PROC are being produced.
+** New define-module option: :replace
 
-** Fair mutexes and condition variables
+:replace works as :export, but, in addition, marks the binding as a
+replacement.
 
-Fair mutexes and condition variables have been added.  The fairness
-means that scheduling is arranged to give as equal time shares as
-possible and that threads are awakened in a first-in-first-out
-manner.  This is not guaranteed with standard mutexes and condition
-variables.
+A typical example is `format' in (ice-9 format) which is a replacement
+for the core binding `format'.
 
-In addition, fair mutexes are recursive.  Locking a fair mutex that
-you have already locked will succeed.  Every call to lock-mutex must
-be matched with a call to unlock-mutex.  Only the last call to
-unlock-mutex will actually unlock the mutex.
+** Adding prefixes to imported bindings in the module system
 
-A fair condition variable must be used together with a fair mutex,
-just as a standard condition variable must be used together with a
-standard mutex.
+There is now a new :use-module option :prefix.  It can be used to add
+a prefix to all imported bindings.
 
-** New functions: make-fair-mutex, make-fair-condition-variable'
+  (define-module (foo)
+    :use-module ((bar) :prefix bar:))
 
-Make a new fair mutex and a new fair condition variable respectively.
+will import all bindings exported from bar, but rename them by adding
+the prefix `bar:'.
+
+** Conflicting generic functions can be automatically merged.
+
+When two imported bindings conflict and they are both generic
+functions, the two functions can now be merged automatically.  This is
+activated with the 'duplicates' handler 'merge-generics'.
+
+** New function: effective-version
+
+Returns the "effective" version number.  This is just the normal full
+version string without the final micro-version number.  See "Changes
+to the distribution" above.
+
+** New threading functions: parallel, letpar, par-map, and friends
+
+These are convenient ways to run calculations in parallel in new
+threads.  See "Parallel forms" in the manual for details.
 
 ** New function 'try-mutex'.
 
 This function will attempt to lock a mutex but will return immediately
-instead if blocking and indicate failure.
+instead of blocking and indicate failure.
 
 ** Waiting on a condition variable can have a timeout.
 
-The funtion 'wait-condition-variable' now takes a third, optional
+The function 'wait-condition-variable' now takes a third, optional
 argument that specifies the point in time where the waiting should be
 aborted.
 
@@ -366,6 +541,11 @@ omitted, the async will run in the thread that called
 C code can use the new functions scm_sigaction_for_thread and
 scm_system_async_mark_for_thread to pass the new thread argument.
 
+When a thread blocks on a mutex, a condition variable or is waiting
+for IO to be possible, it will still execute system asyncs.  This can
+be used to interrupt such a thread by making it execute a 'throw', for
+example.
+
 ** The function 'system-async' is deprecated.
 
 You can now pass any zero-argument procedure to 'system-async-mark'.
@@ -439,9 +619,54 @@ platform supports this, too.  The two zeros are equal according to
     (eqv? 0.0 (- 0.0))
     => #f
 
-** We now have uninterned symbols.
+** Guile now has exact rationals.
+
+Guile can now represent fractions such as 1/3 exactly.  Computing with
+them is also done exactly, of course:
+
+    (* 1/3 3/2)
+    => 1/2
+
+** 'floor', 'ceiling', 'round' and 'truncate' now return exact numbers
+   for exact arguments.
+
+For example: (floor 2) now returns an exact 2 where in the past it
+returned an inexact 2.0.  Likewise, (floor 5/4) returns an exact 1.
+
+** inexact->exact no longer returns only integers.
+
+Without exact rationals, the closest exact number was always an
+integer, but now inexact->exact returns the fraction that is exactly
+equal to a floating point number.  For example:
 
-The new function 'make-symbol' will return a uninterned symbol.  This
+    (inexact->exact 1.234)
+    => 694680242521899/562949953421312
+
+When you want the old behavior, use 'round' explicitly:
+
+    (inexact->exact (round 1.234))
+    => 1
+
+** New function 'rationalize'.
+
+This function finds a simple fraction that is close to a given real
+number.  For example (and compare with inexact->exact above):
+
+    (rationalize (inexact->exact 1.234) 1/2000)
+    => 58/47
+
+Note that, as required by R5RS, rationalize returns only then an exact
+result when both its arguments are exact.
+
+** 'odd?' and 'even?' work also for inexact integers.
+
+Previously, (odd? 1.0) would signal an error since only exact integers
+were recognized as integers.  Now (odd? 1.0) returns #t, (odd? 2.0)
+returns #f and (odd? 1.5) signals an error.
+
+** Guile now has uninterned symbols.
+
+The new function 'make-symbol' will return an uninterned symbol.  This
 is a symbol that is unique and is guaranteed to remain unique.
 However, uninterned symbols can not yet be read back in.
 
@@ -452,7 +677,7 @@ interned or not.
 
 The function pretty-print from the (ice-9 pretty-print) module can now
 also be invoked with keyword arguments that control things like
-maximum output width.  See its online documentation.
+maximum output width.  See the manual for details.
 
 ** Variables have no longer a special behavior for `equal?'.
 
@@ -467,9 +692,9 @@ when evaluated and simply be ignored in a definition context.
 
 ** Deprecated: procedure->macro
 
-Change your code to use either procedure->memoizing-macro or, probably better,
-to use r5rs macros.  Also, be aware that macro expansion will not be done
-during evaluation, but prior to evaluation.
+Change your code to use 'define-macro' or r5rs macros.  Also, be aware
+that macro expansion will not be done during evaluation, but prior to
+evaluation.
 
 ** Soft ports now allow a `char-ready?' procedure
 
@@ -479,192 +704,402 @@ element is interpreted as an `input-waiting' thunk -- i.e. a thunk
 that returns the number of characters that can be read immediately
 without the soft port blocking.
 
-** New debugging feature: breakpoints.
-
-Guile now has breakpoints.  For details see the `Debugging Features'
-chapter in the reference manual.
-
 ** Deprecated: undefine
 
 There is no replacement for undefine.
 
-** SRFI-1 delete equality argument order fixed.
+** The functions make-keyword-from-dash-symbol and keyword-dash-symbol
+   have been discouraged.
+
+They are relics from a time where a keyword like #:foo was used
+directly as a Tcl option "-foo" and thus keywords were internally
+stored as a symbol with a starting dash.  We now store a symbol
+without the dash.
+
+Use symbol->keyword and keyword->symbol instead.
+
+** The `cheap' debug option is now obsolete
+
+Evaluator trap calls are now unconditionally "cheap" - in other words,
+they pass a debug object to the trap handler rather than a full
+continuation.  The trap handler code can capture a full continuation
+by using `call-with-current-continuation' in the usual way, if it so
+desires.
+
+The `cheap' option is retained for now so as not to break existing
+code which gets or sets it, but setting it now has no effect.  It will
+be removed in the next major Guile release.
 
-In the srfi-1 module delete and delete!, the order of the arguments to
-the "=" procedure now matches the SRFI-1 specification.
+** Evaluator trap calls now support `tweaking'
+
+`Tweaking' means that the trap handler code can modify the Scheme
+expression that is about to be evaluated (in the case of an
+enter-frame trap) or the value that is being returned (in the case of
+an exit-frame trap).  The trap handler code indicates that it wants to
+do this by returning a pair whose car is the symbol 'instead and whose
+cdr is the modified expression or return value.
 
 * Changes to the C interface
 
-** Many public #defines with generic names have been made private.
+** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
+   take a 'delete' function argument.
 
-#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
-private or renamed with a more suitable public name.  See below for
-the ones which have been renamed.
+This argument makes no sense since the delete function is used to
+remove a pair from an alist, and this must not be configurable.
+
+This is an incompatible change.
+
+** The GH interface is now subject to the deprecation mechanism
+
+The GH interface has been deprecated for quite some time but now it is
+actually removed from Guile when it is configured with
+--disable-deprecated.
+
+See the manual "Transitioning away from GH" for more information.
+
+** A new family of functions for converting between C values and
+   Scheme values has been added.
+
+These functions follow a common naming scheme and are designed to be
+easier to use, thread-safe and more future-proof than the older
+alternatives.
+
+  - int scm_is_* (...)
+  These are predicates that return a C boolean: 1 or 0.  Instead of
+  SCM_NFALSEP, you can now use scm_is_true, for example.
+
+  - <type> scm_to_<type> (SCM val, ...)
+
+  These are functions that convert a Scheme value into an appropriate
+  C value.  For example, you can use scm_to_int to safely convert from
+  a SCM to an int.
+
+  - SCM scm_from_<type> (<type> val, ...)
+
+  These functions convert from a C type to a SCM value; for example,
+  scm_from_int for ints.
+
+There is a huge number of these functions, for numbers, strings,
+symbols, vectors, etc.  They are documented in the reference manual in
+the API section together with the types that they apply to.
+
+** New functions for dealing with complex numbers in C have been added.
 
-** HAVE_STDINT_H and HAVE_INTTYPES_H have been removed from public use.
+The new functions are scm_c_make_rectangular, scm_c_make_polar,
+scm_c_real_part, scm_c_imag_part, scm_c_magnitude and scm_c_angle.
+They work like scm_make_rectangular etc but take or return doubles
+directly.
 
-HAVE_STDINT_H and HAVE_INTTYPES_H removed from public use.  These are
-no longer needed since the older uses of stdint.h and inttypes.h are
-now handled by configure.in and gen-scmconfig.c.
+** The function scm_make_complex has been discouraged.
 
-** USE_DLL_IMPORT is no longer defined publically.
+Use scm_c_make_rectangular instead.
 
-gen-scmconfig now uses it to decide what contents to place in the
-public scmconfig.h header without adding the USE_DLL_IMPORT itself.
+** The INUM macros have been deprecated.
 
-** HAVE_LIMITS_H has been removed from public use.
+A lot of code uses these macros to do general integer conversions,
+although the macros only work correctly with fixnums.  Use the
+following alternatives.
 
-gen-scmconfig now just uses HAVE_LIMITS_H to decide whether or not to
-add a limits.h include in scmconfig.h.
+  SCM_INUMP             ->  scm_is_integer or similar
+  SCM_NINUMP            ->  !scm_is_integer or similar
+  SCM_MAKINUM           ->  scm_from_int or similar
+  SCM_INUM              ->  scm_to_int or similar
 
-** time.h, sys/time.h, etc. #ifdefery has been removed from public headers.
+  SCM_VALIDATE_INUM_*   ->  Do not use these; scm_to_int, etc. will
+                            do the validating for you.
 
-gen-scmconfig now just uses the same logic to decide what time related
-#includes to add to scmconfig.h.
+** The scm_num2<type> and scm_<type>2num functions and scm_make_real
+   have been discouraged.
 
-** HAVE_STRUCT_TIMESPEC has been removed from public use.
+Use the newer scm_to_<type> and scm_from_<type> functions instead for
+new code.  The functions have been discouraged since they don't fit
+the naming scheme.
 
-scmconfig.h now just defines scm_t_timespec.
+** The 'boolean' macros SCM_FALSEP etc have been discouraged.
 
-** HAVE_PTRDIFF has been removed from public use and Guile doesn't
-   define ptrdiff_t.
+They have strange names, especially SCM_NFALSEP, and SCM_BOOLP
+evaluates its argument twice.  Use scm_is_true, etc. instead for new
+code.
+
+** The macro SCM_EQ_P has been discouraged.
+
+Use scm_is_eq for new code, which fits better into the naming
+conventions.
 
-Guile now publically defines scm_t_ptrdiff and
-SCM_SIZEOF_SCM_T_PTRDIFF in scmconfig.h, and all occurrences of
-ptrdiff_t have been replaced with scm_t_ptrdiff.
+** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
+   been discouraged.
 
-Guile defines its own type this rather than just relying on ptrdiff_t
-and SCM_SIZEOF_PTRDIFF_T because Guile actually typedefs long to
-scm_t_ptrdiff when ptrdiff_t isn't available.  A public "typedef long
-ptrdiff_t" could conflict with other headers.
+Use the function scm_is_pair or scm_is_null instead.
 
-** HAVE_UINTPTR_T and HAVE_UINTPTR_T have been removed from public use.
+** The functions scm_round and scm_truncate have been deprecated and
+   are now available as scm_c_round and scm_c_truncate, respectively.
 
-They are replaced by public definitions of SCM_SIZEOF_UINTPTR_T and
-SCM_SIZEOF_INTPTR_T.  These are defined to 0 if the corresponding type
-is not available.
+These functions occupy the names that scm_round_number and
+scm_truncate_number should have.
 
-** The public #define STDC_HEADERS has been renamed to SCM_HAVE_STDC_HEADERS.
+** The functions scm_c_string2str, scm_c_substring2str, and
+   scm_c_symbol2str have been deprecated.
 
-The previous name was too generic for the global public namespace.
+Use scm_to_locale_stringbuf or similar instead, maybe together with
+scm_substring.
 
-** The public #define HAVE_SYS_SELECT has been renamed to
-   SCM_HAVE_SYS_SELECT_H.
+** New functions scm_c_make_string, scm_c_string_length,
+   scm_c_string_ref, scm_c_string_set_x, scm_c_substring,
+   scm_c_substring_shared, scm_c_substring_copy.
 
-The previous name was too generic for the global public namespace.
+These are like scm_make_string, scm_length, etc. but are slightly
+easier to use from C.
 
-** The public #define HAVE_FLOATINGPOINT_H has been renamed to
-   SCM_HAVE_FLOATINGPOINT_H.
+** The macros SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_LENGTH,
+   SCM_SYMBOL_CHARS, and SCM_SYMBOL_LENGTH have been deprecated.
 
-The previous name was too generic for the global public namespace.
+They export too many assumptions about the implementation of strings
+and symbols that are no longer true in the presence of
+mutation-sharing substrings and when Guile switches to some form of
+Unicode.
 
-** The public #define HAVE_IEEEFP_H has been renamed to SCM_HAVE_IEEEFP_H.
+When working with strings, it is often best to use the normal string
+functions provided by Guile, such as scm_c_string_ref,
+scm_c_string_set_x, scm_string_append, etc.  Be sure to look in the
+manual since many more such functions are now provided than
+previously.
 
-The previous name was too generic for the global public namespace.
+When you want to convert a SCM string to a C string, use the
+scm_to_locale_string function or similar instead.  For symbols, use
+scm_symbol_to_string and then work with that string.  Because of the
+new string representation, scm_symbol_to_string does not need to copy
+and is thus quite efficient.
 
-** The public #define HAVE_NAN_H has been renamed to SCM_HAVE_NAN_H.
+** Some string, symbol and keyword functions have been discouraged.
 
-The previous name was too generic for the global public namespace.
+They don't fit into the uniform naming scheme and are not explicit
+about the character encoding.
 
-** The public #define HAVE_WINSOCK2_H has been renamed to SCM_HAVE_WINSOCK2_H.
+Replace according to the following table:
 
-The previous name was too generic for the global public namespace.
+    scm_allocate_string       -> scm_c_make_string
+    scm_take_str              -> scm_take_locale_stringn 
+    scm_take0str              -> scm_take_locale_string
+    scm_mem2string            -> scm_from_locale_stringn
+    scm_str2string            -> scm_from_locale_string
+    scm_makfrom0str           -> scm_from_locale_string
+    scm_mem2symbol            -> scm_from_locale_symboln
+    scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
+    scm_str2symbol            -> scm_from_locale_symbol
 
-** The public #define HAVE_ARRAYS has been renamed to SCM_HAVE_ARRAYS.
+    SCM_SYMBOL_HASH           -> scm_hashq
+    SCM_SYMBOL_INTERNED_P     -> scm_symbol_interned_p
 
-The previous name was too generic for the global public namespace.
+    scm_c_make_keyword        -> scm_from_locale_keyword
 
-** The public #define STACK_GROWS_UP has been renamed to SCM_STACK_GROWS_UP.
+** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
+   now also available to C code.
 
-The previous name was too generic for the global public namespace.
+** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
 
-** The public #define USE_PTHREAD_THREADS has been renamed to
-   SCM_USE_PTHREAD_THREADS.
+Use scm_is_keyword and scm_keyword_to_symbol instead, but note that
+the latter returns the true name of the keyword, not the 'dash name',
+as SCM_KEYWORDSYM used to do.
 
-The previous name was too generic for the global public namespace.
+** A new way to access arrays in a thread-safe and efficient way has
+   been added.
 
-** The public #define USE_NULL_THREADS has been renamed to
-   SCM_USE_NULL_THREADS.
+See the manual, node "Accessing Arrays From C".
 
-The previous name was too generic for the global public namespace.
+** The old uniform vector and bitvector implementations have been
+   unceremoniously removed.
 
-** The public #define USE_COOP_THREADS has been renamed to
-   SCM_USE_COOP_THREADS.
+This implementation exposed the details of the tagging system of
+Guile.  Use the new C API explained in the manual in node "Uniform
+Numeric Vectors" and "Bit Vectors", respectively.
 
-The previous name was too generic for the global public namespace.
+The following macros are gone: SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
+SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
+SCM_SET_UVECTOR_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
+SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
+SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
+SCM_SET_BITVECTOR_LENGTH, SCM_BITVEC_REF, SCM_BITVEC_SET,
+SCM_BITVEC_CLR.
 
-** SCM_C_INLINE is publically defined if possible.
+** The macros dealing with vectors have been deprecated.
 
-If the platform has a way to define inline functions, SCM_C_INLINE
-will be defined to that text.  Otherwise it will be undefined.  This
-is a little bit different than autoconf's normal handling of the
-inline define via AC_C_INLINE.
+Use the new functions scm_is_vector, scm_vector_elements,
+scm_vector_writable_elements, etc, or scm_is_simple_vector,
+SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET, etc instead.  See the
+manual for more details.
 
-** Guile now publically defines some basic type infrastructure.
+Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
+SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
 
-Guile always defines
+The following macros have been removed: SCM_VECTOR_BASE,
+SCM_SET_VECTOR_BASE, SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
+SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS.
 
-  SCM_SIZEOF_CHAR
-  SCM_SIZEOF_UNSIGNED_CHAR
-  SCM_SIZEOF_SHORT
-  SCM_SIZEOF_UNSIGNED_SHORT
-  SCM_SIZEOF_LONG
-  SCM_SIZEOF_UNSIGNED_LONG
-  SCM_SIZEOF_INT
-  SCM_SIZEOF_UNSIGNED_INT
-  SCM_SIZEOF_LONG_LONG /* defined to 0 if type not available */
-  SCM_SIZEOF_UNSIGNED_LONG_LONG /* defined to 0 if type not available */
+** Some C functions and macros related to arrays have been deprecated.
 
-  scm_t_int8
-  scm_t_uint8
-  scm_t_int16
-  scm_t_uint16
-  scm_t_int32
-  scm_t_uint32
+Migrate according to the following table:
 
-Guile always defines
+    scm_make_uve        -> scm_make_typed_array, scm_make_u8vector etc.
+    scm_make_ra         -> scm_make_array
+    scm_shap2ra         -> scm_make_array
+    scm_cvref           -> scm_c_generalized_vector_ref
+    scm_ra_set_contp    -> do not use
+    scm_aind            -> scm_array_handle_pos
+    scm_raprin1         -> scm_display or scm_write
 
-  SCM_HAVE_T_INT64
-  SCM_HAVE_T_UINT64
+    SCM_ARRAYP          -> scm_is_array
+    SCM_ARRAY_NDIM      -> scm_c_array_rank
+    SCM_ARRAY_DIMS      -> scm_array_handle_dims
+    SCM_ARRAY_CONTP     -> do not use
+    SCM_ARRAY_MEM       -> do not use
+    SCM_ARRAY_V         -> scm_array_handle_elements or similar
+    SCM_ARRAY_BASE      -> do not use
 
-and when either of these are defined to 1, optionally defines 
+** SCM_CELL_WORD_LOC has been deprecated.
 
-  scm_t_int64
-  scm_t_uint64
+Use the new macro SCM_CELL_OBJECT_LOC instead, which returns a pointer
+to a SCM, as opposed to a pointer to a scm_t_bits.
 
-respectively.
+This was done to allow the correct use of pointers into the Scheme
+heap.  Previously, the heap words were of type scm_t_bits and local
+variables and function arguments were of type SCM, making it
+non-standards-conformant to have a pointer that can point to both.
 
-Guile always defines
+** New macros SCM_SMOB_DATA_2, SCM_SMOB_DATA_3, etc.
 
-  scm_t_timespec
+These macros should be used instead of SCM_CELL_WORD_2/3 to access the
+second and third words of double smobs.  Likewise for
+SCM_SET_SMOB_DATA_2 and SCM_SET_SMOB_DATA_3.
 
-** The preprocessor define USE_THREADS has been deprecated.
+Also, there is SCM_SMOB_FLAGS and SCM_SET_SMOB_FLAGS that should be
+used to get and set the 16 exra bits in the zeroth word of a smob.
 
-Going forward, assume that the thread API is always present.
+And finally, there is SCM_SMOB_OBJECT and SCM_SMOB_SET_OBJECT for
+accesing the first immediate word of a smob as a SCM value, and there
+is SCM_SMOB_OBJECT_LOC for getting a pointer to the first immediate
+smob word.  Like wise for SCM_SMOB_OBJECT_2, etc.
 
-** The preprocessor define GUILE_ISELECT has been deprecated.
+** New way to deal with non-local exits and re-entries.
 
-Going forward, assume that scm_internal_select is always present.
+There is a new set of functions that essentially do what
+scm_internal_dynamic_wind does, but in a way that is more convenient
+for C code in some situations.  Here is a quick example of how to
+prevent a potential memory leak:
 
-** The preprocessor define READER_EXTENSIONS has been deprecated.
+  void
+  foo ()
+  {
+    char *mem;
 
-Going forward, assume that the features represented by
-READER_EXTENSIONS are always present.
+    scm_dynwind_begin (0);
 
-** The preprocessor define DEBUG_EXTENSIONS has been deprecated.
+    mem = scm_malloc (100);
+    scm_dynwind_unwind_handler (free, mem, SCM_F_WIND_EXPLICITLY);
 
-Going forward, assume that the features represented by
-DEBUG_EXTENSIONS are always present.
+    /* MEM would leak if BAR throws an error.
+       SCM_DYNWIND_UNWIND_HANDLER frees it nevertheless.  
+     */
+
+    bar ();
+  
+    scm_dynwind_end ();
 
-** The preprocessor define DYNAMIC_LINKING has been deprecated.
+    /* Because of SCM_F_WIND_EXPLICITLY, MEM will be freed by 
+       SCM_DYNWIND_END as well. 
+    */
+  }
 
-Going forward, assume that the features represented by
-DYNAMIC_LINKING are always present.
+For full documentation, see the node "Dynamic Wind" in the manual.
+
+** New function scm_dynwind_free
+
+This function calls 'free' on a given pointer when a dynwind context
+is left.  Thus the call to scm_dynwind_unwind_handler above could be
+replaced with simply scm_dynwind_free (mem).
+
+** New functions scm_c_call_with_blocked_asyncs and
+   scm_c_call_with_unblocked_asyncs
+
+Like scm_call_with_blocked_asyncs etc. but for C functions.
+
+** New functions scm_dynwind_block_asyncs and scm_dynwind_unblock_asyncs
+
+In addition to scm_c_call_with_blocked_asyncs you can now also use
+scm_dynwind_block_asyncs in a 'dynwind context' (see above).  Likewise for
+scm_c_call_with_unblocked_asyncs and scm_dynwind_unblock_asyncs.
+
+** The macros SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
+   SCM_REALLOW_INTS have been deprecated.
+
+They do no longer fulfill their original role of blocking signal
+delivery.  Depending on what you want to achieve, replace a pair of
+SCM_DEFER_INTS and SCM_ALLOW_INTS with a dynwind context that locks a
+mutex, blocks asyncs, or both.  See node "Critical Sections" in the
+manual.
+
+** The value 'scm_mask_ints' is no longer writable.
+
+Previously, you could set scm_mask_ints directly.  This is no longer
+possible.  Use scm_c_call_with_blocked_asyncs and
+scm_c_call_with_unblocked_asyncs instead.
+
+** New way to temporarily set the current input, output or error ports
+
+C code can now use scm_dynwind_current_<foo>_port in a 'dynwind
+context' (see above).  <foo> is one of "input", "output" or "error".
+
+** New way to temporarily set fluids
+
+C code can now use scm_dynwind_fluid in a 'dynwind context' (see
+above) to temporarily set the value of a fluid.
+
+** New types scm_t_intmax and scm_t_uintmax.
+
+On platforms that have them, these types are identical to intmax_t and
+uintmax_t, respectively.  On other platforms, they are identical to
+the largest integer types that Guile knows about.
+
+** The functions scm_unmemocopy and scm_unmemoize have been removed.
+
+You should not have used them.
+
+** Many public #defines with generic names have been made private.
+
+#defines with generic names like HAVE_FOO or SIZEOF_FOO have been made
+private or renamed with a more suitable public name.
+
+** The macro SCM_TYP16S has been deprecated.
+
+This macro is not intended for public use.
+
+** The macro SCM_SLOPPY_INEXACTP has been deprecated.
+
+Use scm_is_true (scm_inexact_p (...)) instead.
+
+** The macro SCM_SLOPPY_REALP has been deprecated.
+
+Use scm_is_real instead.
+
+** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
+
+Use scm_is_complex instead.
+
+** Some preprocessor defines have been deprecated.
+
+These defines indicated whether a certain feature was present in Guile
+or not.  Going forward, assume that the features are always present.
+
+The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
+DEBUG_EXTENSIONS, DYNAMIC_LINKING.
+
+The following macros have been removed completely: MEMOIZE_LOCALS,
+SCM_RECKLESS, SCM_CAUTIOUS.
 
 ** The preprocessor define STACK_DIRECTION has been deprecated.
 
 There should be no need to know about the stack direction for ordinary
-programs.  (Do not use.)
+programs.
 
 ** New function: scm_effective_version
 
@@ -681,17 +1116,6 @@ arguments are now passed directly:
 
 This is an incompatible change.
 
-** The value 'scm_mask_ints' is no longer writable.
-
-Previously, you could set scm_mask_ints directly.  This is no longer
-possible.  Use scm_c_call_with_blocked_asyncs and
-scm_c_call_with_unblocked_asyncs instead.
-
-** New functions scm_c_call_with_blocked_asyncs and
-   scm_c_call_with_unblocked_asyncs
-
-Like scm_call_with_blocked_asyncs etc. but for C functions.
-
 ** New snarfer macro SCM_DEFINE_PUBLIC.
 
 This is like SCM_DEFINE, but also calls scm_c_export for the defined
@@ -699,14 +1123,6 @@ function in the init section.
 
 ** The snarfer macro SCM_SNARF_INIT is now officially supported.
 
-** New macros SCM_VECTOR_REF and SCM_VECTOR_SET.
-
-Use these in preference to SCM_VELTS.
-
-** The SCM_VELTS macros now returns a read-only vector. For writing,
-use the new macros SCM_WRITABLE_VELTS or SCM_VECTOR_SET.  The use of
-SCM_WRITABLE_VELTS is discouraged, though.
-
 ** Garbage collector rewrite.
 
 The garbage collector is cleaned up a lot, and now uses lazy
@@ -726,11 +1142,16 @@ the C variables that control garbage collection.  The environment
 variables GUILE_MAX_SEGMENT_SIZE, GUILE_INIT_SEGMENT_SIZE_2,
 GUILE_INIT_SEGMENT_SIZE_1, and GUILE_MIN_YIELD_2 should be used.
 
+For understanding the memory usage of a GUILE program, the routine
+gc-live-object-stats returns an alist containing the number of live
+objects for every type.
+
+
 ** The function scm_definedp has been renamed to scm_defined_p
 
 The name scm_definedp is deprecated.
 
-** The struct scm_cell has been renamed to scm_t_cell
+** The struct scm_cell type has been renamed to scm_t_cell
 
 This is in accordance to Guile's naming scheme for types.  Note that
 the name scm_cell is now used for a function that allocates and
@@ -756,11 +1177,6 @@ The old functions for memory management have been deprecated.  They
 are: scm_must_malloc, scm_must_realloc, scm_must_free,
 scm_must_strdup, scm_must_strndup, scm_done_malloc, scm_done_free.
 
-** New function: scm_str2string
-
-This function creates a scheme string from a 0-terminated C string.  The input
-string is copied.
-
 ** Declarations of exported features are marked with SCM_API.
 
 Every declaration of a feature that belongs to the exported Guile API
@@ -773,15 +1189,16 @@ If you `#define SCM_IMPORT' before including <libguile.h>, SCM_API
 will expand into "__declspec (dllimport) extern", which is needed for
 linking to the Guile DLL in Windows.
 
-There are also SCM_RL_IMPORT, QT_IMPORT, SCM_SRFI1314_IMPORT, and
+There are also SCM_RL_IMPORT, SCM_SRFI1314_IMPORT, and
 SCM_SRFI4_IMPORT, for the corresponding libraries.
 
 ** SCM_NEWCELL and SCM_NEWCELL2 have been deprecated.
 
-Use the new functions scm_cell and scm_double_cell instead.  The old macros
-had problems because with them allocation and initialization was separated and
-the GC could sometimes observe half initialized cells.  Only careful coding by
-the user of SCM_NEWCELL and SCM_NEWCELL2 could make this safe and efficient.
+Use the new functions scm_cell and scm_double_cell instead.  The old
+macros had problems because with them allocation and initialization
+was separated and the GC could sometimes observe half initialized
+cells.  Only careful coding by the user of SCM_NEWCELL and
+SCM_NEWCELL2 could make this safe and efficient.
 
 ** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
 
@@ -794,104 +1211,70 @@ Use scm_c_source_property_breakpoint_p instead.
 
 ** Deprecated: scm_makmacro
 
-Change your code to use either scm_makmmacro or, probably better, to use r5rs
-macros.  Also, be aware that macro expansion will not be done during
-evaluation, but prior to evaluation.
-
-** Removed from scm_root_state: def_inp, def_outp, def_errp, together
-with corresponding macros scm_def_inp, scm_def_outp and scm_def_errp.
-These were undocumented and unused copies of the standard ports at the
-time that Guile was initialised.  Normally the current ports should be
-used instead, obtained from scm_current_input_port () etc.  If an
-application needs to retain earlier ports, it should save them in a
-gc-protected location.
-
-** Removed compile time option MEMOIZE_LOCALS
-
-Now, caching of local variable positions during memoization is mandatory.
-However, the option to disable the caching has most probably not been used
-anyway.
-
-** Removed compile time option SCM_RECKLESS
-
-Full number of arguments checking of closures is mandatory now.  However, the
-option to disable the checking has most probably not been used anyway.
-
-** Removed compile time option SCM_CAUTIOUS
-
-Full number of arguments checking of closures is mandatory now.  However, the
-option to disable the checking has most probably not been used anyway.
-
-** Deprecated configure flags USE_THREADS and GUILE_ISELECT
-
-Previously, when the C preprocessor macro USE_THREADS was defined,
-libguile included a thread API.  This API is now always included, even
-when threads are not really supported.  Thus, you don't need to test
-for USE_THREADS.
-
-Analogously, GUILE_ISELECT was defined when the function
-scm_internal_select was provided by Guile.  This function is now
-always defined, and GUILE_ISELECT with it.
+Change your code to use either scm_makmmacro or to define macros in
+Scheme, using 'define-macro'.
 
 ** New function scm_c_port_for_each.
 
 This function is like scm_port_for_each but takes a pointer to a C
 function as the callback instead of a SCM value.
 
-** Deprecated definitions of error strings: scm_s_expression, scm_s_test,
-scm_s_body, scm_s_bindings, scm_s_variable, scm_s_clauses, scm_s_formals
-
-These error message strings were used to issue syntax error messages by
-guile's evaluator.  It's unlikely that they have been used by user code.
-
-** Deprecated helper macros for evaluation and application: SCM_EVALIM2,
-SCM_EVALIM, SCM_XEVAL, SCM_XEVALCAR
-
-These macros were used in the implementation of the evaluator.  It's unlikely
-that they have been used by user code.
-
-** Deprecated macros for iloc handling: SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK
-
-These macros were used in the implementation of the evaluator.  It's unlikely
-that they have been used by user code.
-
-** Removed definitions: scm_lisp_nil, scm_lisp_t, s_nil_ify,
-scm_m_nil_ify, s_t_ify, scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify,
-scm_m_0_ify, s_1_ify, scm_m_1_ify, scm_debug_newcell,
-scm_debug_newcell2, scm_tc16_allocated, SCM_SET_SYMBOL_HASH,
-SCM_IM_NIL_IFY, SCM_IM_T_IFY, SCM_IM_0_COND, SCM_IM_0_IFY,
-SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED, scm_debug_newcell,
-scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL, SCM_FPE_SIGNAL,
-SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL, SCM_GC_SIGNAL,
-SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG, SCM_NUM_SIGS,
-*top-level-lookup-closure*, scm_top_level_lookup_closure_var,
-scm_system_transformer, scm_eval_3, scm_eval2,
-root_module_lookup_closure, SCM_SLOPPY_STRINGP, SCM_RWSTRINGP,
-scm_read_only_string_p, scm_make_shared_substring, scm_tc7_substring,
-sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP, SCM_DEFVARIABLEP, scm_mkbig,
-scm_big2inum, scm_adjbig, scm_normbig, scm_copybig, scm_2ulong2big,
-scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT, SCM_SETCHARS,
-SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET, SCM_LENGTH_MAX,
-SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH, SCM_ROCHARS, SCM_ROUCHARS,
-SCM_SUBSTRP, SCM_COERCE_SUBSTR, scm_sym2vcell, scm_intern,
-scm_intern0, scm_sysintern, scm_sysintern0,
+** The names scm_internal_select, scm_thread_sleep, and
+   scm_thread_usleep have been discouraged.
+
+Use scm_std_select, scm_std_sleep, scm_std_usleep instead.
+
+** The GC can no longer be blocked.
+
+The global flags scm_gc_heap_lock and scm_block_gc have been removed.
+The GC can now run (partially) concurrently with other code and thus
+blocking it is not well defined.
+
+** Many definitions have been removed that were previously deprecated.
+
+scm_lisp_nil, scm_lisp_t, s_nil_ify, scm_m_nil_ify, s_t_ify,
+scm_m_t_ify, s_0_cond, scm_m_0_cond, s_0_ify, scm_m_0_ify, s_1_ify,
+scm_m_1_ify, scm_debug_newcell, scm_debug_newcell2,
+scm_tc16_allocated, SCM_SET_SYMBOL_HASH, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
+SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY, SCM_GC_SET_ALLOCATED,
+scm_debug_newcell, scm_debug_newcell2, SCM_HUP_SIGNAL, SCM_INT_SIGNAL,
+SCM_FPE_SIGNAL, SCM_BUS_SIGNAL, SCM_SEGV_SIGNAL, SCM_ALRM_SIGNAL,
+SCM_GC_SIGNAL, SCM_TICK_SIGNAL, SCM_SIG_ORD, SCM_ORD_SIG,
+SCM_NUM_SIGS, scm_top_level_lookup_closure_var,
+*top-level-lookup-closure*, scm_system_transformer, scm_eval_3,
+scm_eval2, root_module_lookup_closure, SCM_SLOPPY_STRINGP,
+SCM_RWSTRINGP, scm_read_only_string_p, scm_make_shared_substring,
+scm_tc7_substring, sym_huh, SCM_VARVCELL, SCM_UDVARIABLEP,
+SCM_DEFVARIABLEP, scm_mkbig, scm_big2inum, scm_adjbig, scm_normbig,
+scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl, SCM_FIXNUM_BIT,
+SCM_SETCHARS, SCM_SLOPPY_SUBSTRP, SCM_SUBSTR_STR, SCM_SUBSTR_OFFSET,
+SCM_LENGTH_MAX, SCM_SETLENGTH, SCM_ROSTRINGP, SCM_ROLENGTH,
+SCM_ROCHARS, SCM_ROUCHARS, SCM_SUBSTRP, SCM_COERCE_SUBSTR,
+scm_sym2vcell, scm_intern, scm_intern0, scm_sysintern, scm_sysintern0,
 scm_sysintern0_no_module_lookup, scm_init_symbols_deprecated,
 scm_vector_set_length_x, scm_contregs, scm_debug_info,
-scm_debug_frame, SCM_DSIDEVAL, SCM_OPDIRP, scm_fport, scm_option,
-SCM_CONST_LONG, SCM_VCELL, SCM_GLOBAL_VCELL, SCM_VCELL_INIT,
-SCM_GLOBAL_VCELL_INIT, scm_srcprops, scm_srcprops_chunk,
-scm_info_frame, scm_stack, scm_array, scm_array_dim,
-SCM_ARRAY_CONTIGUOUS, SCM_HUGE_LENGTH, SCM_FUNC_NAME, SCM_WTA,
-RETURN_SCM_WTA, SCM_VALIDATE_NUMBER_COPY,
-SCM_VALIDATE_NUMBER_DEF_COPY, SCM_VALIDATE_STRINGORSUBSTR,
-SCM_VALIDATE_ROSTRING, SCM_VALIDATE_ROSTRING_COPY,
-SCM_VALIDATE_NULLORROSTRING_COPY, SCM_VALIDATE_RWSTRING,
-SCM_VALIDATE_OPDIR, DIGITS, scm_small_istr2int, scm_istr2int,
+scm_debug_frame, SCM_DSIDEVAL, SCM_CONST_LONG, SCM_VCELL,
+SCM_GLOBAL_VCELL, SCM_VCELL_INIT, SCM_GLOBAL_VCELL_INIT,
+SCM_HUGE_LENGTH, SCM_VALIDATE_STRINGORSUBSTR, SCM_VALIDATE_ROSTRING,
+SCM_VALIDATE_ROSTRING_COPY, SCM_VALIDATE_NULLORROSTRING_COPY,
+SCM_VALIDATE_RWSTRING, DIGITS, scm_small_istr2int, scm_istr2int,
 scm_istr2flo, scm_istring2number, scm_istr2int, scm_istr2flo,
 scm_istring2number, scm_vtable_index_vcell, scm_si_vcell, SCM_ECONSP,
 SCM_NECONSP, SCM_GLOC_VAR, SCM_GLOC_VAL, SCM_GLOC_SET_VAL,
-SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable
+SCM_GLOC_VAL_LOC, scm_make_gloc, scm_gloc_p, scm_tc16_variable,
+SCM_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
+
+* Changes to bundled modules
+
+** (ice-9 debug)
 
+Using the (ice-9 debug) module no longer automatically switches Guile
+to use the debugging evaluator.  If you want to switch to the
+debugging evaluator (which is needed for backtrace information if you
+hit an error), please add an explicit "(debug-enable 'debug)" to your
+code just after the code to use (ice-9 debug).
+
+\f
 Changes since Guile 1.4:
 
 * Changes to the distribution
@@ -1213,7 +1596,7 @@ load path of Guile.
 This has been found to be too tricky, and is no longer supported.  The
 shared libraries are now called "extensions".  You should now write a
 small Scheme file that calls `load-extension' to load the shared
-library and initialize it explicitely.
+library and initialize it explicitly.
 
 The shared libraries themselves should be installed in the usual
 places for shared libraries, with names like "libguile-foo-bar".
@@ -1744,24 +2127,18 @@ Instead, use scm_c_memq or scm_memq, scm_memv, scm_member.
 
 ** New functions: scm_call_0, scm_call_1, scm_call_2, scm_call_3
 
-Call a procedure with the indicated number of arguments.
-
-Example:
-
-  scm_call_1 (proc, arg1);
+Call a procedure with the indicated number of arguments.  See "Fly
+Evaluation" in the manual.
 
 ** New functions: scm_apply_0, scm_apply_1, scm_apply_2, scm_apply_3
 
-Call a procedure with the indicated number of arguments and a list
-of arguments.
-
-Example:
-
-  scm_apply_1 (proc, arg1, args);
+Call a procedure with the indicated number of arguments and a list of
+further arguments.  See "Fly Evaluation" in the manual.
 
 ** New functions: scm_list_1, scm_list_2, scm_list_3, scm_list_4, scm_list_5
 
-Create a list of the given number of elements.
+Create a list of the given number of elements.  See "List
+Constructors" in the manual.
 
 ** Renamed function: scm_listify has been replaced by scm_list_n.
 
@@ -6778,7 +7155,7 @@ Until then, gtcltk-lib provides trivial, low-maintenance functionality.
 \f
 Copyright information:
 
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2006 Free Software Foundation, Inc.
 
    Permission is granted to anyone to make or distribute verbatim copies
    of this document as received, in any medium, provided that the