*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 3e0e2eb..458e9c3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,5 +1,5 @@
 Guile NEWS --- history of user-visible changes.
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
@@ -12,7 +12,7 @@ Each release reports the NEWS in the following sections:
 * Changes to the C interface 
 
 \f
-Changes since the stable branch:
+Changes since the 1.6.x series:
 
 * Changes to the distribution
 
@@ -23,37 +23,21 @@ Changes since the stable branch:
 ** Guile now requires GNU MP (http://swox.com/gmp).
 
 Guile now uses the GNU MP library for arbitrary precision arithmetic.
-At the moment it is being used to handle Guile's bignums.
 
 ** Guile now has separate private and public configuration headers.
 
-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.
-
-Seen libguile/__scm.h and gen-scmconfig.c for more information.
-
-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.
-
-** The INSTALL file is now the generic automake installed one.
-
-Guile specific instructions can be found in the README.
+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.7".  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.7.
 
 Providing an unchanging version number during a stable release for
 things like the versioned share directory can be particularly
@@ -74,11 +58,32 @@ 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.
 
+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.
 ** New module (ice-9 serialize):
 
 (serialize FORM1 ...) and (parallelize FORM1 ...) are useful when
@@ -86,6 +91,8 @@ 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.
 
+### move rest to manual
+
 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
@@ -114,27 +121,57 @@ 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.
 
-** New module (srfi srfi-26)
+** Support for SRFI 61, extended cond syntax for multiple valuesm has
+   been added.
 
-This is an implementation of SRFI-26.
+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)).
+
+** New module (srfi srfi-26) provides support for `cut' and `cute'.
+
+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.
 
 ** New module (srfi srfi-31)
 
 This is an implementation of SRFI-31 which provides a special form
 `rec' for recursive evaluation.
 
-** Guile now includes its own version of libltdl.
+** The modules (srfi srfi-13), (srfi srfi-14) and (srfi srfi-4) have
+   been merged with the core, making their functionality always
+   available.
+
+The modules are still available, tho, and you could use them together
+with a renaming import, for example.
+
+** Guile no longer includes its own version of libltdl.
 
-We now use a modified version of libltdl that allows us to make
-improvements to it without having to rely on libtool releases.
+The official version is good enough now.
 
 ** The --enable-htmldoc option has been removed from 'configure'.
 
 Support for translating the documentation into HTML is now always
 provided.  Use 'make html'.
 
+** 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'.
 
 Specifying `--no-debug' on the command line will keep the debugging
@@ -163,11 +200,97 @@ be used with '-e'.  For example, you can now write a script like
 
 * Changes to Scheme functions and syntax
 
-** There is now support for copy-on-write substrings and
-   mutation-sharing substrings.
+** Guardians have changed back to their original semantics
+
+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.
+
+They no longer drop cyclic data structures.
+
+The C function scm_make_guardian has been changed incompatibly and no
+longer takes the 'greedy_p' argument.
+
+** New function hashx-remove!
+
+This function completes the set of 'hashx' functions.
+
+** The concept of dynamic roots has been factored into continuation
+   barriers and dynamic states.
+
+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.
+
+To restrict the influence that captured continuations can have on the
+control flow, you can errect continuation barriers.  See "Continuation
+Barriers" in the manual.
+
+The function call-with-dynamic-root now essentially temporarily
+installs a new dynamic state and errects a continuation barrier.
+
+** The default load path no longer includes "." at the end.
+
+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.
+
+** The uniform vector and array support has been overhauled.
+
+It now complies with SRFI-4 and the weird prototype based uniform
+array creation has been deprecated.  See the manual for more details.
+
+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 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.
+
+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.
+
+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.
+
+** There is now support for copy-on-write substrings, mutation-sharing
+   substrings and read-only strings.
+
+Three new procedures are related to this: substring/shared,
+substring/copy, and substring/read-only.  See the manual for more
+information.
+
+** Backtraces will now highlight the value that caused the error.
+
+By default, these values are enclosed in "{...}", such as in this
+example:
+
+    guile> (car 'a)
 
-Two new procedures are related to this: substring/shared and
-substring/copy.  See the manual for more information.
+    Backtrace:
+    In current input:
+       1: 0* [car {a}]
+
+    <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)
+
+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:
+
+    (print-set! highlight-prefix "\x1b[1m")
+    (print-set! highlight-suffix "\x1b[22m")
+
+
+** 'gettext' support for internationalization has been added.
+
+See the manual for details.
 
 ** New syntax '@' and '@@':
 
