update THANKS
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 5f4d838..6bebbf6 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, 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
 See the end for copying conditions.
 
 Please send Guile bug reports to bug-guile@gnu.org.
@@ -8,142 +8,340 @@ Please send Guile bug reports to bug-guile@gnu.org.
 Note: During the 1.9 series, we will keep an incremental NEWS for the
 latest prerelease, and a full NEWS corresponding to 1.8 -> 2.0.
 
+Changes since the 1.9.15 prerelease:
 
-Changes in 1.9.13 (since the 1.9.12 prerelease):
+** Deprecated: primitive properties
 
-** SRFI support
+The `primitive-make-property', `primitive-property-set!',
+`primitive-property-ref', and `primitive-property-del!' procedures were
+crufty and only used to implement object properties, which has a new,
+threadsafe implementation.  Use object properties or weak hash tables
+instead.
 
-The following SRFIs have been added:
+** New syntax: define-once
 
-- SRFI-27 "Sources of Random Bits"
-- SRFI-42 "Eager Comprehensions"
-- SRFI-45 "Primitives for Expressing Iterative Lazy Algorithms"
-- SRFI-67 "Compare Procedures"
+`define-once' is like Lisp's `defvar': it creates a toplevel binding,
+but only if one does not exist already.
 
-Thanks to Andreas Rottmann.
+** Added four new sets of fast quotient and remainder operators
 
-** (system foreign) API changes
+Added four new sets of fast quotient and remainder operators with
+different semantics than the R5RS operators.  They support not only
+integers, but all reals, including exact rationals and inexact
+floating point numbers.
 
-The `make-foreign-function' procedure was renamed to
-`pointer->procedure'.
-    
-** (system xref) source database
+These procedures accept two real numbers N and D, where the divisor D
+must be non-zero.  Each set of operators computes an integer quotient
+Q and a real remainder R such that N = Q*D + R and |R| < |D|.  They
+differ only in how N/D is rounded to produce Q.
 
-The `(system xref)' module can now map from source locations to
-procedures. See the `source-procedures' and `source-closures' functions.
+`floor-quotient' and `floor-remainder' compute Q and R, respectively,
+where Q has been rounded toward negative infinity.  `floor/' returns
+both Q and R, and is more efficient than computing each separately.
+Note that when applied to integers, `floor-remainder' is equivalent to
+the R5RS integer-only `modulo' operator.  `ceiling-quotient',
+`ceiling-remainder', and `ceiling/' are similar except that Q is
+rounded toward positive infinity.
 
-** New procedures: `scm_to_latin1_stringn', `scm_from_latin1_stringn'
+For `truncate-quotient', `truncate-remainder', and `truncate/', Q is
+rounded toward zero.  Note that when applied to integers,
+`truncate-quotient' and `truncate-remainder' are equivalent to the
+R5RS integer-only operators `quotient' and `remainder'.
 
-Use these procedures when you know you have latin1-encoded or
-ASCII-encoded strings.
+For `round-quotient', `round-remainder', and `round/', Q is rounded to
+the nearest integer, with ties going to the nearest even integer.
 
-** New procedures: `scm_to_stringn', `scm_from_stringn'
+** Improved exactness handling for complex number parsing
 
-Use these procedures if you want to encode or decode from a particular
-locale.
+When parsing non-real complex numbers, exactness specifiers are now
+applied to each component, as is done in PLT Scheme.  For complex
+numbers written in rectangular form, exactness specifiers are applied
+to the real and imaginary parts before calling scm_make_rectangular.
+For complex numbers written in polar form, exactness specifiers are
+applied to the magnitude and angle before calling scm_make_polar.
 
-** Removed support shlibs for SRFIs 1, 4, 13, 14, and 60
+Previously, exactness specifiers were applied to the number as a whole
+_after_ calling scm_make_rectangular or scm_make_polar.
 
-Though these SRFI support libraries did expose API, they encoded a
-strange version string into their library names.  That version was never
-programmatically exported, so there was no way people could use the
-libs.
+For example, (string->number "#i5.0+0i") now does the equivalent of:
 
