Assorted `syntax-check' fixes.
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 98fd487..55c5186 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -4,174 +4,342 @@ 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.
+
+
+Changes in 1.9.12 (since the 1.9.11 prerelease):
 
-** New module: (sxml match)
+** Many R6RS bugfixes
+
+`(rnrs bytevectors)' and `(rnrs io ports)' now have version information,
+like the rest of the modules. The `(rnrs unicode)' module is now
+re-exported by `(rnrs)'. Top-level `import' forms may have more than one
+clause. Warnings about duplicate bindings have been fixed, along with
+some typos in the modules. There were a number of other bugfixes as well.
     
-Guile has incorporated Jim Bender's `sxml-match' library. See
-"sxml-match' in the manual for more information. Thanks, Jim!
+For the current list of known R6RS incompatibilities, see "R6RS
+Incompatibilities" in the manual.
 
-** New module: (srfi srfi-9 gnu)
+** Documentation for standard R6RS libraries
 
-This module adds an extension to srfi-9, `set-record-type-printer!'. See
-... in the manual for more information.
+See "R6RS Standard Libraries" in the manual, for more details.
 
-** Support for R6RS libraries
+** Support for `letrec*'
 
-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.
+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.
 
-** Implementations of R6RS libraries
+** Internal definitions now expand to `letrec*'
 
-Guile now has implementations for all of the libraries defined in the
-R6RS. Thanks to Julian Graham for this excellent hack. See ... in the
-manual for a full list of libraries.
+Following the R6RS, internal definitions now expand to letrec* instead
+of letrec. The following program is invalid for R5RS, but valid for
+R6RS:
 
-** Partial R6RS compatibility
+    (define (foo)
+      (define bar 10)
+      (define baz (+ bar 20))
+      baz)
 
-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 ... in the
-manual Please contact bug-guile@gnu.org if you have found an issue not
-mentioned in that compatibility list.
+    ;; 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.
+
+** Recursive debugging REPL on error
+
+When Guile sees an error, instead of dropping into a special debugging
+prompt, it will 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.
+
+For example, one may access a backtrace with `,backtrace' (or
+`,bt'). See "Interactive Debugging" 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.
+
+** Various REPL robustness fixes
+
+The REPL no longer enters the debugger when an error occurs at read-time
+and compile-time, or when executing meta-commands. Additionally, the
+REPL is more strict about the ports that it uses, saving the current
+input and output ports at startup and using those ports when entering
+recursive prompts. This allows debugging of an error within
+e.g. `call-with-input-port'.
+
+Finally, Ctrl-d can now be used to exit a recursive REPL, dropping the
+user back to the parent REPL.
+
+** Better procedure name and source location propagation
+
+There was a bug in 1.9.11 which would leave most procedures un-named;
+this and other previous deficiencies have been fixed.
+
+** New macro: `current-source-location'
+
+See FIXME in the manual, for more information.
 
-FIXME: put this list in the manual:
- (rnrs)
- (rnrs arithmetic bitwise)
- (rnrs arithmetic flonums)
- (rnrs control)
- (rnrs enums)
- (rnrs eval)
- (rnrs files)
- (rnrs hashtables)
- (rnrs lists)
- (rnrs mutable-pairs)
- (rnrs mutable-strings)
- (rnrs programs)
- (rnrs r5rs)
- (rnrs record syntactic)
- (rnrs records inspection)
- (rnrs records procedural)
- (rnrs sorting)
- (rnrs unicode)
+** 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.
+
+** call-with-error-handling / with-error-handling
+
+FIXME: document?
+
+** 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.
     
-** Macro expansion produces structures instead of s-expressions
+** Miscellaneous other deprecations
 
-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.
+`apply-to-args', `has-suffix?', `scheme-file-suffix'
+`get-option', `for-next-option', `display-usage-report',
+`transform-usage-lambda', `collect', `set-batch-mode?!'
 
-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.
+** All core defmacros reimplemented hygienically
 
-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.
+All macros present in the default environment are now implemented with
+syntax-case. This should not have practical ramifications, beyond those
+listed below in "Lexical bindings introduced by hygienic macros may not
+be referenced by nonhygienic macros".
 
-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.
+** Random generator state may be serialized to a datum
 
-** Deprecated `scm_badargsp'
+`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.
 
-This function is unused in Guile, but was part of its API.
+** New primitive: `tmpfile'.
+    
+See "File System" in the manual.
+
+** 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.
+
+** Remove encoding of versions into the file system
+
+It used to be that, when loading a module, if the user specified a
+version, Guile would grovel about in the file system to find the
+module. This process was slow and not robust. This support has been
+removed:  modules are once more always loaded via `primitive-load-path'.
 
-** `sxml->xml' enhancement
+Module versions in the file system may be added again in the future, in
+an extensible way. Contact bug-guile@gnu.org with patches.
     
-`sxml->xml' from `(sxml simple)' can now handle the result of
-`xml->sxml'. See bug #29260 for more information.
+** Alex Shinn's pattern matcher for (ice-9 match).
+    
+Guile's copy of Andrew K. Wright's `match' library has been replaced by
+a compatible hygienic implementation by Alex Shinn.
+
+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.
 
-** New module: (system vm coverage)
+** Better debugging for psyntax
 