@@ -179,13 +302,63 @@ writing
 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
-'@' with 'set!'.
+'@' as a target of 'set!', as in (set! (@ mod var) val).
 
 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.
 
+** Keyword syntax has been made more disciplined.
+
+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.
+
+Previously:
+
+    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
+
+Now:
+
+    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
+
+** The printing of symbols that might look like keywords can be
+   controlled.
+
+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:
+
+    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
+
 ** 'while' now provides 'break' and 'continue'
 
 break and continue were previously bound in a while loop, but not
@@ -196,12 +369,12 @@ dropped.
 ** 'call-with-current-continuation' is now also available under the name
    'call/cc'.
 
-** Checking for duplicate bindings in module system
+** The module system now checks for duplicate bindings.
 
 The module system now can check for name conflicts among imported
 bindings.
 
-The behavior can be controlled by specifying one or more duplicates
+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:
 
@@ -225,6 +398,8 @@ can add the line:
 
 to your .guile init file.
 
+### move rest to manual
+
 The syntax for the :duplicates option is:
 
   :duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...)
@@ -277,7 +452,13 @@ a prefix to all imported bindings.
 will import all bindings exported from bar, but rename them by adding
 the prefix `bar:'.
 
-** Merging generic functions
+** 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'.
+
+### move the rest to the manual
 
 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
@@ -340,37 +521,16 @@ 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.
 
-** Futures: future, make-future, future-ref
+** New feature, 'futures': future, make-future, future-ref
 
-Futures are like promises, but begun immediately in a new thread.  See
-the "Futures" section in the reference manual.
+Futures are like promises, but begin execution immediately in a new
+thread.  See the "Futures" section in the reference manual.
 
 ** 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.
 
-** Fair mutexes and condition variables
-
-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.
-
-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.
-
-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.
-
-** New functions: make-fair-mutex, make-fair-condition-variable'
-
-Make a new fair mutex and a new fair condition variable respectively.
-
 ** New function 'try-mutex'.
 
 This function will attempt to lock a mutex but will return immediately
@@ -401,6 +561,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'.
@@ -519,9 +684,9 @@ 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.
 
-** We now have uninterned symbols.
+** Guile now has uninterned symbols.
 
-The new function 'make-symbol' will return a uninterned symbol.  This
+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.
 
@@ -547,9 +712,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
 
@@ -559,63 +724,58 @@ 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.
 
-** call-with-output-string doesn't segv on closed port
-
-Previously call-with-output-string would give a segmentation fault if
-the string port was closed by the called function.  An exception is
-raised now.
-
-** (ice-9 popen) duplicate pipe fd fix
-
-open-pipe, open-input-pipe and open-output-pipe left an extra copy of
-their pipe file descriptor in the child, which was normally harmless,
-but it can prevent the parent seeing eof or a broken pipe immediately
-and has now been fixed.
+** The functions make-keyword-from-dash-symbol and keyword-dash-symbol
+   have been discouraged.
 
-** source-properties and set-source-properties! fix
+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.
 
-Properties set with set-source-properties! can now be read back
-correctly with source-properties.
+Use symbol->keyword and keyword->symbol instead.
 
-** SRFI-1 fixes
+** The `cheap' debug option is now obsolete
 
-delete and delete! now call the "=" procedure with arguments in the
-order described by the SRFI-1 specification
+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.
 
-list-copy now accepts improper lists, per the specification.
+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.
 
-** SRFI-4 fixes
+** Evaluator trap calls now support `tweaking'
 
-Larger values in 64-bit vectors should print correctly now.
+`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.
 
-** SRFI-19 fixes
+* Changes to the C interface
 
-date-week-number now correctly respects the requested day of week
-starting the week.
+** The functions scm_hash_fn_remove_x and scm_hashx_remove_x no longer
+   take a 'delete' function argument.
 
-* Changes to the C interface
+This argument makes no sense since the delete function is used to
+remove a pair from an alist, and this must not be configurable.
 
-** There is the new notion of 'discouraged' features.
+This is an incompatible change.
 
-This is a milder form of deprecation.
+** The GH interface is now subject to the deprecation mechanism
 
-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.
+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.
 
-You can omit discouraged features from libguile by configuring it with
-the '--disable-discouraged' option.
+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.
@@ -635,7 +795,7 @@ alternatives.
   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, ...)