-This was a fortunate oversight, as it allows us to remove the need for
-extra, needless shared libraries --- the C support code for SRFIs 4, 13,
-and 14 was already in core --- and allow us to incrementally return the
-SRFI implementation to Scheme.
+  (make-rectangular (exact->inexact 5.0) (exact->inexact 0))
 
-** Simplifications to the set of low-level hooks exported by the VM
+which yields 5.0+0.0i.  Previously it did the equivalent of:
 
-See "VM Hooks" in the manual, for more information.
+  (exact->inexact (make-rectangular 5.0 0))
 
-** New traps system
+which yielded 5.0.
 
-See "Traps" in the manual, for more information.
+\f
+Changes in 1.9.15 (since the 1.9.14 prerelease):
 
-** Breakpoints, tracepoints and source stepping now available at the REPL
+** Formally deprecate omission of port to `format'
     
-See "Interactive Debugging" in the manual, for more information.
-
-The new REPL commands are: break, break-at-source, tracepoint, traps,
-delete, disable, enable, step, step-instruction, next, next-instruction,
-finish, and registers.
+It used to be that you could omit passing a port to `format', in some
+cases.  This still works, but has been formally deprecated.
+    
+** ECMAScript fixes
 
-** Remove obsolete debug-options
+Noah Lavine and Kan-Ru Chen noticed and fixed a number of embarrassing
+bugs in object creation, unicode literals in strings, empty function
+bodies, non-breaking whitespace, and numeric literals.
 
-Removed `breakpoints', `trace', `procnames', `indent', `frames',
-`maxdepth', and `debug' debug-options.
+** `(web ...)' changes
 
-** Remove obsolete print-options
+*** `parse-uri', `unparse-uri' now called `string->uri', `uri->string'
     
-The `source' and `closure-hook' print options are obsolete, and have
-been removed.
+*** `uri-decode' takes `#:encoding' keyword argument, not `#:charset'
 
-** Remove obsolete read-options
+*** HTTP header representation change
 
-The "elisp-strings" and "elisp-vectors" read options were unused and
-obsolete, so they have been removed.
+Guile properly garbage-collects symbols, so there's no need to read some
+headers as symbols and some as strings: all header names are symbols
+now.  The same goes for many key-value constructs in headers.  Guile
+parses the challenge/authentication headers now, as well.  Header decl
+objects are no longer exposed to the user.
 
-** Remove eval-options and trap-options
+*** Request and response bodies are always bytevectors
 
-Eval-options and trap-options are obsolete with the new VM and
-evaluator.
+Reading bodies as latin-1 strings was a cute hack, but not general, so
+Guile's only official fetch-me-the-body procedures return bytevectors
+now.
 
-** Remove (ice-9 debugger) and (ice-9 debugging)
+** New procedures: scm_{to,from}_{utf8,latin1}_symbol{n,}
+** New procedures: scm_{to,from}_{utf8,utf32,latin1}_symbol{n,}
+    
+These new procedures convert to and from string representations in
+particular encodings.
 
-See "Traps" and "Interactive Debugging" in the manual, for information
-on their replacements.
+Basically, continue to use locale encoding for user input, user output,
+or interacting with the C library.  Use latin1 for ASCII, and for
+literals in source code.  Use utf8 for interaction with modern libraries
+which deal in UTF-8.  Use utf32 for interaction with utf32-using
+libraries.  Otherwise use scm_to_stringn or scm_from_stringn with a
+specific encoding.
 
-** Remove the GDS Emacs integration
+Also, scm_from_latin1_symbol is quite a bit faster now.
 
-See "Using Guile in Emacs" in the manual, for info on how we think you
-should use Guile with Emacs.
+** Documentation updates
 
-** Remove vm-version, vm options
-    
-These procedures introduced during the 1.9 series had no effect.
+The GOOPS manual saw a lot of work, as well as documentation for the
+`(web ...)' modules.
 
-** Add `call-with-vm' and ability to set VM engine
+** Guile uses iconv directly for reading from and writing to ports.
 
