make applicable smob calls cheaper, and fix a memory leak
[bpt/guile.git] / NEWS
diff --git a/NEWS b/NEWS
index 7ae9c11..c1589a1 100644 (file)
--- a/NEWS
+++ b/NEWS
 Guile NEWS --- history of user-visible changes.
-Copyright (C) 1996-2011 Free Software Foundation, Inc.
+Copyright (C) 1996-2012 Free Software Foundation, Inc.
 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):
+
+* Notable changes
+
+** 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 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 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.
+
+Fluids are used for dynamic and thread-local binding.  They have always
+inherited their values from the context or thread that created them.
+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 for fluids in unrelated dynamic roots, which defaults to `#f'.
+
+** Garbage collector tuning.
+
+The garbage collector has now been tuned to run more often under some
+circumstances.
+
+*** Unmanaged allocation
+
+The new `scm_gc_register_allocation' function will notify the collector
+of unmanaged allocation.  This will cause the collector to run sooner.
+Guile's `scm_malloc', `scm_calloc', and `scm_realloc' unmanaged
+allocators eventually call this function.  This leads to better
+performance under steady-state unmanaged allocation.
+
+*** Transient allocation
+    
+When the collector runs, it will try to record the total memory
+footprint of a process, if the platform supports this information.  If
+the memory footprint is growing, the collector will run more frequently.
+This reduces the increase of the resident size of a process in response
+to a transient increase in allocation.
+
+*** Management of threads, bignums
+
+Creating a thread will allocate a fair amount of memory.  Guile now does
+some GC work (using `GC_collect_a_little') when allocating a thread.
+This leads to a better memory footprint when creating many short-lived
+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
+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.
+
+** SRFI-39 parameters are available by default.
+    
+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'.
+    
+Guile now outputs warnings on a separate port, `current-warning-port',
+initialized to the value that `current-error-port' has on startup.
+
+** Syntax parameters.
+
+Following Racket's lead, Guile now supports syntax parameters.  See
+"Syntax parameters" in the manual, for more.
+
+Also see Barzilay, Culpepper, and Flatt's 2011 SFP workshop paper,
+"Keeping it Clean with syntax-parameterize".
+    
+** Parse command-line arguments from the locale encoding.
+    
+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.
+
+** One-armed conditionals: `when' and `unless'
+
+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.
+
+** `current-filename', `add-to-load-path'
+
+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.
+
+** `random-state-from-platform'
+
+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
+are new in this release: "Modules and the File System", "Module System
+Reflection", "Syntax Transformer Helpers", and "Local Inclusion".
+
+* New interfaces
+
+** (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)
+
+Search the manual for these identifiers and modules, for more.
+
+* Build fixes
+
+** 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.
+
+* 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.
+** 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!'.
+** 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
+
+** Guile has a new optimizer, `peval'.
+
+`Peval' is a partial evaluator that performs constant folding, dead code
+elimination, copy propagation, and inlining.  By default it runs on
+every piece of code that Guile compiles, to fold computations that can
+happen at compile-time, so they don't have to happen at runtime.
+
+If we did our job right, the only impact you would see would be your
+programs getting faster.  But if you notice slowdowns or bloated code,
+please send a mail to bug-guile@gnu.org with details.
+
+Thanks to William R. Cook, Oscar Waddell, and Kent Dybvig for inspiring
+peval and its implementation.
+
+You can see what peval does on a given piece of code by running the new
+`,optimize' REPL meta-command, and comparing it to the output of
+`,expand'.  See "Compile Commands" in the manual, for more.
+
+** Fewer calls to `stat'.
+
+Guile now stats only the .go file and the .scm file when loading a fresh
+compiled file.
+
+* Notable changes
+
+** New module: `(web client)', a simple synchronous web client.
+
+See "Web Client" in the manual, for more.
+
+** Users can now install compiled `.go' files.
+
+See "Installing Site Packages" in the manual.
+
+** Remove Front-Cover and Back-Cover text from the manual.
+    
+The manual is still under the GNU Free Documentation License, but no
+longer has any invariant sections.
+
+** More helpful `guild help'.
+    
+`guild' is Guile's multi-tool, for use in shell scripting.  Now it has a
+nicer interface for querying the set of existing commands, and getting
+help on those commands.  Try it out and see!
+
+** New macro: `define-syntax-rule'
+
+`define-syntax-rule' is a shorthand to make a `syntax-rules' macro with
+one clause.  See "Syntax Rules" in the manual, for more.
+
+** The `,time' REPL meta-command now has more precision.
+
+The output of this command now has microsecond precision, instead of
+10-millisecond precision.
+
+** `(ice-9 match)' can now match records.
+    
+See "Pattern Matching" in the manual, for more on matching records.
+
+** New module: `(language tree-il debug)'.
+
+This module provides a tree-il verifier.  This is useful for people that
+generate tree-il, usually as part of a language compiler.
+
+** New functions: `scm_is_exact', `scm_is_inexact'.
+    
+These provide a nice C interface for Scheme's `exact?' and `inexact?',
+respectively.
+
+* Bugs fixed
+
+See the git log (or the ChangeLog) for more details on these bugs.
+
+** Fix order of importing modules and resolving duplicates handlers.
+** Fix a number of bugs involving extended (merged) generics.
+** Fix invocation of merge-generics duplicate handler.
+** Fix write beyond array end in arrays.c.
+** Fix read beyond end of hashtable size array in hashtab.c.
+** (web http): Locale-independent parsing and serialization of dates.
+** Ensure presence of Host header in HTTP/1.1 requests.
+** Fix take-right and drop-right for improper lists.
+** Fix leak in get_current_locale().
+** Fix recursive define-inlinable expansions.
+** Check that srfi-1 procedure arguments are procedures.
+** Fix r6rs `map' for multiple returns.
+** Fix scm_tmpfile leak on POSIX platforms.
+** Fix a couple of leaks (objcode->bytecode, make-boot-program).
+** Fix guile-lib back-compatibility for module-stexi-documentation.
+** Fix --listen option to allow other ports.
+** Fix scm_to_latin1_stringn for substrings.
+** Fix compilation of untyped arrays of rank not 1.
+** Fix unparse-tree-il of <dynset>.
+** Fix reading of #||||#.
+** Fix segfault in GOOPS when class fields are redefined.
+** Prefer poll(2) over select(2) to allow file descriptors above FD_SETSIZE.
+
+\f
 Changes in 2.0.2 (since 2.0.1):
 
 * Notable changes
@@ -162,10 +465,16 @@ ports)' documentation from the R6RS documentation.  Thanks Andreas!
 ** Fix call-with-input-file & relatives for multiple values
 ** Fix `hash' for inf and nan
 ** Fix libguile internal type errors caught by typing-strictness==2
-** Fix compile error in mingw fstat socket detection
+** Fix compile error in MinGW fstat socket detection
+** Fix generation of auto-compiled file names on MinGW
 ** Fix multithreaded access to internal hash tables
 ** Emit a 1-based line number in error messages
 ** Fix define-module ordering
+** Fix several POSIX functions to use the locale encoding
+** Add type and range checks to the complex generalized vector accessors
+** Fix unaligned accesses for bytevectors of complex numbers
+** Fix '(a #{.} b)
+** Fix erroneous VM stack overflow for canceled threads
     
 \f
 Changes in 2.0.1 (since 2.0.0):
@@ -1280,7 +1589,7 @@ Arguments", and "Case-lambda" in the manual.
 
 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
+arity that the function has, in the same format as the old arity
 accessor.
 
 ** `lambda*' and `define*' are now available in the default environment
@@ -2050,7 +2359,7 @@ allocated to primitive procedures, each with its own calling convention.
 Now there is only one, the gsubr. This may affect user code if you were
 defining a procedure using scm_c_make_subr rather scm_c_make_gsubr. The
 solution is to switch to use scm_c_make_gsubr. This solution works well
-both with the old 1.8 and and with the current 1.9 branch.
+both with the old 1.8 and with the current 1.9 branch.
 
 Guile's old evaluator used to have special cases for applying "gsubrs",
 primitive procedures with specified numbers of required, optional, and
@@ -6087,7 +6396,7 @@ incrementally add to the innermost environment, without checking
 whether the restrictions specified in RnRS were met.  This lead to the
 correct behaviour when these restriction actually were met, but didn't
 catch all illegal uses.  Such an illegal use could lead to crashes of
-the Guile interpreter or or other unwanted results.  An example of
+the Guile interpreter or other unwanted results.  An example of
 incorrect internal defines that made Guile behave erratically:
 
   (let ()