+  - SCM scm_from_<type> (<type> val, ...)
 
   These functions convert from a C type to a SCM value; for example,
   scm_from_int for ints.
@@ -658,15 +818,15 @@ Use scm_c_make_rectangular instead.
 ** The INUM macros have been deprecated.
 
 A lot of code uses these macros to do general integer conversions,
-although they only work correctly with fixnums.  Use the following
-alternatives.
+although the macros only work correctly with fixnums.  Use the
+following alternatives.
 
   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
 
-  SCM_VALIDATE_INUM_*   ->  Do not use these, scm_to_int, etc. will
+  SCM_VALIDATE_INUM_*   ->  Do not use these; scm_to_int, etc. will
                             do the validating for you.
 
 ** The scm_num2<type> and scm_<type>2num functions and scm_make_real
@@ -687,6 +847,11 @@ code.
 Use scm_is_eq for new code, which fits better into the naming
 conventions.
 
+** The macros SCM_CONSP, SCM_NCONSP, SCM_NULLP, and SCM_NNULLP have
+   been discouraged.
+
+Use the function scm_is_pair or scm_is_null instead.
+
 ** The functions scm_round and scm_truncate have been deprecated and
    are now available as scm_c_round and scm_c_truncate, respectively.
 
@@ -711,12 +876,14 @@ easier to use from C.
 
 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 later, when Guile switches to some
-form of Unicode.
+mutation-sharing substrings and when Guile switches to some form of
+Unicode.
 
 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.
+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.
 
 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
@@ -724,9 +891,9 @@ 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.
 
-** Some string and symbol functions have been discouraged.
+** Some string, symbol and keyword functions have been discouraged.
 
-They don't fot into the uniform naming scheme and are not explicit
+They don't fit into the uniform naming scheme and are not explicit
 about the character encoding.
 
 Replace according to the following table:
@@ -738,15 +905,80 @@ Replace according to the following table:
     scm_str2string            -> scm_from_locale_string
     scm_makfrom0str           -> scm_from_locale_string
     scm_mem2symbol            -> scm_from_locale_symboln
-    scm_mem2uninterned_symbol -> scm_make_symbol + scm_from_locale_stringn
+    scm_mem2uninterned_symbol -> scm_from_locale_stringn + scm_make_symbol
     scm_str2symbol            -> scm_from_locale_symbol
 
     SCM_SYMBOL_HASH           -> scm_hashq
     SCM_SYMBOL_INTERNED_P     -> scm_symbol_interned_p
 
+    scm_c_make_keyword        -> scm_from_locale_keyword
+
+** The functions scm_keyword_to_symbol and sym_symbol_to_keyword are
+   now also available to C code.
+
+** SCM_KEYWORDP and SCM_KEYWORDSYM have been deprecated.
+
+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.
+
+** A new way to access arrays in a thread-safe and efficient way has
+   been added.
+
+See the manual, node "Accessing Arrays From C".
+
+** The old uniform vector and bitvector implementations have been
+   unceremoniously removed.
+
+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 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.
+
+** The macros dealing with vectors have been deprecated.
+
+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.
+
+Deprecated are SCM_VECTORP, SCM_VELTS, SCM_VECTOR_MAX_LENGTH,
+SCM_VECTOR_LENGTH, SCM_VECTOR_REF, SCM_VECTOR_SET, SCM_WRITABLE_VELTS.
+
+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.
+
+** Some C functions and macros related to arrays have been deprecated.
+
+Migrate according to the following table:
+
+    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_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
+
 ** SCM_CELL_WORD_LOC has been deprecated.
 
-Use the new macro SCM_CELL_OBJECT_LOC instead, which return a pointer
+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.
 
 This was done to allow the correct use of pointers into the Scheme
@@ -766,9 +998,9 @@ used to get and set the 16 exra bits in the zeroth word of a smob.
 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 words.  Like wise for SCM_SMOB_OBJECT_2, etc.
+smob word.  Like wise for SCM_SMOB_OBJECT_2, etc.
 
-** New way to deal with non-local exits and reentries.
+** New way to deal with non-local exits and re-entries.
 
 There is a new set of functions that essentially do what
 scm_internal_dynamic_wind does, but in a way that is more convenient
@@ -806,12 +1038,31 @@ This function calls 'free' on a given pointer when a frame is left.
 Thus the call to scm_frame_unwind_handler above could be replaced with
 simply scm_frame_free (mem).
 