-`call-with-vm' applies a procedure to arguments in a context in which a
-given VM is current.
+In addition to providing faster Unicode I/O (e.g., `display',
+`read-char'), this change improves error reporting.
 
-`set-vm-engine!' can be used to specify the engine for a VM, which will
-become current at the next `call-with-vm' invocation.
+For instance, the `encoding-error' exception conveys information about
+the port and character that could not be encoded.  Likewise, the new
+`decoding-error' exception conveys information about the port from which
+data failed to be decoded, and leaves the port in a known position.
 
-** Default to "regular" VM engine for noninteractive use
-    
-The "debug" engine is used when the user specifies --debug, or when
-running interactively. A debug VM allows hooks to run; see "VM Hooks" in
-the manual.
+** Source files default to UTF-8.
 
-** `backtrace' debug option on by default
+If source files do not specify their encoding via a `coding:' block,
+the default encoding is UTF-8, instead of being taken from the current
+locale.
 
-Given that Guile 2.0 can always give you a backtrace, backtraces are now
-on by default.
+** Man page updates
 
-** `turn-on-debugging' deprecated
+Thanks to Mark Harig for many suggestions regarding the manual page,
+which is getting better.
 
-** New compilation warning: `-Wformat'
+** Interactive Guile installs the current locale.
     
-The `-Wformat' warning can indicate a number of common format string
-errors.  See "Compilation" in the manual, for more information.
+Instead of leaving the user in the "C" locale, running the Guile REPL
+installs the current locale.  [FIXME xref?]
 
-** Add `(system repl server)' module and `--listen' command-line argument
+** `recv!', `recvfrom!', `send', `sendto' now deal in bytevectors
+
+These socket procedures now take bytevectors as arguments, instead of
+strings.  There is some deprecated string support, however.
+
+** New foreign API: `define-wrapped-pointer-type', `pointer?'
     