-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
+We now build psyntax-pp.go directly from psyntax.scm, which allows us to
+preserve the original source locations and variable names. Git users
+will also be please to note that psyntax-pp.scm is no longer
+automatically regenerated from a normal `make' invocation.
+    
+** 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.
+    
+** Better REPL options interface
+
+The set of REPL options is now fixed and typechecked -- you can't
+mistakenly set an option that doesn't exist, or set an value with an
+incorrect type. The following options have been added: `prompt',
+`compile-options', and `value-history'.
+
+The new `repl-default-option-set!' procedure from `(system repl common)'
+can set default options for future REPLs. `repl-default-prompt-set!' is
+a convenience procedure to set default prompts.
+
+** `*unspecified*' is identifier syntax
+    
+`*unspecified*' is no longer a variable, so it is optimized properly by
+the compiler, and is not `set!'-able.
+
+** `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.
+
+** `(debug)' gone (fix?)
+    
+    * module/system/vm/debug.scm (debug): Change to debug the current stack
+      instead of the last stack.
+
+** Support for settable identifier syntax
+
+Following the R6RS, "variable transformers" are settable
+identifier-syntax. See "Identifier macros" in the manual, for more
 information.
+    
+** Deprecate `save-stack', `the-last-stack'
 
-** Faster VM hooks.
+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.
 
-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.
+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.
 
-** Add `program-free-variables' to `(system vm program)'.
+** Compilation warnings at the REPL
     
-(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)
-      ...)
+By default, Guile now prints compile-time warnings for code entered at
+the REPL. Current warnings are for unbound variables and mismatched
+arities.
 
-In this example the `import' refers to the `import' definition in the
-module where the `library' macro is defined, not in the new module.
+** 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.
 
-** Module system macros rewritten as hygienic macros
+** Remove old Emacs interface
 
-`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.
+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.
     
-** Compiler and VM documentation updated
+** `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.
+
+** 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.
+
+** 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)'.
+
+** Backtrace improvements
 
-The documentation for the compiler and VM had slipped out of date; it
-has been brought back... to the future!
+It used to be that backtraces showed a couple of extra frames, from the
+implementation of prompts. This has been fixed. Also, backtraces now
+print column numbers in addition to line numbers, if possible.
 
-** Tree-IL field renaming: `vars' -> `gensyms'
+** `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.
+
+** Better error reporting from the VM
     
-The `vars' fields of <let>, <letrec>, <fix>, and <lambda-case> has been
-renamed to `gensyms', for clarity, and to match <lexical-ref>.
+If a value of the wrong type is passed to `car', `cdr', `set-car!',
+`set-cdr!', `apply', a struct accessor, or a bytevector accessors, the
+error from the VM now indicates which procedure failed, instead of
+lumping them all into the non-helpful "VM error". In addition, unbound
+variable reporting is now more helpful.
 
-** Removed `version' field from <language>
+** No more `(ice-9 debug)'
     
-Language versions weren't being updated or used in any worthwhile way;
-they have been removed, for now at least.
+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.
 
-** New procedure: `module-export-all!'
+** No more `(system vm debug)'
 
-This procedure exports all current and future bindings from a module.
-Use as `(module-export-all! (current-module))'.
+This module is replaced by the recursive debugging REPL.
+    
+** File ports handle binary mode and coding declarations
+    
+Binary file ports are supported again, by opening files in the
+ISO-8859-1 encoding. If an encoding is not specified for textual ports,
+Guile now grovels the file for a "coding:" directive, and uses that if
+possible. See the documentation for `open-file', for more information.
+
+** R6RS character hex escapes on by default
+    
+However, R6RS character escapes within strings are incompatible with
+older Guile escape sequences, so they still need the reader option
+turned on. See "Reader Options" in the manual, for more information.
+
+** Fix random number generator on 64-bit platforms
     
-** Updates to manual
+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.
 
-The introductory sections of the manual have been reorganized
-significantly, making it more accessible to new users of Guile. Check it
-out!
+** Add `vhash-fold*' in `(ice-9 vlist)'.
+
+See "VLists" in the manual, for more information.
+    
+** Timestamps on autocompiled files checked for freshness, not equality
+    
+It used to be that to load a `.go' file instead of a `.scm' file, we
+required that the timestamp of the `.go' file be equal to that of the
+`.scm'. This has been relaxed to accept newer `.go' files, to integrate
+better with `make' tools.
+
+** Simplifications to the `(system foreign)' API.
+    
+Guile's foreign function interface was simplified a great
+deal. Interested users should see "Foreign Function Interface" in the
+manual, for full details.
+
+** 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.
 
 ** And of course, the usual collection of bugfixes
  
@@ -185,11 +353,14 @@ Changes in 1.9.x (since the 1.8.x series):
 
 ** `(srfi srfi-18)', more sophisticated multithreading support
 ** `(ice-9 i18n)', internationalization support
-** `(rnrs bytevector)', the R6RS bytevector API
+** `(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
 
 ** Imported statprof, SSAX, and texinfo modules from Guile-Lib
     
@@ -286,6 +457,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
@@ -473,6 +671,11 @@ 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))'.
+    
 ** `eval-case' has been deprecated, and replaced by `eval-when'.
 
 The semantics of `eval-when' are easier to understand. See "Eval When"
@@ -496,6 +699,19 @@ 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.
 
+** 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
@@ -655,6 +871,55 @@ 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.
+
 ** Many syntax errors have different texts now
 
 Syntax errors still throw to the `syntax-error' key, but the arguments
@@ -783,9 +1048,10 @@ But this does not:
 
 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.
+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.
 
@@ -816,6 +1082,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
@@ -1073,6 +1346,21 @@ backtrace. This has been fixed.
 
 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)'.
@@ -1113,6 +1401,11 @@ 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.
+    
 ** Last but not least, the `λ' macro can be used in lieu of `lambda'
 
 * Changes to the C interface
@@ -1295,6 +1588,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
@@ -1381,7 +1678,7 @@ 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.
 
 ** New dependency: libgc