Bump version number for 2.0.6.
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 02b824d..1225206 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,188 @@ See the end for copying conditions.
 Please send Guile bug reports to bug-guile@gnu.org.
 
 
+Changes in 2.0.6 (since 2.0.5):
+
+* Notable changes
+
+** New optimization pass: common subexpression elimination (CSE)
+
+Guile's optimizer will now run a CSE pass after partial evaluation.
+This pass propagates static information about branches taken, bound
+lexicals, and effects from an expression's dominators.  It can replace
+common subexpressions with their boolean values (potentially enabling
+dead code elimination), equivalent bound lexicals, or it can elide them
+entirely, depending on the context in which they are executed.  This
+pass is especially useful in removing duplicate type checks, such as
+those produced by SRFi-9 record accessors.
+
+** Improvements to the partial evaluator
+
+Peval can now hoist tests that are common to both branches of a
+conditional into the test.  This can help with long chains of
+conditionals, such as those generated by the `match' macro.  Peval can
+now do simple beta-reductions of procedures with rest arguments.  It
+also avoids residualizing degenerate lexical aliases, even when full
+inlining is not possible.  Finally, peval now uses the effects analysis
+introduced for the CSE pass.  More precise effects analysis allows peval
+to move more code.
+
+** Run finalizers asynchronously in asyncs
+
+Finalizers are now run asynchronously, via an async.  See Asyncs in the
+manual.  This allows Guile and user code to safely allocate memory while
+holding a mutex.
+
+** Update SRFI-14 character sets to Unicode 6.1
+
+Note that this update causes the Latin-1 characters `§' and `¶' to be
+reclassified as punctuation.  They were previously considered to be part
+of `char-set:symbol'.
+
+** Better source information for datums
+
+When the `positions' reader option is on, as it is by default, Guile's
+reader will record source information for more kinds of datums.
+
+** Improved error and warning messages
+
+`syntax-violation' errors now prefer 'subform' for source info, with
+'form' as fallback.  Syntactic errors in `cond' and `case' now produce
+better errors.  `case' can now warn on duplicate datums, or datums that
+cannot be usefully compared with `eqv?'.  `-Warity-mismatch' now handles
+applicable structs.  `-Wformat' is more robust in the presence of
+`gettext'.  Finally, various exceptions thrown by the Web modules now
+define appropriate exception printers.
+
+** A few important bug fixes in the HTTP modules.
+
+Guile's web server framework now checks if an application returns a body
+wheree it is not permitted, for example in response to a HEAD request,
+and warn or truncate the response as appropriate.  Bad requests now
+cause a 400 Bad Request response to be printed before closing the port.
+Finally, some date-printing and URL-parsing bugs were fixed.
+
+** Pretty-print improvements
+
+When Guile needs to pretty-print Tree-IL, it will try to reconstruct
+`cond', `or`, and other derived syntax forms from the primitive tree-IL
+forms.  It also uses the original names instead of the fresh unique
+names, when it is unambiguous to do so.  This can be seen in the output
+of REPL commands like `,optimize'.
+
+Also, the `pretty-print' procedure has a new keyword argument,
+`#:max-expr-width'.
+
+** Fix memory leak involving applicable SMOBs
+
+At some point in the 1.9.x series, Guile began leaking any applicable
+SMOB that was actually applied.  (There was a weak-key map from SMOB to
+trampoline functions, where the value had a strong reference on the
+key.)  This has been fixed.  There was much rejoicing!
+
+** Support for HTTP/1.1 chunked transfer coding
+
+See "Transfer Codings" in the manual, for more.
+
+** Micro-optimizations
+
+A pile of micro-optimizations: the `string-trim' function when called
+with `char-set:whitespace'; the `(web http)' parsers; SMOB application;
+conversion of raw UTF-8 and UTF-32 data to and from SCM strings; vlists
+and vhashes; `read' when processing string literals.
+
+** Incompatible change to `scandir'
+
+As was the original intention, `scandir' now runs the `select?'
+procedure on all items, including subdirectories and the `.' and `..'
+entries.  It receives the basename of the file in question instead of
+the full name.  We apologize for this incompatible change to this
+function introduced in the 2.0.4 release.
+
+* Manual updates
+
+The manual has been made much more consistent in its naming conventions
+with regards to formal parameters of functions.  Thanks to Bake Timmons.
+
+* New interfaces
+
+** New C function: `scm_to_pointer'
+** New C inline functions: `scm_new_smob', `scm_new_double_smob'
+** (ice-9 format): Add ~h specifier for localized number output.
+** (web response): New procedure: `response-must-not-include-body?'
+** New predicate: 'supports-source-properties?'
+** New C helpers: `scm_c_values', `scm_c_nvalues'
+** Newly public inline C function: `scm_unget_byte'
+** (language tree-il): New functions: `tree-il=?', `tree-il-hash'
+** New fluid: `%default-port-conversion-strategy'
+** New syntax: `=>' within `case'
+** (web http): `make-chunked-input-port', `make-chunked-output-port'
+** (web http): `declare-opaque-header!'
+
+Search the manual for these identifiers, for more information.
+
+* New deprecations
+
+** `close-io-port' deprecated
+
+Use `close-port'.
+
+** `scm_sym2var' deprecated
+
+In most cases, replace with `scm_lookup' or `scm_module_variable'.  Use
+`scm_define' or `scm_module_ensure_local_variable' if the second
+argument is nonzero.  See "Accessing Modules from C" in the manual, for
+full details.
+
+** Lookup closures deprecated
+
+These were never documented.  See "Module System Reflection" in the
+manual for replacements.
+
+* Build fixes
+
+** Fix compilation against uninstalled Guile on non-GNU platforms.
+** Fix `SCM_I_ERROR' definition for MinGW without networking.
+** Fix compilation with the Sun C compiler.
+** Fix check for `clock_gettime' on OpenBSD and some other systems.
+** Fix build with --enable-debug-malloc.
+** Honor $(program_transform_name) for the `guile-tools' symlink.
+** Fix cross-compilation of GOOPS-using code.
+
+* Bug fixes
+
+** Fix use of unitialized stat buffer in search-path of absolute paths.
+** Avoid calling `freelocale' with a NULL argument.
+** Work around erroneous tr_TR locale in Darwin 8 in tests.
+** Fix `getaddrinfo' test for Darwin 8.
+** Use Gnulib's `regex' module for better regex portability.
+** `source-properties' and friends work on any object
+** Rewrite open-process in C, for robustness related to threads and fork
+** Fix <TAG>vector-length when applied to other uniform vector types
+** Fix escape-only prompt optimization (was disabled previously)
+** Fix a segfault when /dev/urandom is not accessible
+** Fix flush on soft ports, so that it actually runs.
+** Better compatibility of SRFI-9 records with core records
+** Fix and clarify documentation of `sorted?'.
+** Fix IEEE-754 endianness conversion in bytevectors.
+** Correct thunk check in the `wind' instruction.
+** Add @acronym support to texinfo modules
+** Fix docbook->texi for <ulink> without URL
+** Fix `setvbuf' to leave the line/column number unchanged.
+** Add missing public declaration for `scm_take_from_input_buffers'.
+** Fix relative file name canonicalization with empty %LOAD-PATH entries.
+** Import newer (ice-9 match) from Chibi-Scheme.
+** Fix unbound variables and unbound values in ECMAScript runtime.
+** Make SRFI-6 string ports Unicode-capable.
+
+\f
+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):
 
 * Notable changes
@@ -124,6 +306,11 @@ 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.
 
+** Warn about unsupported `simple-format' options.
+
+The `-Wformat' compilation option now reports unsupported format options
+passed to `simple-format'.
+
 ** Manual updates
 
 Besides the sections already mentioned, the following manual sections