-The `(system repl server)' module exposes procedures to listen on
-sockets for connections, and serve REPLs to those clients.  The --listen
-command-line argument allows any Guile program to thus be remotely
-debuggable.
+See "Foreign Types", for more.
 
-See "Invoking Guile" for more information on `--listen'.
+** Changes and bugfixes in numerics code
+
+*** Added two new sets of fast quotient and remainder operators
+
+Added two new sets of fast quotient and remainder operator pairs with
+different semantics than the R5RS operators.  They support not only
+integers, but all reals, including exact rationals and inexact
+floating point numbers.
+
+These procedures accept two real numbers N and D, where the divisor D
+must be non-zero.  `euclidean-quotient' returns the integer Q and
+`euclidean-remainder' returns the real R such that N = Q*D + R and
+0 <= R < |D|.  `euclidean/' returns both Q and R, and is more
+efficient than computing each separately.  Note that when D > 0,
+`euclidean-quotient' returns floor(N/D), and when D < 0 it returns
+ceiling(N/D).
+
+`centered-quotient', `centered-remainder', and `centered/' are similar
+except that the range of remainders is -abs(D/2) <= R < abs(D/2), and
+`centered-quotient' rounds N/D to the nearest integer.
+
+Note that these operators are equivalent to the R6RS integer division
+operators `div', `mod', `div-and-mod', `div0', `mod0', and
+`div0-and-mod0'.
+
+*** Complex number changes
+
+Guile is now able to represent non-real complex numbers whose
+imaginary part is an _inexact_ zero (0.0 or -0.0), per R6RS.
+Previously, such numbers were immediately changed into inexact reals.
+
+(real? 0.0+0.0i) now returns #f, per R6RS, although (zero? 0.0+0.0i)
+still returns #t, per R6RS.  (= 0 0.0+0.0i) and (= 0.0 0.0+0.0i) are
+#t, but the same comparisons using `eqv?' or `equal?' are #f.
+
+Like other non-real numbers, these complex numbers with inexact zero
+imaginary part will raise exceptions is passed to procedures requiring
+reals, such as `<', `>', `<=', `>=', `min', `max', `positive?',
+`negative?', `inf?', `nan?', `finite?', etc.
+
+**** `make-rectangular' changes
+
+scm_make_rectangular `make-rectangular' now returns a real number only
+if the imaginary part is an _exact_ 0.  Previously, it would return a
+real number if the imaginary part was an inexact zero.
+
+scm_c_make_rectangular now always returns a non-real complex number,
+even if the imaginary part is zero.  Previously, it would return a
+real number if the imaginary part was zero.
+
+**** `make-polar' changes
+
+scm_make_polar `make-polar' now returns a real number only if the
+angle or magnitude is an _exact_ 0.  If the magnitude is an exact 0,
+it now returns an exact 0.  Previously, it would return a real
+number if the imaginary part was an inexact zero.
+
+scm_c_make_polar now always returns a non-real complex number, even if
+the imaginary part is 0.0.  Previously, it would return a real number
+if the imaginary part was 0.0.
+
+**** `imag-part' changes
+
+scm_imag_part `imag-part' now returns an exact 0 if applied to an
+inexact real number.  Previously it returned an inexact zero in this
+case.
+
+*** `eqv?' and `equal?' now compare numbers equivalently
+
+scm_equal_p `equal?' now behaves equivalently to scm_eqv_p `eqv?' for
+numeric values, per R5RS.  Previously, equal? worked differently,
+e.g. `(equal? 0.0 -0.0)' returned #t but `(eqv? 0.0 -0.0)' returned #f,
+and `(equal? +nan.0 +nan.0)' returned #f but `(eqv? +nan.0 +nan.0)'
+returned #t.
+
+*** `(equal? +nan.0 +nan.0)' now returns #t
+
+Previously, `(equal? +nan.0 +nan.0)' returned #f, although
+`(let ((x +nan.0)) (equal? x x))' and `(eqv? +nan.0 +nan.0)'
+both returned #t.  R5RS requires that `equal?' behave like
+`eqv?' when comparing numbers.
+
+*** Change in handling products `*' involving exact 0
+
+scm_product `*' now handles exact 0 differently.  A product containing
+an exact 0 now returns an exact 0 if and only if the other arguments
+are all exact.  An inexact zero is returned if and only if the other
+arguments are all finite but not all exact.  If an infinite or NaN
+value is present, a NaN value is returned.  Previously, any product
+containing an exact 0 yielded an exact 0, regardless of the other
+arguments.
+
+*** `expt' and `integer-expt' changes when the base is 0
+
+While `(expt 0 0)' is still 1, and `(expt 0 N)' for N > 0 is still
+zero, `(expt 0 N)' for N < 0 is now a NaN value, and likewise for
+integer-expt.  This is more correct, and conforming to R6RS, but seems
+to be incompatible with R5RS, which would return 0 for all non-zero
+values of N.
+
+*** `expt' and `integer-expt' are more generic, less strict
+
+When raising to an exact non-negative integer exponent, `expt' and
+`integer-expt' are now able to exponentiate any object that can be
+multiplied using `*'.  They can also raise an object to an exact
+negative integer power if its reciprocal can be taken using `/'.
+In order to allow this, the type of the first argument is no longer
+checked when raising to an exact integer power.  If the exponent is 0
+or 1, the first parameter is not manipulated at all, and need not
+even support multiplication.
+
+*** Infinities are no longer integers, nor rationals
+
+scm_integer_p `integer?' and scm_rational_p `rational?' now return #f
+for infinities, per R6RS.  Previously they returned #t for real
+infinities.  The real infinities and NaNs are still considered real by
+scm_real `real?' however, per R6RS.
+
+*** NaNs are no longer rationals
+
+scm_rational_p `rational?' now returns #f for NaN values, per R6RS.
+Previously it returned #t for real NaN values.  They are still
+considered real by scm_real `real?' however, per R6RS.
+
+*** `inf?' and `nan?' now throw exceptions for non-reals
+
+The domain of `inf?' and `nan?' is the real numbers.  Guile now signals
+an error when a non-real number or non-number is passed to these
+procedures.  (Note that NaNs _are_ considered numbers by scheme, despite
+their name).
+
+*** `rationalize' bugfixes and changes
+
+Fixed bugs in scm_rationalize `rationalize'.  Previously, it returned
+exact integers unmodified, although that was incorrect if the epsilon
+was at least 1 or inexact, e.g. (rationalize 4 1) should return 3 per
+R5RS and R6RS, but previously it returned 4.  It also now handles
+cases involving infinities and NaNs properly, per R6RS.
+
+*** Trigonometric functions now return exact numbers in some cases
+
+scm_sin `sin', scm_cos `cos', scm_tan `tan', scm_asin `asin', scm_acos
+`acos', scm_atan `atan', scm_sinh `sinh', scm_cosh `cosh', scm_tanh
+`tanh', scm_sys_asinh `asinh', scm_sys_acosh `acosh', and
+scm_sys_atanh `atanh' now return exact results in some cases.
+
+*** New procedure: `finite?'
+
+Add scm_finite_p `finite?' from R6RS to guile core, which returns #t
+if and only if its argument is neither infinite nor a NaN.  Note that
+this is not the same as (not (inf? x)) or (not (infinite? x)), since
+NaNs are neither finite nor infinite.
+
+*** R6RS base library changes
+
+**** `div', `mod', `div-and-mod', `div0', `mod0', `div0-and-mod0'
 
-** Big manual updates
+Efficient versions of these R6RS division operators are now supported.
+See the NEWS entry entitled `Added two new sets of fast quotient and
+remainder operators' for more information.
 