-** New way to block and unblock asyncs
+** 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_frame_block_asyncs and scm_frame_unblock_asyncs
 
 In addition to scm_c_call_with_blocked_asyncs you can now also use
 scm_frame_block_asyncs in a 'frame' (see above).  Likewise for
 scm_c_call_with_unblocked_asyncs and scm_frame_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 frame 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_frame_current_<foo>_port in a 'frame' (see
@@ -828,229 +1079,46 @@ 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.
 
-** scm_unmemocopy and scm_unmemoize have been removed from public use.
-
-For guile internal use, the functions scm_i_unmemocopy_expr,
-scm_i_unmemocopy_body and scm_i_unmemoize_expr are provided to replace
-scm_unmemocopy and scm_unmemoize.  User code should not have used
-scm_unmemocopy and scm_unmemoize and thus should not use the replacement
-functions also.
-
-Background: Formerly, scm_unmemocopy and scm_unmemoize would have allowed to
-unmemoize a single expression as well as a sequence of body forms.  This would
-have lead to problems when unmemoizing code of the new memoizer.  Now the two
-cases have to be distinguished.
+** 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.  See below for
-the ones which have been renamed.
-
-** HAVE_STDINT_H and HAVE_INTTYPES_H have been removed from public use.
-
-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.
-
-** USE_DLL_IMPORT is no longer defined publically.
-
-gen-scmconfig now uses it to decide what contents to place in the
-public scmconfig.h header without adding the USE_DLL_IMPORT itself.
-
-** HAVE_LIMITS_H has been removed from public use.
-
-gen-scmconfig now just uses HAVE_LIMITS_H to decide whether or not to
-add a limits.h include in scmconfig.h.
-
-** time.h, sys/time.h, etc. #ifdefery has been removed from public headers.
-
-gen-scmconfig now just uses the same logic to decide what time related
-#includes to add to scmconfig.h.
-
-** HAVE_STRUCT_TIMESPEC has been removed from public use.
-
-scmconfig.h now just defines scm_t_timespec.
-
-** HAVE_PTRDIFF has been removed from public use and Guile doesn't
-   define ptrdiff_t.
-
-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.
-
-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.
-
-** HAVE_UINTPTR_T and HAVE_UINTPTR_T have been removed from public use.
-
-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.
-
-** The public #define STDC_HEADERS has been renamed to SCM_HAVE_STDC_HEADERS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_SYS_SELECT has been renamed to
-   SCM_HAVE_SYS_SELECT_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_FLOATINGPOINT_H has been renamed to
-   SCM_HAVE_FLOATINGPOINT_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_IEEEFP_H has been renamed to SCM_HAVE_IEEEFP_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_NAN_H has been renamed to SCM_HAVE_NAN_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_WINSOCK2_H has been renamed to SCM_HAVE_WINSOCK2_H.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define HAVE_ARRAYS has been renamed to SCM_HAVE_ARRAYS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define STACK_GROWS_UP has been renamed to SCM_STACK_GROWS_UP.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define USE_PTHREAD_THREADS has been renamed to
-   SCM_USE_PTHREAD_THREADS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define USE_NULL_THREADS has been renamed to
-   SCM_USE_NULL_THREADS.
-
-The previous name was too generic for the global public namespace.
-
-** The public #define USE_COOP_THREADS has been renamed to
-   SCM_USE_COOP_THREADS.
-
-The previous name was too generic for the global public namespace.
-
-** SCM_C_INLINE is publically defined if possible.
-
-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.
-
-** Guile now publically defines some basic type infrastructure.
-
-Guile always defines
-
-  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 */
-
-  scm_t_int8
-  scm_t_uint8
-  scm_t_int16
-  scm_t_uint16
-  scm_t_int32
-  scm_t_uint32
-
-Guile always defines these to 0 or 1
-
-  SCM_HAVE_T_INT64
-  SCM_HAVE_T_UINT64
-
-and when either of these are defined to 1, also defines
-
-  scm_t_int64
-  scm_t_uint64
-
-respectively.
-
-Guile always defines
-
-  scm_t_timespec
-
-** The macro SCM_IFLAGP now only returns true for flags
-
-User code should never have used this macro anyway.  And, you should not use
-it in the future either.  Thus, the following explanation is just for the
-impropable case that your code actually made use of this macro, and that you
-are willing to depend on internals which will probably change in the near
-future.
-
-Formerly, SCM_IFLAGP also returned true for evaluator bytecodes created with
-SCM_MAKSPCSYM (short instructions) and evaluator bytecodes created with
-SCM_MAKISYM (short instructions).  Now, SCM_IFLAG only returns true for
-Guile's special constants created with SCM_MAKIFLAG.  To achieve the old
-behaviour, instead of
-
-  SCM_IFLAGP(x)
-
-you would have to write
-
-  (SCM_ISYMP(x) || SCM_IFLAGP(x))
+private or renamed with a more suitable public name.
 
 ** The macro SCM_TYP16S has been deprecated.
 
-This macro is not intended for public use.  However, if you allocated types
-with tc16 type codes in a way that you would have needed this macro, you are
-expected to have a deep knowledge of Guile's type system.  Thus, you should
-know how to replace this macro.
+This macro is not intended for public use.
 
 ** The macro SCM_SLOPPY_INEXACTP has been deprecated.
 
-Use SCM_INEXACTP instead.
+Use scm_is_true (scm_inexact_p (...)) instead.
 
 ** The macro SCM_SLOPPY_REALP has been deprecated.
 
-Use SCM_REALP instead.
+Use scm_is_real instead.
 
 ** The macro SCM_SLOPPY_COMPLEXP has been deprecated.
 
-Use SCM_COMPLEXP instead.
-
-** The preprocessor define USE_THREADS has been deprecated.
-
-Going forward, assume that the thread API is always present.
+Use scm_is_complex instead.
 
-** The preprocessor define GUILE_ISELECT has been deprecated.
+** Some preprocessor defines have been deprecated.
 
-Going forward, assume that scm_internal_select is always present.
+These defines indicated whether a certain feature was present in Guile
+or not.  Going forward, assume that the features are always present.
 
-** The preprocessor define READER_EXTENSIONS has been deprecated.
+The macros are: USE_THREADS, GUILE_ISELECT, READER_EXTENSIONS,
+DEBUG_EXTENSIONS, DYNAMIC_LINKING.
 
-Going forward, assume that the features represented by
-READER_EXTENSIONS are always present.
-
-** The preprocessor define DEBUG_EXTENSIONS has been deprecated.
-
-Going forward, assume that the features represented by
-DEBUG_EXTENSIONS are always present.
-
-** The preprocessor define DYNAMIC_LINKING has been deprecated.
-
-Going forward, assume that the features represented by
-DYNAMIC_LINKING are always present.
+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
 
@@ -1067,17 +1135,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
@@ -1085,14 +1142,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
@@ -1112,11 +1161,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
@@ -1142,11 +1196,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
@@ -1159,15 +1208,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.
 
@@ -1180,105 +1230,46 @@ 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 helper functions for evaluation and application:
-scm_m_expand_body, scm_macroexp
-
-These functions were used in the implementation of the evaluator.  It's
-unlikely that they have been used by user code.
-
-** Deprecated functions and variables for evaluation and application:
-scm_ceval, scm_deval and scm_ceval_ptr
-
-These functions and variables were used in the implementation of the
-evaluator.  It's unlikely that they have been used by user code.  If you have
-used these functions, switch to scm_eval or scm_eval_x.
-
-** Deprecated functions for unmemoization: scm_unmemocar
-
-** Deprecated definitions for iloc and isym handling
-
-SCM_ILOC00, SCM_IDINC, SCM_IDSTMSK, SCM_IFRINC, SCM_ICDR, SCM_IFRAME,
-SCM_IDIST, SCM_ICDRP, SCM_ISYMNUM, SCM_ISYMCHARS, scm_isymnames.
-
-These definitions 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,
-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,
+** 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_CONST_LONG, SCM_VCELL,
@@ -1292,15 +1283,15 @@ 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_CHARS, SCM_LENGTH, SCM_SET_STRING_CHARS, SCM_SET_STRING_LENGTH.
 
-** Deprecated definitions for debugging: scm_debug_mode, SCM_DEBUGGINGP
-
-These functions were used in the implementation of the evaluator.  It's
-unlikely that they have been used by user code.
+* Changes to bundled modules
 
-** Removed macro SCM_MAKSPCSYM
+** (ice-9 debug)
 
-This macro was used for defining byte codes of the evaluator.  It is almost
-impossible that user code has used this macro.
+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: