move (test-suite lib) to lower dir; cleans up uninstalled paths.
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index c1289ef..c1589a1 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,25 +5,40 @@ See the end for copying conditions.
 Please send Guile bug reports to bug-guile@gnu.org.
 
 
+Changes in 2.0.5 (since 2.0.4):
+
+This release fixes the binary interface information (SONAME) of
+libguile, which was incorrect in 2.0.4.  It does not contain other
+changes.
+
+\f
 Changes in 2.0.4 (since 2.0.3):
 
-* Features
+* Notable changes
 
-** Better debuggability for interpreted procedures
+** Better debuggability for interpreted procedures.
     
 Guile 2.0 came with a great debugging experience for compiled
 procedures, but the story for interpreted procedures was terrible.  Now,
-at least, interpreted procedures have names, and the 'arity procedure
-property is always as correct (or, as it can be, in the presence of
-case-lambda).
+at least, interpreted procedures have names, and the `arity' procedure
+property is always correct (or, as correct as it can be, in the presence
+of `case-lambda').
 
 ** Support for cross-compilation.
     
 One can now use a native Guile to cross-compile `.go' files for a
 different architecture.  See the documentation for `--target' in the
-"Compilation" section of the manual, for how to use the cross-compiler.
-See the "Cross building Guile" section of the README, for more on how to
-cross-compile Guile itself.
+"Compilation" section of the manual, for information on how to use the
+cross-compiler.  See the "Cross building Guile" section of the README,
+for more on how to cross-compile Guile itself.
+
+** The return of `local-eval'.
+
+Back by popular demand, `the-environment' and `local-eval' allow the
+user to capture a lexical environment, and then evaluate arbitrary
+expressions in that context.  There is also a new `local-compile'
+command.  See "Local Evaluation" in the manual, for more.  Special
+thanks to Mark Weaver for an initial implementation of this feature.
 
 ** Fluids can now have default values.
 
@@ -33,7 +48,7 @@ However, there was a case in which a new thread would enter Guile, and
 the default values of all the fluids would be `#f' for that thread.
 
 This has now been fixed so that `make-fluid' has an optional default
-value, which defaults to `#f'. 
+value for fluids in unrelated dynamic roots, which defaults to `#f'.
 
 ** Garbage collector tuning.
 
@@ -65,378 +80,134 @@ threads.
     
 Similarly, bignums can occupy a lot of memory.  Guile now offers hooks
 to enable custom GMP allocators that end up calling
-scm_gc_register_allocation'.  These allocators are enabled by default
+`scm_gc_register_allocation'.  These allocators are enabled by default
 when running Guile from the command-line.  To enable them in libraries,
 set the `scm_install_gmp_memory_functions' variable to a nonzero value
 before loading Guile.
 
-Thanks to Mark Weaver for inspiration.
-
 ** SRFI-39 parameters are available by default.
     
-Guile now includes support for "parameters", as defined by SRFI-39, in
-the default environment.  See 
-    * module/ice-9/boot-9.scm (<parameter>, make-parameter, parameter?)
-      (parameter-fluid, parameter-converter, parameterize): New top-level
-      bindings, implementing SRFI-39 parameters.  Currently,
-      current-input-port and similar procedures are not yet parameters.
+Guile now includes support for parameters, as defined by SRFI-39, in the
+default environment.  See "Parameters" in the manual, for more
+information.  `current-input-port', `current-output-port', and
+`current-error-port' are now parameters.
     
-** add current-warning-port
+** Add `current-warning-port'.
     
-    * libguile/ports.h:
-    * libguile/ports.c (scm_current_warning_port)
-      (scm_set_current_warning_port): New functions, wrapping the Scheme
-      parameter.
-    
-    * module/ice-9/boot-9.scm (current-warning-port): New parameter,
-      defining a port for warnings.
+Guile now outputs warnings on a separate port, `current-warning-port',
+initialized to the value that `current-error-port' has on startup.
 