-The GOOPS documentation got a lot of attention this cycle, as well as
-the sections on interactive use and debugging.  We don't know of any
-sections of the manual that are out-of-date at this point.
+**** `infinite?' changes
+
+`infinite?' and `finite?' now throw exceptions for non-numbers.  (Note
+that NaNs _are_ considered numbers by scheme, despite their name).
+
+**** `real-valued?', `rational-valued?' and `integer-valued?' changes
+
+These predicates are now implemented in accordance with R6RS.
+
+** R6RS textual I/O procedures raise R6RS error conditions
+
+R6RS procedures `get-char', `put-string', etc. now raise the correct
+R6RS error coding, i.e., `&i/o-decoding-error' or `&i/o-encoding-error'.
+
+** New reader option: `hungry-eol-escapes'
+
+Guile's string syntax is more compatible with R6RS when the
+`hungry-eol-escapes' option is enabled.  See "String Syntax" in the
+manual, for more information.
 
 ** And of course, the usual collection of bugfixes
  
@@ -156,7 +354,13 @@ Changes in 1.9.x (since the 1.8.x series):
 * New modules (see the manual for details)
 
 ** `(srfi srfi-18)', more sophisticated multithreading support
+** `(srfi srfi-27)', sources of random bits
+** `(srfi srfi-38)', External Representation for Data With Shared Structure
+** `(srfi srfi-42)', eager comprehensions
+** `(srfi srfi-45)', primitives for expressing iterative lazy algorithms
+** `(srfi srfi-67)', compare procedures
 ** `(ice-9 i18n)', internationalization support
+** `(ice-9 futures)', fine-grain parallelism
 ** `(rnrs bytevectors)', the R6RS bytevector API
 ** `(rnrs io ports)', a subset of the R6RS I/O port API
 ** `(system xref)', a cross-referencing facility (FIXME undocumented)
@@ -165,6 +369,13 @@ Changes in 1.9.x (since the 1.8.x series):
 ** `(sxml match)', a pattern matcher for SXML
 ** `(srfi srfi-9 gnu)', extensions to the SRFI-9 record library
 ** `(system vm coverage)', a line-by-line code coverage library
+** `(web uri)', URI data type, parser, and unparser
+** `(web http)', HTTP header parsers and unparsers
+** `(web request)', HTTP request data type, reader, and writer
+** `(web response)', HTTP response data type, reader, and writer
+** `(web server)', Generic HTTP server
+** `(ice-9 poll)', a poll wrapper
+** `(web server http)', HTTP-over-TCP web server implementation
 
 ** Replaced `(ice-9 match)' with Alex Shinn's compatible, hygienic matcher.
     
@@ -221,6 +432,21 @@ help when running Guile inside Emacs. This option has been removed, and
 the helper functions `named-module-use!' and `load-emacs-interface' have
 been deprecated.
     
