update THANKS
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 2174286..6bebbf6 100644 (file)
--- a/NEWS
+++ b/NEWS
 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.
 
-\f
-(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 in 1.9.11 (since the 1.9.10 prerelease):
+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.
 
-** Renamed module: (rnrs bytevectors)
-    
-This module was called (rnrs bytevector), its name from earlier drafts
-of the R6RS. Its name has been changed. Users of previous 1.9 preleases
-may want to search for any stale rnrs/bytevector .go or .scm file, and
-delete them.
+Changes since the 1.9.15 prerelease:
 
-** New module: (sxml match)
-    
-Guile has incorporated Jim Bender's `sxml-match' library. See
-"sxml-match' in the manual for more information. Thanks, Jim!
+** Deprecated: primitive properties
 
-** New module: (srfi srfi-9 gnu)
+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.
 
-This module adds an extension to srfi-9, `set-record-type-printer!'. See
-"SRFI-9" in the manual for more information.
+** New syntax: define-once
 
-** Support for R6RS libraries
+`define-once' is like Lisp's `defvar': it creates a toplevel binding,
+but only if one does not exist already.
 
-The `library' and `import' forms from the latest Scheme report have been
-added to Guile, in such a way that R6RS libraries share a namespace with
-Guile modules. R6RS modules may import Guile modules, and are available
-for Guile modules to import via use-modules and all the rest. See "R6RS
-Libraries" in the manual for more information.
+** Added four new sets of fast quotient and remainder operators
 
-** Implementations of R6RS libraries
+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.
 
-Guile now has implementations for all of the libraries defined in the
-R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
-Standard Libraries" in the manual for a full list of libraries.
+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.
 
-** Partial R6RS compatibility
+`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.
 
-Guile now has enough support for R6RS to run a reasonably large subset
-of R6RS programs.
+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'.
 
-Guile is not fully R6RS compatible. Many incompatibilities are simply
-bugs, though some parts of Guile will remain R6RS-incompatible for the
-foreseeable future. See "R6RS Incompatibilities" in the manual, for more
-information.
+For `round-quotient', `round-remainder', and `round/', Q is rounded to
+the nearest integer, with ties going to the nearest even integer.
 
-Please contact bug-guile@gnu.org if you have found an issue not
-mentioned in that compatibility list.
-    
-** Macro expansion produces structures instead of s-expressions
+** Improved exactness handling for complex number parsing
 
-In the olden days, macroexpanding an s-expression would yield another
-s-expression. Though the lexical variables were renamed, expansions of
-core forms like `if' and `begin' were still non-hygienic, as they relied
-on the toplevel definitions of `if' et al being the conventional ones.
+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.
 
-The solution is to expand to structures instead of s-expressions. There
-is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
-etc. The expander already did this for compilation, producing Tree-IL
-directly; it has been changed now to do so when expanding for the
-evaluator as well.
+Previously, exactness specifiers were applied to the number as a whole
+_after_ calling scm_make_rectangular or scm_make_polar.
 
-The real truth is somewhat more involved: Tree-IL doesn't exist until
-modules have been booted, but we need the expander to boot modules, and
-additionally we need a boot expander before psyntax is loaded. So a
-subset of Tree-IL is defined in C, and the boot expander produces these
-"macroexpanded" structures. Psyntax has been modified to produce those
-structures as well. When Tree-IL loads, it incorporates those structures
-directly as part of its language.
+For example, (string->number "#i5.0+0i") now does the equivalent of:
 
-Finally, the evaluator has been adapted to accept these "expanded"
-structures, and enhanced to better support the gamut of this subset of
-Tree-IL, including `lambda*' and `case-lambda'. This was a much-needed
-harmonization between the compiler, expander, and evaluator.
+  (make-rectangular (exact->inexact 5.0) (exact->inexact 0))
 
-** Deprecated `scm_badargsp'
+which yields 5.0+0.0i.  Previously it did the equivalent of:
 
-This function is unused in Guile, but was part of its API.
+  (exact->inexact (make-rectangular 5.0 0))
 
-** `sxml->xml' enhancement
-    
-`sxml->xml' from `(sxml simple)' can now handle the result of
-`xml->sxml'. See bug #29260 for more information.
+which yielded 5.0.
 
-** New module: (system vm coverage)
+\f
+Changes in 1.9.15 (since the 1.9.14 prerelease):
 
-This new module can produce code coverage reports for compiled Scheme
-code on a line-by-line level. See "Code Coverage" in the manual for more
-information.
+** Formally deprecate omission of port to `format'
+    
+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
 
-** Faster VM hooks.
+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.
 
-The frame objects passed to VM hook procedures are now allocated on the
-stack instead of the heap, making the next-instruction hook practical to
-use.
+** `(web ...)' changes
 
-** Add `program-free-variables' to `(system vm program)'.
+*** `parse-uri', `unparse-uri' now called `string->uri', `uri->string'
     
-(revise docs?)
-
-** New `eval-when' situation: `expand'
-
-Sometimes it's important to cause side-effects while expanding an
-expression, even in eval mode. This situation is used in
-`define-module', `use-modules', et al, in order to affect the current
-module and its set of syntax expanders.
-
-** Better module-level hygiene
-
-Instead of attempting to track changes to the current module when
-expanding toplevel sequences, we instead preserve referential
-transparency relative to where the macro itself was defined. If the
-macro should expand to expressions in the context of the new module, it
-should wrap those expressions in `@@', which has been enhanced to accept
-generic expressions, not just identifier references. For example, part
-of the definition of the R6RS `library' form:
-
-  #'(begin
-      (define-module (name name* ...) #:pure #:version (version ...))
-      (import ispec) ...
-      (re-export r ...) (export e ...)
-      (@@ (name name* ...) body)
-      ...)
+*** `uri-decode' takes `#:encoding' keyword argument, not `#:charset'
 
-In this example the `import' refers to the `import' definition in the
-module where the `library' macro is defined, not in the new module.
+*** HTTP header representation change
 
-** Module system macros rewritten as hygienic macros
+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.
 
-`define-module', `use-modules', `export', and other such macros have
-been rewritten as hygienic macros. This allows the necessary referential
-transparency for the R6RS `library' for to do the right thing.
-    
-** Compiler and VM documentation updated
+*** Request and response bodies are always bytevectors
 
-The documentation for the compiler and VM had slipped out of date; it
-has been brought back... to the future!
+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.
 
-** Tree-IL field renaming: `vars' -> `gensyms'
+** New procedures: scm_{to,from}_{utf8,latin1}_symbol{n,}
+** New procedures: scm_{to,from}_{utf8,utf32,latin1}_symbol{n,}
     
-The `vars' fields of <let>, <letrec>, <fix>, and <lambda-case> has been
-renamed to `gensyms', for clarity, and to match <lexical-ref>.
+These new procedures convert to and from string representations in
+particular encodings.
+
+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.
+
+Also, scm_from_latin1_symbol is quite a bit faster now.
+
+** Documentation updates
+
+The GOOPS manual saw a lot of work, as well as documentation for the
+`(web ...)' modules.
 
-** Removed `version' field from <language>
+** Guile uses iconv directly for reading from and writing to ports.
+
+In addition to providing faster Unicode I/O (e.g., `display',
+`read-char'), this change improves error reporting.
+
+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.
+
+** Source files default to UTF-8.
+
+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.
+
+** Man page updates
+
+Thanks to Mark Harig for many suggestions regarding the manual page,
+which is getting better.
+
+** Interactive Guile installs the current locale.
     
-Language versions weren't being updated or used in any worthwhile way;
-they have been removed, for now at least.
+Instead of leaving the user in the "C" locale, running the Guile REPL
+installs the current locale.  [FIXME xref?]
 
-** New procedure: `module-export-all!'
+** `recv!', `recvfrom!', `send', `sendto' now deal in bytevectors
 
-This procedure exports all current and future bindings from a module.
-Use as `(module-export-all! (current-module))'.
+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?'
     
-** Updates to manual
+See "Foreign Types", for more.
 
-The introductory sections of the manual have been reorganized
-significantly, making it more accessible to new users of Guile. Check it
-out!
+** Changes and bugfixes in numerics code
 
-** The module namespace is now separate from the value namespace
+*** Added two new sets of fast quotient and remainder operators
 
-It was a little-known implementation detail of Guile's module system
-that it was built on a single hierarchical namespace of values -- that
-if there was a module named `(foo bar)', then there was a also module
-named `(foo)' with a binding from `bar' to the `(foo bar)' module.
+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.
 
-This was a neat trick, but presented a number of problems. One problem
-was that the bindings in a module were not apparent from the module
-itself; perhaps the `(foo)' module had a private binding for `bar', and
-then an external contributor defined `(foo bar)'. In the end there can
-be only one binding, so one of the two will see the wrong thing, and
-produce an obtuse error of unclear provenance.
+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).
 
-Also, the public interface of a module was also bound in the value
-namespace, as `%module-public-interface'. This was a hack from the early
-days of Guile's modules.
+`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.
 
-Both of these warts have been fixed by the addition of fields in the
-`module' data type. Access to modules and their interfaces from the
-value namespace has been deprecated, and all accessors use the new
-record accessors appropriately.
+Note that these operators are equivalent to the R6RS integer division
+operators `div', `mod', `div-and-mod', `div0', `mod0', and
+`div0-and-mod0'.
 
-When Guile is built with support for deprecated code, as is the default,
-the value namespace is still searched for modules and public interfaces,
-and a deprecation warning is raised as appropriate.
+*** Complex number changes
 
-Finally, to support lazy loading of modules as one used to be able to do
-with module binder procedures, Guile now has submodule binders, called
-if a given submodule is not found. See boot-9.scm for more information.
-    
-** New procedures: module-ref-submodule, module-define-submodule,
-   nested-ref-module, nested-define-module!, local-ref-module,
-   local-define-module
+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.
 
-These new accessors are like their bare variants, but operate on
-namespaces instead of values.
+(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.
 
-** The (app modules) module tree is officially deprecated
+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.
 
-It used to be that one could access a module named `(foo bar)' via
-`(nested-ref the-root-module '(app modules foo bar))'. The `(app
-modules)' bit was a never-used and never-documented abstraction, and has
-been deprecated. See the following mail for a full discussion:
+**** `make-rectangular' changes
 
-    http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
+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.
 
-The `%app' binding is also deprecated.
+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.
 
-** Deprecated `@bind' syntax
+**** `make-polar' changes
 
-`@bind' was part of an older implementation of the Emacs Lisp language,
-and is no longer used.
-    
-** New fluid: `%file-port-name-canonicalization'
-    
-This fluid parameterizes the file names that are associated with file
-ports. If %file-port-name-canonicalization is 'absolute, then file names
-are canonicalized to be absolute paths. If it is 'relative, then the
-name is canonicalized, but any prefix corresponding to a member of
-`%load-path' is stripped off. Otherwise the names are passed through
-unchanged.
+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.
 
-** Source file name canonicalization in `compile-file', `compile-and-load'
-    
-These file-compiling procedures now bind
-%file-port-name-canonicalization to their `#:canonicalization' keyword
-argument, which defaults to 'relative. In this way, one might compile
-"../module/ice-9/boot-9.scm", but the path that gets residualized into
-the .go is "ice-9/boot-9.scm".
+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.
 
-** Deprecate arity access via (procedure-properties proc 'arity)
+**** `imag-part' changes
 
-Instead of accessing a procedure's arity as a property, use the new
-`procedure-minimum-arity' function, which gives the most permissive
-arity that the the function has, in the same format as the old arity
-accessor.
+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.
 
-** Remove redundant accessors: program-name, program-documentation,
-   program-properties, program-property
-    
-Instead, just use procedure-name, procedure-documentation,
-procedure-properties, and procedure-property.
+*** `eqv?' and `equal?' now compare numbers equivalently
 
-** Enhance documentation for support of Emacs Lisp's `nil'
+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.
 
-See "Nil" in the manual, for more details.
-    
-** Enhance documentation for support of other languages
+*** `(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'
+
+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.
+
+**** `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
 
-See "Other Languages" in the manual, for more details.
+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
  
@@ -267,12 +354,38 @@ 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)
 ** `(ice-9 vlist)', lists with constant-time random access; hash lists
 ** `(system foreign)', foreign function interface
+** `(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.
+    
+Guile's copy of Andrew K. Wright's `match' library has been replaced by
+a compatible hygienic implementation by Alex Shinn.  It is now
+documented, see "Pattern Matching" in the manual.
+
+Compared to Andrew K. Wright's `match', the new `match' lacks
+`match-define', `match:error-control', `match:set-error-control',
+`match:error', `match:set-error', and all structure-related procedures.
 
 ** Imported statprof, SSAX, and texinfo modules from Guile-Lib
     
@@ -309,9 +422,30 @@ GUILE_SYSTEM_PATH.
 
 ** New read-eval-print loop (REPL) implementation
 
-Running Guile with no arguments drops the user into the new REPL. While
-it is self-documenting to an extent, the new REPL has not yet been
-documented in the manual. This will be fixed before 2.0.
+Running Guile with no arguments drops the user into the new REPL.  See
+"Using Guile Interactively" in the manual, for more information.
+
+** Remove old Emacs interface
+
+Guile had an unused `--emacs' command line argument that was supposed to
+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'
 
@@ -320,7 +454,9 @@ The reader supports a new option (changeable via `read-options'),
 parentheses.  This option is on by default.
 
 When the new `r6rs-hex-escapes' reader option is enabled, the reader
-will recognize string escape sequences as defined in R6RS.
+will recognize string escape sequences as defined in R6RS.  R6RS string
+escape sequences are incompatible with Guile's existing escapes, though,
+so this option is off by default.
 
 ** Function profiling and tracing at the REPL
     
@@ -331,12 +467,20 @@ time. See `,help profile' for more information.
 Similarly, `,trace FORM' traces all function applications that occur
 during the execution of `FORM'. See `,help trace' for more information.
 
-** New debugger
+** Recursive debugging REPL on error
+
+When Guile sees an error at the REPL, instead of saving the stack, Guile
+will directly enter a recursive REPL in the dynamic context of the
+error. See "Error Handling" in the manual, for more information.
+
+A recursive REPL is the same as any other REPL, except that it
+has been augmented with debugging information, so that one can inspect
+the context of the error. The debugger has been integrated with the REPL
+via a set of debugging meta-commands.
 
-By default, if an exception is raised at the REPL and not caught by user
-code, Guile will drop the user into a debugger. The user may request a
-backtrace, inspect frames, or continue raising the exception. Full
-documentation is available from within the debugger.
+For example, one may access a backtrace with `,backtrace' (or
+`,bt'). See "Interactive Debugging" in the manual, for more
+information.
 
 ** New `guile-tools' commands: `compile', `disassemble'
 
@@ -362,6 +506,22 @@ allows Guile's copy of SSAX to override any Guile-Lib copy the user has
 installed. Also it should cut the number of `stat' system calls by half,
 in the common case.
 
+** Value history in the REPL on by default
+
+By default, the REPL will save computed values in variables like `$1',
+`$2', and the like. There are programmatic and interactive interfaces to
+control this. See "Value History" in the manual, for more information.
+
+** Readline tab completion for arguments
+
+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
@@ -369,6 +529,33 @@ warranty disclaimer on startup, along with pointers to more information.
 
 * Changes to Scheme functions and syntax
 
+** Support for R6RS libraries
+
+The `library' and `import' forms from the latest Scheme report have been
+added to Guile, in such a way that R6RS libraries share a namespace with
+Guile modules. R6RS modules may import Guile modules, and are available
+for Guile modules to import via use-modules and all the rest. See "R6RS
+Libraries" in the manual for more information.
+
+** Implementations of R6RS libraries
+
+Guile now has implementations for all of the libraries defined in the
+R6RS. Thanks to Julian Graham for this excellent hack. See "R6RS
+Standard Libraries" in the manual for a full list of libraries.
+
+** Partial R6RS compatibility
+
+Guile now has enough support for R6RS to run a reasonably large subset
+of R6RS programs.
+
+Guile is not fully R6RS compatible. Many incompatibilities are simply
+bugs, though some parts of Guile will remain R6RS-incompatible for the
+foreseeable future. See "R6RS Incompatibilities" in the manual, for more
+information.
+
+Please contact bug-guile@gnu.org if you have found an issue not
+mentioned in that compatibility list.
+    
 ** New implementation of `primitive-eval'
 
 Guile's `primitive-eval' is now implemented in Scheme. Actually there is
@@ -417,17 +604,17 @@ If a compiled .go file corresponding to a .scm file is not found or is
 not fresh, the .scm file will be compiled on the fly, and the resulting
 .go file stored away. An advisory note will be printed on the console.
 
-Note that this mechanism depends on preservation of the .scm and .go
-modification times; if the .scm or .go files are moved after
-installation, care should be taken to preserve their original
+Note that this mechanism depends on the timestamp of the .go file being
+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'
 
@@ -442,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!',
@@ -488,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
 
@@ -542,12 +743,11 @@ like this works now:
 It used to be you had to export `helper' from `(foo)' as well.
 Thankfully, this has been fixed.
 
-** Complete support for version information in Guile's `module' form
+** Support for version information in Guile's `module' form
     
-Guile modules now have a `#:version' field. They may be loaded by
-version as well. See "R6RS Version References", "General Information
-about Modules", "Using Guile Modules", and "Creating Guile Modules" in
-the manual for more information.
+Guile modules now have a `#:version' field.  See "R6RS Version
+References", "General Information about Modules", "Using Guile Modules",
+and "Creating Guile Modules" in the manual for more information.
 
 ** Support for renaming bindings on module export
     
@@ -556,6 +756,16 @@ export, it now also accepts a pair of symbols, indicating that a binding
 should be renamed on export. See "Creating Guile Modules" in the manual
 for more information.
 
+** New procedure: `module-export-all!'
+
+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"
@@ -579,6 +789,44 @@ feedback about this change (a consequence of using psyntax as the
 default expander), and may choose to revisit this situation before 2.0
 in response to user feedback.
 
+** Support for `letrec*'
+
+Guile now supports `letrec*', a recursive lexical binding operator in
+which the identifiers are bound in order. See "Local Bindings" in the
+manual, for more details.
+
+** Internal definitions now expand to `letrec*'
+
+Following the R6RS, internal definitions now expand to letrec* instead
+of letrec. The following program is invalid for R5RS, but valid for
+R6RS:
+
+    (define (foo)
+      (define bar 10)
+      (define baz (+ bar 20))
+      baz)
+
+    ;; R5RS and Guile <= 1.8:
+    (foo) => Unbound variable: bar
+    ;; R6RS and Guile >= 2.0:
+    (foo) => 30
+
+This change should not affect correct R5RS programs, or programs written
+in earlier Guile dialects.
+
+** Macro expansion produces structures instead of s-expressions
+
+In the olden days, macroexpanding an s-expression would yield another
+s-expression. Though the lexical variables were renamed, expansions of
+core forms like `if' and `begin' were still non-hygienic, as they relied
+on the toplevel definitions of `if' et al being the conventional ones.
+
+The solution is to expand to structures instead of s-expressions. There
+is an `if' structure, a `begin' structure, a `toplevel-ref' structure,
+etc. The expander already did this for compilation, producing Tree-IL
+directly; it has been changed now to do so when expanding for the
+evaluator as well.
+
 ** Defmacros must now produce valid Scheme expressions.
 
 It used to be that defmacros could unquote in Scheme values, as a way of
@@ -615,6 +863,18 @@ However its intent is fairly clear. Guile interprets "bar" to be the
 docstring of `foo', and the definition of `baz' is still in definition
 context.
 
+** Support for settable identifier syntax
+
+Following the R6RS, "variable transformers" are settable
+identifier-syntax. See "Identifier macros" in the manual, for more
+information.
+    
+** syntax-case treats `_' as a placeholder
+    
+Following R6RS, a `_' in a syntax-rules or syntax-case pattern matches
+anything, and binds no pattern variables. Unlike the R6RS, Guile also
+permits `_' to be in the literals list for a pattern.
+
 ** Macros need to be defined before their first use.
 
 It used to be that with lazy memoization, this might work:
@@ -709,6 +969,10 @@ different from backtraces in interpreted code. There are no semantic
 differences, however. Please mail bug-guile@gnu.org if you see any
 deficiencies with Guile's backtraces.
 
+** New macro: `current-source-location'
+
+The macro returns the current source location (to be documented).
+
 ** syntax-rules and syntax-case macros now propagate source information
    through to the expanded code
 
@@ -738,6 +1002,67 @@ because of hygiene and macros, all modules have names. If a module was
 created without a name, the first time `module-name' is called on it, a
 fresh name will be lazily generated for it.
 
+** The module namespace is now separate from the value namespace
+
+It was a little-known implementation detail of Guile's module system
+that it was built on a single hierarchical namespace of values -- that
+if there was a module named `(foo bar)', then in the module named
+`(foo)' there was a binding from `bar' to the `(foo bar)' module.
+
+This was a neat trick, but presented a number of problems. One problem
+was that the bindings in a module were not apparent from the module
+itself; perhaps the `(foo)' module had a private binding for `bar', and
+then an external contributor defined `(foo bar)'. In the end there can
+be only one binding, so one of the two will see the wrong thing, and
+produce an obtuse error of unclear provenance.
+
+Also, the public interface of a module was also bound in the value
+namespace, as `%module-public-interface'. This was a hack from the early
+days of Guile's modules.
+
+Both of these warts have been fixed by the addition of fields in the
+`module' data type. Access to modules and their interfaces from the
+value namespace has been deprecated, and all accessors use the new
+record accessors appropriately.
+
+When Guile is built with support for deprecated code, as is the default,
+the value namespace is still searched for modules and public interfaces,
+and a deprecation warning is raised as appropriate.
+
+Finally, to support lazy loading of modules as one used to be able to do
+with module binder procedures, Guile now has submodule binders, called
+if a given submodule is not found. See boot-9.scm for more information.
+    
+** New procedures: module-ref-submodule, module-define-submodule,
+   nested-ref-module, nested-define-module!, local-ref-module,
+   local-define-module
+
+These new accessors are like their bare variants, but operate on
+namespaces instead of values.
+
+** The (app modules) module tree is officially deprecated
+
+It used to be that one could access a module named `(foo bar)' via
+`(nested-ref the-root-module '(app modules foo bar))'. The `(app
+modules)' bit was a never-used and never-documented abstraction, and has
+been deprecated. See the following mail for a full discussion:
+
+    http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00168.html
+
+The `%app' binding is also deprecated.
+
+** `module-filename' field and accessor
+
+Modules now record the file in which they are defined. This field may be
+accessed with the new `module-filename' procedure.
+
+** Modules load within a known environment
+
+It takes a few procedure calls to define a module, and those procedure
+calls need to be in scope. Now we ensure that the current module when
+loading a module is one that has the needed bindings, instead of relying
+on chance.
+
 ** Many syntax errors have different texts now
 
 Syntax errors still throw to the `syntax-error' key, but the arguments
@@ -865,10 +1190,11 @@ But this does not:
     (bind-x 10 (ref x)))
 
 It is not normal to run into this situation with existing code. However,