-    warnings written to warning port
-    
-    * libguile/deprecation.c (scm_c_issue_deprecation_warning):
-    * libguile/load.c (auto_compile_catch_handler):
-      (scm_sys_warn_auto_compilation_enabled, scm_primitive_load_path):
-    * module/ice-9/boot-9.scm (warn, %load-announce, duplicate-handlers)
-      (load-in-vicinity):
-    * module/system/base/message.scm (warning): Write to the warning port.
-      (*current-warning-port*): Alias the warning port.
+** Syntax parameters.
 
+Following Racket's lead, Guile now supports syntax parameters.  See
+"Syntax parameters" in the manual, for more.
 
-** add define-syntax-parameter, same as define-syntax
-    
-    * module/ice-9/psyntax.scm (define-syntax-parameter): New toplevel form.
-      Will be used to implement syntax parameters, following Barzilay,
-      Culpepper, and Flatt's 2011 SFP workshop paper, "Keeping it Clean with
-      syntax-parameterize".  Adds a new binding type and definition form.
-    
-**    deprecate fluid-let-syntax in favor of syntax-parameterize
+Also see Barzilay, Culpepper, and Flatt's 2011 SFP workshop paper,
+"Keeping it Clean with syntax-parameterize".
     
-    * module/ice-9/psyntax.scm (syntax-parameterize): Rename from
-      fluid-let-syntax.
+** Parse command-line arguments from the locale encoding.
     
-Author: Ian Price <ianprice90@googlemail.com>
-Date:   Sat Jan 7 01:59:33 2012 +0000
+Guile now attempts to parse command-line arguments using the user's
+locale.  However for backwards compatibility with other 2.0.x releases,
+it does so without actually calling `setlocale'.  Please report any bugs
+in this facility to bug-guile@gnu.org.
 
-    document syntax parameters
-    
-    * doc/ref/api-macros.texi (Macros): Add subsection for "Syntax Parameters"
+** One-armed conditionals: `when' and `unless'
 
-**    primitive-load returns the value(s) of the last expression
-    
-    * libguile/load.c (scm_primitive_load): Return the values yielded from
-      evaluating the last expression in the file.
-    
-* Bug fixes
+Guile finally has `when' and `unless' in the default environment.  Use
+them whenever you would use an `if' with only one branch.  See
+"Conditionals" in the manual, for more.
 
-** Fix R6RS `fold-left' so the accumulator is the first argument.
-** fix <dynwind> serialization.
-** Fix bugs in the new optimizer.
+** `current-filename', `add-to-load-path'
 
-The new `peval' optimizer had three bugs: one related to dynamic-wind,
-one regarding propagation of expressions that yield multiple values, and
-one that would mistakenly turn (cons 'foo #nil) into (list 'foo).  These
-were fixed.
-    
-** when leaving a non-tail let, allow bound vals to be collected
-    
-    * module/language/tree-il/compile-glil.scm (flatten-lambda-case): Clear
-      lexical stack slots at the end of a non-tail let, letrec, or fix.
-      Fixes http://debbugs.gnu.org/9900.
-    
-** fix bit-set*! bug (!)
-    
-    * libguile/bitvectors.c (scm_bit_set_star_x): Fix a long-standing (since
-      2005) bug in which instead of using the kv bitvector, we actually use
-      the `v' bitvector.  Also, change to allow `kv' being shorter than
-      `v'.
+There is a new form, `(current-filename)', which expands out to the
+source file in which it occurs.  Combined with the new
+`add-to-load-path', this allows simple scripts to easily add nearby
+directories to the load path.  See "Load Paths" in the manual, for more.
 
-** fix bug in make-repl when lang is actually a language
-    
-    * module/system/repl/common.scm (make-repl): Fix to accept language
-      objects in addition to symbols.  Fixes http://debbugs.gnu.org/9857.
-      Thanks to Tristan Colgate for the report.
+** `random-state-from-platform'
 
