*** empty log message ***
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 5513a26..4f3f11e 100644 (file)
--- a/NEWS
+++ b/NEWS
-Guile NEWS --- history of user-visible changes.  -*- text -*-
-Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+Guile NEWS --- history of user-visible changes.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
+
+Each release reports the NEWS in the following sections:
+
+* Changes to the distribution
+* Changes to the stand-alone interpreter
+* Changes to Scheme functions and syntax
+* Changes to the C interface 
+
 \f
+Changes since the stable branch:
+
+* Changes to the distribution
+
+** Guile is now licensed with the GNU Lesser General Public License.
+
+** 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.
+
+** 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
+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.
+
+Providing an unchanging version number during a stable release for
+things like the versioned share directory can be particularly
+important for Guile "add-on" packages, since it provides a directory
+that they can install to that won't be changed out from under them
+with each micro release during a stable series.
+
+** Thread implementation has changed.
+
+When you configure "--with-threads=null", you will get the usual
+threading API (call-with-new-thread, make-mutex, etc), but you can't
+actually create new threads.  Also, "--with-threads=no" is now
+equivalent to "--with-threads=null".  This means that the thread API
+is always present, although you might not be able to create new
+threads.
+
+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 default is "pthreads", unless your platform doesn't have pthreads,
+in which case "null" threads are used.
+
+** 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.
+
+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).
+
+Both serialize and parallelize can be nested.  If so, the
+inner-most construct is in effect.
+
+NOTE 1: A serial section can run in parallel with a parallel
+section.
+
+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.
+
+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.
+
+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 now 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.
+
+* Changes to the standalone interpreter
+
+** New command line option `--no-debug'.
+
+Specifying `--no-debug' on the command line will keep the debugging
+evaluator turned off, even for interactive sessions.
+
+** User-init file ~/.guile is now loaded with the debugging evaluator.
+
+Previously, the normal evaluator would have been used.  Using the
+debugging evaluator gives better error messages.
+
+* Changes to Scheme functions and syntax
+
+** 'call-with-current-continuation' is now also available under the name
+   'call/cc'.
+
+** Checking for duplicate bindings in module system
+
+The module system now can check for name conflicts among imported
+bindings.
+
+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:
+
+(define-module (foo)
+  :use-module (bar)
+  :use-module (baz)
+  :duplicates check)
+
+The new default behavior of the module system when a name collision
+has been detected is to
+
+ 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).
+
+If you want the old behavior back without replacements or warnings you
+can add the line:
+
+  (default-duplicate-binding-handler 'last)
+
+to your .guile init file.
+
+The syntax for the :duplicates option is:
+
+  :duplicates HANDLER-NAME | (HANDLER1-NAME HANDLER2-NAME ...)
+
+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.
+
+Currently available duplicates handlers are:
+
+  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)
+
+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
+
+The default duplicates handler is:
+
+  (replace warn-override-core warn last)
+
+A recommended handler (which is likely to correspond to future Guile
+behavior) can be installed with:
+
+  (default-duplicate-binding-handler '(replace warn-override-core check))
+
+** New define-module option: :replace
+
+:replace works as :export, but, in addition, marks the binding as a
+replacement.
+
+A typical example is `format' in (ice-9 format) which is a replacement
+for the core binding `format'.
+
+** Adding prefixes to imported bindings in the module system
+
+There is now a new :use-module option :prefix.  It can be used to add
+a prefix to all imported bindings.
+
+  (define-module (foo)
+    :use-module ((bar) :prefix bar:))
+
+will import all bindings exported from bar, but rename them by adding
+the prefix `bar:'.
+
+** Merging generic functions
+
+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.
+
+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.
+
+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:
+
+(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 ...))
+
+(define-module (my-module)
+  :use-module (math 2D-vectors)
+  :use-module (math 3D-vectors)
+  :duplicates merge-generics)
+
+x in (my-module) will now share methods with x in both imported
+modules.
+
+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.
+
+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.
+
+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.
+
+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.
+
+Sharing is dynamic, so that adding new methods to a descendant implies
+adding it to the ancestor.
+
+If duplicates checking is desired in the above example, the following
+form of the :duplicates option can be used instead:
+
+  :duplicates (merge-generics check)
+
+** 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.
+
+** 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.
+
+** New syntax: parallel FORM ...
+
+Compute the results of FORM ... in parallel (in a separate thread for
+each form) and return them as multiple values.
+
+** New syntax: letpar ((VAR EXP) ...) BODYFORM ...
+
+Like 'let' but evaluates the binding expressions EXP ... in parallel.
+
+** New functions: par-map, par-for-each PROC ARGLIST ...
+
+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.
+
+** New functions: n-par-map, n-par-for-each N PROC ARGLIST ...
+
+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.
+
+** New function: n-for-each-par-map N S-PROC P-PROC ARGLIST ...
+
+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 ...
+
+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.
+
+** 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
+instead if blocking and indicate failure.
+
+** Waiting on a condition variable can have a timeout.
+
+The funtion 'wait-condition-variable' now takes a third, optional
+argument that specifies the point in time where the waiting should be
+aborted.
+
+** New function 'broadcast-condition-variable'.
+
+** New functions 'all-threads' and 'current-thread'.
+
+** Signals and system asyncs work better with threads.
+
+The function 'sigaction' now takes a fourth, optional, argument that
+specifies the thread that the handler should run in.  When the
+argument is omitted, the handler will run in the thread that called
+'sigaction'.
+
+Likewise, 'system-async-mark' takes a second, optional, argument that
+specifies the thread that the async should run in.  When it is
+omitted, the async will run in the thread that called
+'system-async-mark'.
+
+C code can use the new functions scm_sigaction_for_thread and
+scm_system_async_mark_for_thread to pass the new thread argument.
+
+** The function 'system-async' is deprecated.
+
+You can now pass any zero-argument procedure to 'system-async-mark'.
+The function 'system-async' will just return its argument unchanged
+now.
+
+** New functions 'call-with-blocked-asyncs' and
+   'call-with-unblocked-asyncs'
+
+The expression (call-with-blocked-asyncs PROC) will call PROC and will
+block execution of system asyncs for the current thread by one level
+while PROC runs.  Likewise, call-with-unblocked-asyncs will call a
+procedure and will unblock the execution of system asyncs by one
+level for the current thread.
+
+Only system asyncs are affected by these functions.
+
+** The functions 'mask-signals' and 'unmask-signals' are deprecated.
+
+Use 'call-with-blocked-asyncs' or 'call-with-unblocked-asyncs'
+instead.  Those functions are easier to use correctly and can be
+nested.
+
+** New function 'unsetenv'.
+
+** New macro 'define-syntax-public'.
+
+It works like 'define-syntax' and also exports the defined macro (but
+only on top-level).
+
+** There is support for Infinity and NaNs.
+
+Following PLT Scheme, Guile can now work with infinite numbers, and
+'not-a-numbers'.
+
+There is new syntax for numbers: "+inf.0" (infinity), "-inf.0"
+(negative infinity), "+nan.0" (not-a-number), and "-nan.0" (same as
+"+nan.0").  These numbers are inexact and have no exact counterpart.
+
+Dividing by an inexact zero returns +inf.0 or -inf.0, depending on the
+sign of the dividend.  The infinities are integers, and they answer #t
+for both 'even?' and 'odd?'. The +nan.0 value is not an integer and is
+not '=' to itself, but '+nan.0' is 'eqv?' to itself.
+
+For example
+
+    (/ 1 0.0)
+    => +inf.0
+
+    (/ 0 0.0)
+    => +nan.0
+
+    (/ 0)
+    ERROR: Numerical overflow
+
+Two new predicates 'inf?' and 'nan?' can be used to test for the
+special values.
+
+** Inexact zero can have a sign.
+
+Guile can now distinguish between plus and minus inexact zero, if your
+platform supports this, too.  The two zeros are equal according to
+'=', but not according to 'eqv?'.  For example
+
+    (- 0.0)
+    => -0.0
+
+    (= 0.0 (- 0.0))
+    => #t
+
+    (eqv? 0.0 (- 0.0))
+    => #f
+
+** We now have uninterned symbols.
+
+The new function 'make-symbol' will return a 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.
+
+Use the new function 'symbol-interned?' to check whether a symbol is
+interned or not.
+
+** pretty-print has more options.
+
+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.
+
+** Variables have no longer a special behavior for `equal?'.
+
+Previously, comparing two variables with `equal?' would recursivly
+compare their values.  This is no longer done.  Variables are now only
+`equal?' if they are `eq?'.
+
+** `(begin)' is now valid.
+
+You can now use an empty `begin' form.  It will yield #<unspecified>
+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.
+
+** Soft ports now allow a `char-ready?' procedure
+
+The vector argument to `make-soft-port' can now have a length of
+either 5 or 6.  (Previously the length had to be 5.)  The optional 6th
+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.
+
+In the srfi-1 module delete and delete!, the order of the arguments to
+the "=" procedure now matches the SRFI-1 specification.
+
+* Changes to the C interface
+
+** 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
+
+  SCM_HAVE_T_INT64
+  SCM_HAVE_T_UINT64
+
+and when either of these are defined to 1, optionally defines 
+
+  scm_t_int64
+  scm_t_uint64
+
+respectively.
+
+Guile always defines
+
+  scm_t_timespec
+
+** The preprocessor define USE_THREADS has been deprecated.
+
+Going forward, assume that the thread API is always present.
+
+** The preprocessor define GUILE_ISELECT has been deprecated.
+
+Going forward, assume that scm_internal_select is always present.
+
+** The preprocessor define READER_EXTENSIONS has been deprecated.
+
+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 preprocessor define STACK_DIRECTION has been deprecated.
+
+There should be no need to know about the stack direction for ordinary
+programs.  (Do not use.)
+
+** New function: scm_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.
+
+** The function scm_call_with_new_thread has a new prototype.
+
+Instead of taking a list with the thunk and handler, these two
+arguments are now passed directly:
+
+    SCM scm_call_with_new_thread (SCM thunk, SCM handler);
+
+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
+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
+sweeping. This is reflected in the output of (gc-stats); since cells
+are being freed when they are allocated, the cells-allocated field
+stays roughly constant.
+
+For malloc related triggers, the behavior is changed. It uses the same
+heuristic as the cell-triggered collections.  It may be tuned with the
+environment variables GUILE_MIN_YIELD_MALLOC.  This is the percentage
+for minimum yield of malloc related triggers. The default is 40.
+GUILE_INIT_MALLOC_LIMIT sets the initial trigger for doing a GC. The
+default is 200 kb.
+
+Debugging operations for the freelist have been deprecated, along with
+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.
+
+** 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
+
+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
+initializes a new cell (see below).
+
+** New functions for memory management
+
+A new set of functions for memory management has been added since the
+old way (scm_must_malloc, scm_must_free, etc) was error prone and
+indeed, Guile itself contained some long standing bugs that could
+cause aborts in long running programs.
+
+The new functions are more symmetrical and do not need cooperation
+from smob free routines, among other improvements.
+
+The new functions are scm_malloc, scm_realloc, scm_calloc, scm_strdup,
+scm_strndup, scm_gc_malloc, scm_gc_calloc, scm_gc_realloc,
+scm_gc_free, scm_gc_register_collectable_memory, and
+scm_gc_unregister_collectable_memory.  Refer to the manual for more
+details and for upgrading instructions.
+
+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
+has been marked by adding the macro "SCM_API" to the start of the
+declaration.  This macro can expand into different things, the most
+common of which is just "extern" for Unix platforms.  On Win32, it can
+be used to control which symbols are exported from a DLL.
+
+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
+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.
+
+** CHECK_ENTRY, CHECK_APPLY and CHECK_EXIT have been deprecated.
+
+Use the variables scm_check_entry_p, scm_check_apply_p and scm_check_exit_p
+instead.
+
+** SRCBRKP has been deprecated.
+
+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.
+
+** 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,
+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,
+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
+
 Changes since Guile 1.4:
 
 * Changes to the distribution
 
+** A top-level TODO file is included.
+
 ** Guile now uses a versioning scheme similar to that of the Linux kernel.
 
 Guile now always uses three numbers to represent the version,
@@ -29,19 +914,52 @@ micro version number.
 
 In addition, ./GUILE-VERSION now defines GUILE_MICRO_VERSION.
 
+** New preprocessor definitions are available for checking versions.
+
+version.h now #defines SCM_MAJOR_VERSION, SCM_MINOR_VERSION, and
+SCM_MICRO_VERSION to the appropriate integer values.
+
 ** Guile now actively warns about deprecated features.
 
 The new configure option `--enable-deprecated=LEVEL' and the
 environment variable GUILE_WARN_DEPRECATED control this mechanism.
 See INSTALL and README for more information.
 
+** Guile is much more likely to work on 64-bit architectures.
+
+Guile now compiles and passes "make check" with only two UNRESOLVED GC
+cases on Alpha and ia64 based machines now.  Thanks to John Goerzen
+for the use of a test machine, and thanks to Stefan Jahn for ia64
+patches.
+
+** New functions: setitimer and getitimer.
+
+These implement a fairly direct interface to the libc functions of the
+same name.
+
+** The #. reader extension is now disabled by default.
+
+For safety reasons, #. evaluation is disabled by default.  To
+re-enable it, set the fluid read-eval? to #t.  For example:
+
+  (fluid-set! read-eval? #t)
+
+but make sure you realize the potential security risks involved.  With
+read-eval?  enabled, reading a data file from an untrusted source can
+be dangerous.
+
 ** New SRFI modules have been added:
 
 SRFI-0 `cond-expand' is now supported in Guile, without requiring
 using a module.
 
+(srfi srfi-1) is a library containing many useful pair- and list-processing
+  procedures.
+
 (srfi srfi-2) exports and-let*.
 
+(srfi srfi-4) implements homogeneous numeric vector datatypes.
+
 (srfi srfi-6) is a dummy module for now, since guile already provides
   all of the srfi-6 procedures by default: open-input-string,
   open-output-string, get-output-string.
@@ -136,7 +1054,7 @@ can be used for similar functionality.
 ** New module (ice-9 rw)
 
 This is a subset of the (scsh rw) module from guile-scsh.  Currently
-it defines two single procedures:
+it defines two procedures:
 
 *** New function: read-string!/partial str [port_or_fdes [start [end]]]
 
@@ -218,13 +1136,21 @@ guile> (string-pad "bla" 20)
 
 ** Guile now always starts up in the `(guile-user)' module.
 
-Previously, script executed via the `-s' option would run in the
+Previously, scripts executed via the `-s' option would run in the
 `(guile)' module and the repl would run in the `(guile-user)' module.
 Now every user action takes place in the `(guile-user)' module by
 default.
 
 * Changes to Scheme functions and syntax
 
+** Character classifiers work for non-ASCII characters.
+
+The predicates `char-alphabetic?', `char-numeric?',
+`char-whitespace?', `char-lower?', `char-upper?' and `char-is-both?'
+no longer check whether their arguments are ASCII characters.
+Previously, a character would only be considered alphabetic when it
+was also ASCII, for example.
+
 ** Previously deprecated Scheme functions have been removed:
 
   tag - no replacement.
@@ -344,6 +1270,61 @@ want to re-export bindings, use the new `re-export' in place of
 `export'.  The new `re-export' will not make copies of variables when
 rexporting them, as `export' did wrongly.
 
+** Module system now allows selection and renaming of imported bindings
+
+Previously, when using `use-modules' or the `#:use-module' clause in
+the `define-module' form, all the bindings (association of symbols to
+values) for imported modules were added to the "current module" on an
+as-is basis.  This has been changed to allow finer control through two
+new facilities: selection and renaming.
+
+You can now select which of the imported module's bindings are to be
+visible in the current module by using the `:select' clause.  This
+clause also can be used to rename individual bindings.  For example:
+
+  ;; import all bindings no questions asked
+  (use-modules (ice-9 common-list))
+
+  ;; import four bindings, renaming two of them;
+  ;; the current module sees: every some zonk-y zonk-n
+  (use-modules ((ice-9 common-list)
+                :select (every some
+                         (remove-if     . zonk-y)
+                        (remove-if-not . zonk-n))))
+
+You can also programmatically rename all selected bindings using the
+`:renamer' clause, which specifies a proc that takes a symbol and
+returns another symbol.  Because it is common practice to use a prefix,
+we now provide the convenience procedure `symbol-prefix-proc'.  For
+example:
+
+  ;; import four bindings, renaming two of them specifically,
+  ;; and all four w/ prefix "CL:";
+  ;; the current module sees: CL:every CL:some CL:zonk-y CL:zonk-n
+  (use-modules ((ice-9 common-list)
+                :select (every some
+                         (remove-if     . zonk-y)
+                        (remove-if-not . zonk-n))
+                :renamer (symbol-prefix-proc 'CL:)))
+
+  ;; import four bindings, renaming two of them specifically,
+  ;; and all four by upcasing.
+  ;; the current module sees: EVERY SOME ZONK-Y ZONK-N
+  (define (upcase-symbol sym)
+    (string->symbol (string-upcase (symbol->string sym))))
+
+  (use-modules ((ice-9 common-list)
+                :select (every some
+                         (remove-if     . zonk-y)
+                        (remove-if-not . zonk-n))
+                :renamer upcase-symbol))
+
+Note that programmatic renaming is done *after* individual renaming.
+Also, the above examples show `use-modules', but the same facilities are
+available for the `#:use-module' clause of `define-module'.
+
+See manual for more info.
+
 ** The semantics of guardians have changed.
 
 The changes are for the most part compatible.  An important criterion
@@ -650,6 +1631,64 @@ Use module system operations for all variables.
 That is, a call to `throw', `error', etc is now guaranteed to not
 return.
 
+** Bugfixes for (ice-9 getopt-long)
+
+This module is now tested using test-suite/tests/getopt-long.test.
+The following bugs have been fixed:
+
+*** Parsing for options that are specified to have `optional' args now checks
+if the next element is an option instead of unconditionally taking it as the
+option arg.
+
+*** An error is now thrown for `--opt=val' when the option description
+does not specify `(value #t)' or `(value optional)'.  This condition used to
+be accepted w/o error, contrary to the documentation.
+
+*** The error message for unrecognized options is now more informative.
+It used to be "not a record", an artifact of the implementation.
+
+*** The error message for `--opt' terminating the arg list (no value), when
+`(value #t)' is specified, is now more informative.  It used to be "not enough
+args".
+
+*** "Clumped" single-char args now preserve trailing string, use it as arg.
+The expansion used to be like so:
+
+    ("-abc5d" "--xyz") => ("-a" "-b" "-c" "--xyz")
+
+Note that the "5d" is dropped.  Now it is like so:
+
+    ("-abc5d" "--xyz") => ("-a" "-b" "-c" "5d" "--xyz")
+
+This enables single-char options to have adjoining arguments as long as their
+constituent characters are not potential single-char options.
+
+** (ice-9 session) procedure `arity' now works with (ice-9 optargs) `lambda*'
+
+The `lambda*' and derivative forms in (ice-9 optargs) now set a procedure
+property `arglist', which can be retrieved by `arity'.  The result is that
+`arity' can give more detailed information than before:
+
+Before:
+
+       guile> (use-modules (ice-9 optargs))
+       guile> (define* (foo #:optional a b c) a)
+       guile> (arity foo)
+       0 or more arguments in `lambda*:G0'.
+
+After:
+
+        guile> (arity foo)
+        3 optional arguments: `a', `b' and `c'.
+        guile> (define* (bar a b #:key c d #:allow-other-keys) a)
+        guile> (arity bar)
+        2 required arguments: `a' and `b', 2 keyword arguments: `c'
+        and `d', other keywords allowed.
+        guile> (define* (baz a b #:optional c #:rest r) a)
+        guile> (arity baz)
+        2 required arguments: `a' and `b', 1 optional argument: `c',
+        the rest in `r'.
+
 * Changes to the C interface
 
 ** Types have been renamed from scm_*_t to scm_t_*.
@@ -661,7 +1700,7 @@ The old names are still available with status `deprecated'.
 
 ** scm_t_bits (former scm_bits_t) is now a unsigned type.
 
-** Deprecated feature have been removed.
+** Deprecated features have been removed.
 
 *** Macros removed
 
@@ -678,6 +1717,10 @@ The old names are still available with status `deprecated'.
   scm_tc_dblc - replaced by scm_tc16_complex.
   scm_list_star - replaced by scm_cons_star.
 
+** Deprecated: scm_makfromstr
+
+Use scm_mem2string instead.
+
 ** Deprecated: scm_make_shared_substring
 
 Explicit shared substrings will disappear from Guile.
@@ -694,6 +1737,34 @@ Guile.
 
 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);
+
+** 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);
+
+** 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.
+
+** Renamed function: scm_listify has been replaced by scm_list_n.
+
+** Deprecated macros: SCM_LIST0, SCM_LIST1, SCM_LIST2, SCM_LIST3, SCM_LIST4,
+SCM_LIST5, SCM_LIST6, SCM_LIST7, SCM_LIST8, SCM_LIST9.
+
+Use functions scm_list_N instead.
+
 ** New function: scm_c_read (SCM port, void *buffer, scm_sizet size)
 
 Used by an application to read arbitrary number of bytes from a port.
@@ -989,19 +2060,33 @@ Made more compliant with the naming policy by adding a _t at the end.
 ** Deprecated functions: scm_mkbig, scm_big2num, scm_adjbig,
    scm_normbig, scm_copybig, scm_2ulong2big, scm_dbl2big, scm_big2dbl
 
-With the exception of the misterious scm_2ulong2big, they are still
+With the exception of the mysterious scm_2ulong2big, they are still
 available under new names (scm_i_mkbig etc).  These functions are not
 intended to be used in user code.  You should avoid dealing with
 bignums directly, and should deal with numbers in general (which can
 be bignums).
 
+** Change in behavior: scm_num2long, scm_num2ulong
+
+The scm_num2[u]long functions don't any longer accept an inexact
+argument.  This change in behavior is motivated by concordance with
+R5RS: It is more common that a primitive doesn't want to accept an
+inexact for an exact.
+
 ** New functions: scm_short2num, scm_ushort2num, scm_int2num,
    scm_uint2num, scm_size2num, scm_ptrdiff2num, scm_num2short,
    scm_num2ushort, scm_num2int, scm_num2uint, scm_num2ptrdiff,
    scm_num2size.
 
 These are conversion functions between the various ANSI C integral
-types and Scheme numbers.
+types and Scheme numbers.  NOTE: The scm_num2xxx functions don't
+accept an inexact argument.
+
+** New functions: scm_float2num, scm_double2num,
+   scm_num2float, scm_num2double.
+
+These are conversion functions between the two ANSI C float types and
+Scheme numbers.
 
 ** New number validation macros:
    SCM_NUM2{SIZE,PTRDIFF,SHORT,USHORT,INT,UINT}[_DEF]
@@ -1412,10 +2497,6 @@ These macros will be removed in a future release of Guile.
 scm_dblproc, SCM_UNEGFIXABLE, SCM_FLOBUFLEN, SCM_INEXP, SCM_CPLXP, SCM_REAL,
 SCM_IMAG, SCM_REALPART, scm_makdbl, SCM_SINGP, SCM_NUM2DBL, SCM_NO_BIGDIG
 
-Further, it is recommended not to rely on implementation details for guile's
-current implementation of bignums.  It is planned to replace this
-implementation with gmp in the future.
-
 ** Port internals: the rw_random variable in the scm_port structure
 must be set to non-zero in any random access port.  In recent Guile
 releases it was only set for bidirectional random-access ports.
@@ -5709,4 +6790,3 @@ Local variables:
 mode: outline
 paragraph-separate: "[         \f]*$"
 end:
-