@@ -136,6 +323,7 @@ Reflection", "Syntax Transformer Helpers", and "Local Inclusion".
 ** 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)
 
 Search the manual for these identifiers and modules, for more.
@@ -157,7 +345,6 @@ Search the manual for these identifiers and modules, for more.
 ** 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!'.
-** Avoid calling `u32_conv_from_encoding' on the null string.
 ** Better function prologue disassembly
 ** Compiler: fix miscompilation of (values foo ...) in some contexts.
 ** Compiler: fix serialization of #nil-terminated lists.
@@ -167,12 +354,10 @@ Search the manual for these identifiers and modules, for more.
 ** 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: Fix signed/unsigned pointer mismatches in implementation.
 ** 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.
 ** Fix R6RS `fold-left' so the accumulator is the first argument.
-** Fix `validate-target' in (system base target).
 ** 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.
@@ -187,19 +372,17 @@ Search the manual for these identifiers and modules, for more.
 ** 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.
-** Have `cpu-word-size' error out on unknown CPUs; add support for MIPSEL.
 ** Make sure `regexp-quote' tests use Unicode-capable string ports.
 ** Peval: Fix bugs in the new optimizer.
-** Peval: fold (values FOO) to FOO in more cases
 ** 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.
-** guile-readline: Clean `.go' files.
 ** i18n: Fix gc_malloc/free mismatch on non-GNU systems.
 
+\f
 Changes in 2.0.3 (since 2.0.2):
 
 * Speed improvements