-** hack the port-column of current-output-port after printing a prompt
-    
-    * module/ice-9/boot-9.scm (repl-reader): Reset the output-column to 0
-      after printing the prompt.  Fixes bug 9664.
-
-** FFI: Hold a weak reference to the CIF made by `procedure->pointer'.
-    
-    * libguile/foreign.c (scm_procedure_to_pointer): Keep a weak reference
-      to CIF so that it is not reclaimed before POINTER.  Before that it
-      could be reclaimed and typically reused to store the CIF of another
-      procedure with the same arity, leading to obscure wrong-type-arg
-      errors.
+This procedure initializes a random seed using good random sources
+available on your platform, such as /dev/urandom.  See "Random Number
+Generation" in the manual, for more.
 
-** Allow overlapping regions to be passed to `bytevector-copy!'.
-    
-    Reported by Dmitry Chestnykh <dmitry@codingrobots.com>.
-    Fixes <http://debbugs.gnu.org/10070>.
+** Warn about unsupported `simple-format' options.
 
-** Fix `validate-target' in (system base target).
-    
-    * module/system/base/target.scm (validate-target): Accept any tuple with
-      at least 3 parts.
-    
-** fix validators for various list-style headers
-
-commit 69b8c5df14dbc1f9602925788507d371a529dfbe
-Author: Daniel Hartwig <mandyke@gmail.com>
-Date:   Wed Nov 23 20:56:10 2011 +0100
-
-    * module/web/http.scm (default-val-validator): Valid with no value.
-      (key-value-list?): Keys are always symbols, do not accept strings.
-      (validate-param-list): Apply `valid?' to list elements.
-      (validate-credentials): Validate param for Basic scheme, which
-      is parsed as a string.
-      (declare-symbol-list-header!): `list-of?' args were in wrong order.
-      ("Cache-Control"): Replace `default-val-validator' with more
-      specific procedure.
-      ("Accept"): Validate on first param which has no value.
+The `-Wformat' compilation option now reports unsupported format options
+passed to `simple-format'.
 
-** FFI: Hold a weak reference to the procedure passed to `procedure->pointer'.
-    
-    * libguile/foreign.c (scm_procedure_to_pointer): Keep a weak reference
-      to PROC.
-    
-    * test-suite/tests/foreign.test ("procedure->pointer")["procedure is
-      retained"]: New test.
+** Manual updates
 
-** ,language at REPL sets current-language
-    
-    * module/system/repl/command.scm (language): Set the
-      *current-language*.
-    * module/system/repl/repl.scm (start-repl): Create a new dynamic scope
-      for *current-language*.
+Besides the sections already mentioned, the following manual sections
+are new in this release: "Modules and the File System", "Module System
+Reflection", "Syntax Transformer Helpers", and "Local Inclusion".
 
-** new print option escape-newlines, defaults to #t
-    
-    * libguile/private-options.h (SCM_PRINT_ESCAPE_NEWLINES_P):
-    * libguile/print.c: Add new escape-newlines print option, defaulting to
-      on.
-      (write_character): For newlines, if SCM_PRINT_ESCAPE_NEWLINES_P, then
-      print them as \n.
-      (scm_init_print): Refactor print options initialization.
-
-** allow URIs of the form file:///etc/hosts
-    
-    * module/web/uri.scm (parse-authority): Allow empty authorities, so that
-      we accept URIs of the form, file:///etc/hosts.
+* New interfaces
 
-**    peval: Truncate multiple values when extending the environment.
-    
-    Reported by Cédric Cellier <rixed@happyleptic.org>.
-    
-** Add an exception printer for `getaddrinfo-error'.
-    
-    * module/ice-9/boot-9.scm (getaddrinfo-error-printer): New procedure.
-      Use it as the `getaddrinfo-error' exception printer.
+** (ice-9 session): `apropos-hook'
+** New print option: `escape-newlines', defaults to #t.
+** (ice-9 ftw): `file-system-fold', `file-system-tree', `scandir'
+** `scm_c_value_ref': access to multiple returned values from C
+** scm_call (a varargs version), scm_call_7, scm_call_8, scm_call_9
+** Some new syntax helpers in (system syntax)
 
-** current-input-port et al are srfi-39 parameters
-    
-** add an apropos-hook to ice-9 session
-    
-    * module/ice-9/session.scm: #:keyword-ify the define-module form, and
-      export apropos-hook.
-      (apropos-hook): New hook.
-      (apropos, apropos-fold): Run the apropos-hook.
+Search the manual for these identifiers and modules, for more.
 
-**    Add `file-system-fold' and `file-system-tree' to (ice-9 ftw).
-    
-    * doc/ref/misc-modules.texi (File Tree Walk): Document
-      `file-system-tree' and `file-system-fold'.
+* Build fixes
 
-** Arrange to convert command-line arguments from the right encoding.
-    
-    This is a temporary workaround for the 2.0 stable series.  The next
-    stable series should have an implicit `setlocale (LC_ALL, "")' call,
-    which will make this unnecessary.
-    
-    * libguile/feature.c (progargs_fluid): Rename to...
-      (scm_program_arguments_fluid): ... this.  Update users.
-    
-    * libguile/feature.h (scm_program_arguments_fluid): New internal
-      declaration.
-    
-    * libguile/init.c (invoke_main_func): Call
-      `scm_i_set_boot_program_arguments' instead of
-      `scm_set_program_arguments'.
-    
-    * libguile/script.c (locale_arguments_to_string_list,
-      scm_i_set_boot_program_arguments): New functions.
-      (scm_compile_shell_switches): Use `locale_arguments_to_string_list'.
-    
-    * libguile/script.h (scm_i_set_boot_program_arguments): New internal
-      declaration.
-    
-    * test-suite/standalone/Makefile.am (check_SCRIPTS, TESTS): Add
-      `test-command-line-encoding'.
-    * test-suite/standalone/test-command-line-encoding: New file.
+** FreeBSD build fixes.
+** OpenBSD compilation fixes.
+** Solaris 2.10 test suite fixes.
+** IA64 compilation fix.
+** MinGW build fixes.
+** Work around instruction reordering on SPARC and HPPA in the VM.
+** Gnulib updates: added `dirfd', `setenv' modules.
 
-**    ftw: Add `scandir'.
-    
-    Suggested by Nala Ginrut <nalaginrut@gmail.com>.
-    
-    * module/ice-9/ftw.scm (scandir): New procedure.
-    * test-suite/tests/ftw.test ("scandir"): New test prefix.
-    * doc/ref/misc-modules.texi (File Tree Walk): Document `scandir'.
+* Bug fixes
 
+** Add a deprecated alias for $expt.
+** Add an exception printer for `getaddrinfo-error'.
+** Add deprecated shim for `scm_display_error' with stack as first argument.
+** Add warnings for unsupported `simple-format' options.
+** Allow overlapping regions to be passed to `bytevector-copy!'.
+** Better function prologue disassembly
+** Compiler: fix miscompilation of (values foo ...) in some contexts.
+** Compiler: fix serialization of #nil-terminated lists.
+** Compiler: allow values bound in non-tail let expressions to be collected.
+** Deprecate SCM_ASRTGO.
+** Document invalidity of (begin) as expression; add back-compat shim.
+** Don't leak file descriptors when mmaping objcode.
+** Empty substrings no longer reference the original stringbuf.
+** FFI: Fix `set-pointer-finalizer!' to leave the type cell unchanged.
+** FFI: Hold a weak reference to the CIF made by `procedure->pointer'.
+** FFI: Hold a weak reference to the procedure passed to `procedure->pointer'.
 ** FFI: Properly unpack small integer return values in closure call.
-    
-    Fixes <http://debbugs.gnu.org/10203>.
-    
-commit a6ea740b3ca1174cc4414ef9b03659fe259d0fe6
-Author: Andreas Schwab <schwab@linux-m68k.org>
-Date:   Sat Dec 3 12:17:46 2011 +0100
-
-    * libguile/foreign.c (unpack): Add parameter return_value_p.
-      Properly store integer return values smaller than int.
-      (scm_i_foreign_call): Update call to unpack.
-      (invoke_closure): Likewise.
-
- libguile/foreign.c |   40 +++++++++++++++++++++++++++++++---------
- 1 files changed, 31 insertions(+), 9 deletions(-)
-
-** Add a deprecated alias for $expt
-    
-commit 3cc21d7995313782f6def1789ca0150e95c8363f
-Author: Christian Persch <chpe@gnome.org>
-Date:   Thu Nov 24 23:10:21 2011 +0100
-
-    * module/ice-9/deprecated.scm: Add alias for $expt. $expt was removed
-      in commit 6fc4d0124d633d1b3ddc5af82967f23bd17556f8 but no deprecated
-      alias was added in ad79736c68a803a59814fbfc0cb4b092c2b4cddf like for
-      all the other deprecated $sin, $cos, ... functions.
-
- module/ice-9/deprecated.scm |    5 +++++
- 1 files changed, 5 insertions(+), 0 deletions(-)
-
-**    document invalidity of (begin) as expression; add back-compat shim
-    
-    * doc/ref/api-control.texi (begin): Update to distinguish between
-      splicing begin and sequencing begin.
-    
-    * module/ice-9/psyntax.scm (expand-expr): Add a back-compatibility shim
-      for `(begin)'.
-
-**    peval fix: (cons 1 #nil) is not (list 1)
-    
-** Extend handling of "Cache-Control" header.
-
-Author: Daniel Hartwig <mandyke@gmail.com>
-    
-    * module/web/http.scm ("Cache-Control"): Value for `max-stale' is
-      optional.  Strict validation for value-less directives (`no-store',
-      etc.).  String values optional for "cache-extension" directives.
-    * test-suite/tests/web-http.test: Value for `max-stale' is optional.
-
-** HTTP: Fix qstring writing of cache-extension values
-    
-    * module/web/http.scm ("Cache-Control"): Write string values using the
-      default val writer, to get quoting correct.
-    
-** freebsd build fixes (incomplete)
-
-** fix generalized-vector-{ref,set!} for slices
-    
-    * libguile/generalized-vectors.c (scm_c_generalized_vector_ref):
-      (scm_c_generalized_vector_set_x): Fix for the case in which base was
-      not 1, lbnd was not 0, or inc was not 1.
-    
-    * test-suite/tests/arrays.test (array): Add a test.  Thanks to Daniel
-      Llorens for the report.
-
+** Fix R6RS `fold-left' so the accumulator is the first argument.
+** Fix bit-set*! bug from 2005.
+** Fix bug in `make-repl' when `lang' is actually a <language>.
+** Fix bugs related to mutation, the null string, and shared substrings.
+** Fix <dynwind> serialization.
 ** Fix erroneous check in `set-procedure-properties!'.
-    
-    * libguile/procprop.c
-      (scm_set_procedure_properties_x)[SCM_ENABLE_DEPRECATED == 1]: Pass arguments
-      to `scm_assq' in the right order, and check its return value with
-      `scm_is_true'.  Reported by Mike Gran <spk121@yahoo.com>.
-
-** `write-request-line' writes absolute paths, not absolute URIs.
-
-commit ab66fb3cd1d6e4343741ccb406e17eb3314eba84
-Author: Ian Price <ianprice90@googlemail.com>
-Date:   Thu Sep 29 03:12:00 2011 +0100
-
-    * module/web/http.scm (write-request-line): RFC 2616 says that absolute
-      paths are used to identify resources on an origin server.
-
-**    don't leak file descriptors when mmaping objcode
-    
-    * libguile/objcodes.c (make_objcode_from_file): Close the mmap'd file,
-      so that we don't leak the descriptor.  I was previously under the
-      mistaken impression that closing the fd unmapped the memory, which is
-      not the case.  Thanks to Cedric Cellier for the tip!
-
-**    Fix bugs related to mutation, the null string, and shared substrings
-    
-    * libguile/strings.c (scm_i_is_narrow_string, scm_i_try_narrow_string,
-      scm_i_string_set_x): Check to see if the provided string is a
-      mutation-sharing substring, and do the right thing in that case.
-      Previously, if such a string was passed to these functions, they would
-      behave very badly: while trying to fetch and/or mutate the cell
-      containing the stringbuf, they were actually fetching or mutating the
-      cell containing the original shared string.  That's because
-      mutation-sharing substrings store the original string in CELL_1,
-      whereas all other strings store the stringbuf there.
-
-**    deprecate SCM_ASRTGO
-    
-**    allow scm_display_error to use a stack as the first argument
-    
-    * libguile/backtrace.c (scm_display_error): Allow a deprecated use of
-      this function to pass a stack as the first argument.  Thanks to Peter
-      Brett for pointing it out, in
-      http://lists.gnu.org/archive/html/guile-user/2011-06/msg00000.html.
-
-**    i18n: Fix gc_malloc/free mismatch on non-GNU systems.
-    
-    * libguile/i18n.c (scm_i_locale_free): Remove.
-      (smob_locale_free): Define only when USE_GNU_LOCALE_API.
-      (scm_make_locale)[!USE_GNU_LOCALE_API]: Allocate
-      `c_locale->locale_name' with `scm_gc_strdup', not `malloc'.
-
-**    Make sure `regexp-quote' tests use Unicode-capable string ports.
-    
-    * test-suite/tests/regexp.test (with-unicode): New macro.
-      ("regexp-quote"): Wrap all `regexp-quote' calls in it.  This fixes
-      tests on machines where the default port encoding is US-ASCII.
-
-**    Have `cpu-word-size' error out on unknown CPUs; add support for MIPSEL.
-    
-**    permit non-date values for Expires header
-    
-    * module/web/http.scm ("Expires"): Permit (some) non-date values.
-
-**    Remove null string optimization from scm_from_stringn
-    
-    * libguile/strings.c (scm_from_stringn): Always return a freshly
-      allocated string from scm_from_stringn, even when asked to construct
-      the null string, in accordance with the R5RS.  Previously, we
-      optimized the null string case by returning a reference to a global
-      null string object (scm_nullstr).
-
-**    Empty substrings no longer reference the original stringbuf
-    
-    * libguile/strings.c (scm_i_substring, scm_i_substring_read_only,
-      scm_i_substring_shared): When asked to create an empty substring,
-      return a freshly allocated null string.  Previously, an empty
-      substring needlessly held a reference to the original stringbuf.
-
-**    scm_i_substring_copy tries to narrow the substring
-    
-    * libguile/strings.c (scm_i_substring_copy): Try to narrow the substring
-      if it came from a wide string.
-
-**    Avoid calling `u32_conv_from_encoding' on the null string
-    
-    * libguile/strings.c (scm_from_stringn): Avoid calling
-      `u32_conv_from_encoding' on the null string, by using the same
-      fast-path code used if (encoding == NULL).  This is an optimization,
-      and also avoids any possible encoding errors.
+** Fix generalized-vector-{ref,set!} for slices.
+** Fix error messages involving definition forms.
+** Fix primitive-eval to return #<unspecified> for definitions.
+** HTTP: Extend handling of "Cache-Control" header.
+** HTTP: Fix qstring writing of cache-extension values
+** HTTP: Fix validators for various list-style headers.
+** HTTP: Permit non-date values for Expires header.
+** HTTP: `write-request-line' writes absolute paths, not absolute URIs.
+** Hack the port-column of current-output-port after printing a prompt.
+** Make sure `regexp-quote' tests use Unicode-capable string ports.
+** Peval: Fix bugs in the new optimizer.
+** Statistically unique marks and labels, for robust hygiene across sessions.
+** Web: Allow URIs with empty authorities, like "file:///etc/hosts".
+** `,language' at REPL sets the current-language fluid.
+** `primitive-load' returns the value(s) of the last expression.
+** `scm_from_stringn' always returns unique strings.
+** `scm_i_substring_copy' tries to narrow the substring.
+** i18n: Fix gc_malloc/free mismatch on non-GNU systems.
 
+\f
 Changes in 2.0.3 (since 2.0.2):
 
 * Speed improvements