-as code is ported over from defmacros to syntax-case, it is possible to
-run into situations like this. In the future, Guile will probably port
-its `while' macro to syntax-case, which makes this issue one to know
-about.
+if you have defmacros that expand to hygienic macros, it is possible to
+run into situations like this. For example, if you have a defmacro that
+generates a `while' expression, the `break' bound by the `while' may not
+be visible within other parts of your defmacro. The solution is to port
+from defmacros to syntax-rules or syntax-case.
 
 ** Macros may no longer be referenced as first-class values.
 
@@ -899,6 +1225,13 @@ arities of compiled procedures may be accessed via procedures from the
 `(system vm program)' module; see "Compiled Procedures", "Optional
 Arguments", and "Case-lambda" in the manual. 
 
+** Deprecate arity access via (procedure-properties proc 'arity)
+
+Instead of accessing a procedure's arity as a property, use the new
+`procedure-minimum-arity' function, which gives the most permissive
+arity that the the function has, in the same format as the old arity
+accessor.
+
 ** `lambda*' and `define*' are now available in the default environment
 
 As with `case-lambda', `(ice-9 optargs)' continues to be supported, for
@@ -917,6 +1250,16 @@ 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
+warning if a number is passed as its first argument.
+
 ** SRFI-4 vectors reimplemented in terms of R6RS bytevectors
 
 Guile now implements SRFI-4 vectors using bytevectors. Often when you
@@ -966,6 +1309,11 @@ the load path. It can be used to compile other files into a file.
 documentation for more information. Thanks to Andre van Tonder for the
 implementation.
 
+** `*unspecified*' is identifier syntax
+    
+`*unspecified*' is no longer a variable, so it is optimized properly by
+the compiler, and is not `set!'-able.
+
 ** Unicode characters
 
 Unicode characters may be entered in octal format via e.g. `#\454', or
@@ -997,7 +1345,8 @@ declaration. See the section of the manual entitled, "Character Encoding
 of Source Files".
 
 The pre-1.9.3 reader handled 8-bit clean but otherwise unspecified source
-code.  This use is now discouraged.
+code.  This use is now discouraged.  Binary input and output is
+currently supported by opening ports in the ISO-8859-1 locale.
 
 ** Support for locale transcoding when reading from and writing to ports
 
@@ -1043,14 +1392,16 @@ and was unmaintained.
 Guile can warn about potentially unbound free variables. Pass the
 -Wunbound-variable on the `guile-tools compile' command line, or add
 `#:warnings '(unbound-variable)' to your `compile' or `compile-file'
-invocation.
+invocation. Warnings are also enabled by default for expressions entered
+at the REPL.
 
 Guile can also warn when you pass the wrong number of arguments to a
 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.
 
@@ -1065,6 +1416,13 @@ This slightly improves program startup times.
 
 See `cancel-thread', `set-thread-cleanup!', and `thread-cleanup'.
 
+** New threads are in `(guile-user)' by default, not `(guile)'
+
+It used to be that a new thread entering Guile would do so in the
+`(guile)' module, unless this was the first time Guile was initialized,
+in which case it was `(guile-user)'. This has been fixed to have all
+new threads unknown to Guile default to `(guile-user)'.
+
 ** GOOPS dispatch in scheme
 
 As an implementation detail, GOOPS dispatch is no longer implemented by
@@ -1115,6 +1473,22 @@ Guile now use a portable implementation of `inet_pton'/`inet_ntop', so
 there is no more need to use `inet-aton'/`inet-ntoa'. The latter
 functions are deprecated.
 
+** New primitive: `tmpfile'.
+    
+See "File System" in the manual.
+
+** Random generator state may be serialized to a datum
+
+`random-state->datum' will serialize a random state to a datum, which
+may be written out, read back in later, and revivified using
+`datum->random-state'.  See "Random" in the manual, for more details.
+
+** Fix random number generator on 64-bit platforms
+    
+There was a nasty bug on 64-bit platforms in which asking for a random
+integer with a range between 2**32 and 2**64 caused a segfault. After
+many embarrassing iterations, this was fixed.
+
 ** Fast bit operations.
 
 The bit-twiddling operations `ash', `logand', `logior', and `logxor' now
@@ -1146,16 +1520,25 @@ test for the `guile-2' cond-expand feature. Like this:
                            ;; separate compilation phase.
                            (fluid-set! current-reader my-reader)))
 
-** Fix bad interaction between `false-if-exception' and stack-call.
-
-Exceptions thrown by `false-if-exception' were erronously causing the
-stack to be saved, causing later errors to show the incorrectly-saved
-backtrace. This has been fixed.
-
 ** New global variables: %load-compiled-path, %load-compiled-extensions
 
 These are analogous to %load-path and %load-extensions.
 
+** New fluid: `%file-port-name-canonicalization'
+    
+This fluid parameterizes the file names that are associated with file
+ports. If %file-port-name-canonicalization is 'absolute, then file names
+are canonicalized to be absolute paths. If it is 'relative, then the
+name is canonicalized, but any prefix corresponding to a member of
+`%load-path' is stripped off. Otherwise the names are passed through
+unchanged.
+
+In addition, the `compile-file' and `compile-and-load' procedures bind
+%file-port-name-canonicalization to their `#:canonicalization' keyword
+argument, which defaults to 'relative. In this way, one might compile
+"../module/ice-9/boot-9.scm", but the path that gets residualized into
+the .go is "ice-9/boot-9.scm".
+
 ** New procedure, `make-promise'
 
 `(make-promise (lambda () foo))' is equivalent to `(delay foo)'.
@@ -1189,6 +1572,100 @@ History library functions.
 Instead, use make-typed-array, list->typed-array, or array-type,
 respectively.
 
+** Deprecate the old `scm-style-repl'
+
+The following bindings from boot-9 are now found in `(ice-9
+scm-style-repl)': `scm-style-repl', `error-catching-loop',
+`error-catching-repl', `bad-throw', `scm-repl-silent'
+`assert-repl-silence', `repl-print-unspecified',
+`assert-repl-print-unspecified', `scm-repl-verbose',
+`assert-repl-verbosity', `scm-repl-prompt', `set-repl-prompt!', `repl',
+`default-pre-unwind-handler', `handle-system-error',
+
+The following bindings have been deprecated, with no replacement:
+`pre-unwind-handler-dispatch'.
+
+The following bindings have been totally removed:
+`before-signal-stack'.
+
+Deprecated forwarding shims have been installed so that users that
+expect these bindings in the main namespace will still work, but receive
+a deprecation warning.
+
+** `set-batch-mode?!' replaced by `ensure-batch-mode!'
+
+"Batch mode" is a flag used to tell a program that it is not running
+interactively. One usually turns it on after a fork. It may not be
+turned off. `ensure-batch-mode!' deprecates the old `set-batch-mode?!',
+because it is a better interface, as it can only turn on batch mode, not
+turn it off.
+
+** Deprecate `save-stack', `the-last-stack'
+
+It used to be that the way to debug programs in Guile was to capture the
+stack at the time of error, drop back to the REPL, then debug that
+stack. But this approach didn't compose, was tricky to get right in the
+presence of threads, and was not very powerful.
+
+So `save-stack', `stack-saved?', and `the-last-stack' have been moved to
+`(ice-9 save-stack)', with deprecated bindings left in the root module.
+
+** `top-repl' has its own module
+    
+The `top-repl' binding, called with Guile is run interactively, is now
+is its own module, `(ice-9 top-repl)'. A deprecated forwarding shim was
+left in the default environment.
+
+** `display-error' takes a frame
+
+The `display-error' / `scm_display_error' helper now takes a frame as an
+argument instead of a stack. Stacks are still supported in deprecated
+builds. Additionally, `display-error' will again source location
+information for the error.
+
+** No more `(ice-9 debug)'
+    
+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
@@ -1196,6 +1673,29 @@ respectively.
 crazy. Please change to use `catch', possibly with a throw-handler, or
 `with-throw-handler'.
 
+** Deprecated `@bind' syntax
+
+`@bind' was part of an older implementation of the Emacs Lisp language,
+and is no longer used.
+    
+** Miscellaneous other deprecations
+
+`apply-to-args', `has-suffix?', `scheme-file-suffix'
+`get-option', `for-next-option', `display-usage-report',
+`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'
 
 * Changes to the C interface
@@ -1209,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',
@@ -1324,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'.
@@ -1378,6 +1900,10 @@ procedure, then return a specialized "call" procedure. However this
 optimization wasn't actually an optimization, so it is now deprecated.
 Just use `scm_call_0', etc instead.
 
+** Deprecated `scm_badargsp'
+
+This function is unused in Guile, but was part of its API.
+
 ** Better support for Lisp `nil'.
 
 The bit representation of `nil' has been tweaked so that it is now very
@@ -1426,6 +1952,11 @@ In other words the GNU Lesser General Public License, version 3 or
 later (at the discretion of each person that chooses to redistribute
 part of Guile).
 
+** AM_SILENT_RULES
+
+Guile's build is visually quieter, due to the use of Automake 1.11's
+AM_SILENT_RULES. Build as `make V=1' to see all of the output.
+    
 ** GOOPS documentation folded into Guile reference manual
 
 GOOPS, Guile's object system, used to be documented in separate manuals.
@@ -1464,9 +1995,18 @@ environments.
 Before, Guile only searched the system library paths for extensions
 (e.g. /usr/lib), which meant that the names of Guile extensions had to
 be globally unique. Installing them to a Guile-specific extensions
-directory is cleaner. Use `pkg-config --variable=extensionsdir
+directory is cleaner. Use `pkg-config --variable=extensiondir
 guile-2.0' to get the location of the extensions directory.
 
+** User Scheme code may be placed in a version-specific path
+
+Before, there was only one way to install user Scheme code to a
+version-specific Guile directory: install to Guile's own path,
+e.g. /usr/share/guile/2.0. The site directory,
+e.g. /usr/share/guile/site, was unversioned. This has been changed to
+add a version-specific site directory, e.g. /usr/share/guile/site/2.0,
+searched before the global site directory.
+
 ** New dependency: libgc
 
 See http://www.hpl.hp.com/personal/Hans_Boehm/gc/, for more information.