+** Add `(system repl server)' module and `--listen' command-line argument
+    
+The `(system repl server)' module exposes procedures to listen on
+sockets for connections, and serve REPLs to those clients.  The --listen
+command-line argument allows any Guile program to thus be remotely
+debuggable.
+
+See "Invoking Guile" for more information on `--listen'.
+
+** Command line additions
+
+The guile binary now supports a new switch "-x", which can be used to
+extend the list of filename extensions tried when loading files
+(%load-extensions).
+
 ** New reader options: `square-brackets' and `r6rs-hex-escapes'
 
 The reader supports a new option (changeable via `read-options'),
@@ -291,6 +517,11 @@ control this. See "Value History" in the manual, for more information.
 When readline is enabled, tab completion works for arguments too, not
 just for the operator position.
 
+** Expression-oriented readline history
+    
+Guile's readline history now tries to operate on expressions instead of
+input lines.  Let us know what you think!
+
 ** Interactive Guile follows GNU conventions
 
 As recommended by the GPL, Guile now shows a brief copyright and
@@ -378,12 +609,12 @@ newer than that of the .scm file; if the .scm or .go files are moved
 after installation, care should be taken to preserve their original
 timestamps.
 
-Autocompiled files will be stored in the $XDG_CACHE_HOME/guile/ccache
+Auto-compiled files will be stored in the $XDG_CACHE_HOME/guile/ccache
 directory, where $XDG_CACHE_HOME defaults to ~/.cache. This directory
 will be created if needed.
 
-To inhibit autocompilation, set the GUILE_AUTO_COMPILE environment
-variable to 0, or pass --no-autocompile on the Guile command line.
+To inhibit automatic compilation, set the GUILE_AUTO_COMPILE environment
+variable to 0, or pass --no-auto-compile on the Guile command line.
 
 ** New POSIX procedures: `getrlimit' and `setrlimit'
 
@@ -398,6 +629,20 @@ Scheme binding for the `getsid' C library call.
 
 Scheme binding for the `getaddrinfo' C library function.
 
+** Multicast socket options
+
+Support was added for the IP_MULTICAST_TTL and IP_MULTICAST_IF socket
+options.  See "Network Sockets and Communication" in the manual, for
+more information.
+
+** New GNU procedures: `setaffinity' and `getaffinity'.
+    
+See "Processes" in the manual, for more information.
+
+** New procedures: `compose', `negate', and `const'
+
+See "Higher-Order Functions" in the manual, for more information.
+
 ** New procedure in `(oops goops)': `method-formals'
 
 ** New procedures in (ice-9 session): `add-value-help-handler!',
@@ -444,7 +689,7 @@ Brainfuck language itself.
 
 Guile now has an experimental Emacs Lisp compiler and runtime. You can
 now switch to Elisp at the repl: `,language elisp'. All kudos to Daniel
-Kraft, and all bugs to bug-guile@gnu.org.
+Kraft and Brian Templeton, and all bugs to bug-guile@gnu.org.
 
 ** Better documentation infrastructure for macros
 
@@ -516,6 +761,11 @@ for more information.
 This procedure exports all current and future bindings from a module.
 Use as `(module-export-all! (current-module))'.
     
+** New procedure `reload-module', and `,reload' REPL command
+    
+See "Module System Reflection" and "Module Commands" in the manual, for
+more information.
+
 ** `eval-case' has been deprecated, and replaced by `eval-when'.
 
 The semantics of `eval-when' are easier to understand. See "Eval When"
@@ -1000,6 +1250,11 @@ There is a new `format' specifier, `~@y', for doing a truncated
 print (as opposed to `~y', which does a pretty-print). See the `format'
 documentation for more details.
 
+** Better pretty-printing
+
+Indentation recognizes more special forms, like `syntax-case', and read
+macros like `quote' are printed better.
+
 ** Passing a number as the destination of `format' is deprecated
 
 The `format' procedure in `(ice-9 format)' now emits a deprecation
@@ -1145,7 +1400,8 @@ procedure, with -Warity-mismatch, or `arity-mismatch' in the
 `#:warnings' as above.
 
 Other warnings include `-Wunused-variable' and `-Wunused-toplevel', to
-warn about unused local or global (top-level) variables.
+warn about unused local or global (top-level) variables, and `-Wformat',
+to check for various errors related to the `format' procedure.
 
 ** A new `memoize-symbol' evaluator trap has been added.
 
@@ -1373,6 +1629,43 @@ This module had some debugging helpers that are no longer applicable to
 the current debugging model. Importing this module will produce a
 deprecation warning. Users should contact bug-guile for support.
 
+** Remove obsolete debug-options
+
+Removed `breakpoints', `trace', `procnames', `indent', `frames',
+`maxdepth', and `debug' debug-options.
+
+** `backtrace' debug option on by default
+
+Given that Guile 2.0 can always give you a backtrace, backtraces are now
+on by default.
+
+** `turn-on-debugging' deprecated
+
+** Remove obsolete print-options
+    
+The `source' and `closure-hook' print options are obsolete, and have
+been removed.
+
+** Remove obsolete read-options
+
+The "elisp-strings" and "elisp-vectors" read options were unused and
+obsolete, so they have been removed.
+
+** Remove eval-options and trap-options
+
+Eval-options and trap-options are obsolete with the new VM and
+evaluator.
+
+** Remove (ice-9 debugger) and (ice-9 debugging)
+
+See "Traps" and "Interactive Debugging" in the manual, for information
+on their replacements.
+
+** Remove the GDS Emacs integration
+
+See "Using Guile in Emacs" in the manual, for info on how we think you
+should use Guile with Emacs.
+
 ** Deprecated: `lazy-catch'
 
 `lazy-catch' was a form that captured the stack at the point of a
@@ -1389,7 +1682,19 @@ and is no longer used.
 
 `apply-to-args', `has-suffix?', `scheme-file-suffix'
 `get-option', `for-next-option', `display-usage-report',
-`transform-usage-lambda', `collect', `set-batch-mode?!'
+`transform-usage-lambda', `collect', `set-batch-mode?!',
+
+`cuserid' has been deprecated, as it only returns 8 bytes of a user's
+login.  Use `(passwd:name (getpwuid (geteuid)))' instead.
+    
+** Add support for unbound fluids
+    
+See `make-unbound-fluid', `fluid-unset!', and `fluid-bound?' in the
+manual.
+
+** Add `variable-unset!'
+    
+See "Variables" in the manual, for more details.
 
 ** Last but not least, the `λ' macro can be used in lieu of `lambda'
 
@@ -1404,6 +1709,16 @@ backward-compatible way.  A new allocation routine,
 Libgc is a conservative GC, which we hope will make interaction with C
 code easier and less error-prone.
 
+** New procedures: `scm_to_latin1_stringn', `scm_from_latin1_stringn'
+
+Use these procedures when you know you have latin1-encoded or
+ASCII-encoded strings.
+
+** New procedures: `scm_to_stringn', `scm_from_stringn'
+
+Use these procedures if you want to encode or decode from a particular
+locale.
+
 ** New type definitions for `scm_t_intptr' and friends.
 
 `SCM_T_UINTPTR_MAX', `SCM_T_INTPTR_MIN', `SCM_T_INTPTR_MAX',
@@ -1519,6 +1834,18 @@ The upshot is that the mechanics used to apply a SMOB are different from
 `apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
 deprecated. Just use the scm_call_0 family of procedures.
 
+** Removed support shlibs for SRFIs 1, 4, 13, 14, and 60
+
+Though these SRFI support libraries did expose API, they encoded a
+strange version string into their library names.  That version was never
+programmatically exported, so there was no way people could use the
+libs.
+
+This was a fortunate oversight, as it allows us to remove the need for
+extra, needless shared libraries --- the C support code for SRFIs 4, 13,
+and 14 was already in core --- and allow us to incrementally return the
+SRFI implementation to Scheme.
+
 ** New C function: scm_module_public_interface
 
 This procedure corresponds to Scheme's `module-public-interface'.