[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNU Guile 2.0.2 released

From: Ludovic Courtès
Subject: GNU Guile 2.0.2 released
Date: Sat, 02 Jul 2011 00:15:57 +0200
User-agent: Gnus/5.110017 (No Gnus v0.17) Emacs/24.0.50 (gnu/linux)

We are pleased to announce GNU Guile release 2.0.2, the next maintenance
release for the 2.0.x stable series.

The Guile web page is located at .

Guile is an implementation of the Scheme programming language, with
support for many SRFIs, packaged for use in a wide variety of
environments.  In addition to implementing the R5RS Scheme standard and
a large subset of R6RS, Guile includes a module system, full access to
POSIX system calls, networking support, multiple threads, dynamic
linking, a foreign function call interface, and powerful string

Guile can run interactively, as a script interpreter, and as a Scheme
compiler to VM bytecode suitable for stand-alone applications.  It is
also packaged as a library so that applications can easily incorporate a
complete Scheme interpreter/VM.  An application can use Guile as an
extension language, a clean and powerful configuration language, or as
multi-purpose "glue" to connect primitives provided by the application.

Here are the compressed sources:   (6.5MB)

Here are the GPG detached signatures[*]:

To reduce load on the main server, use a mirror listed at:

Here are the MD5 and SHA1 checksums:

177153393c10d668a8fd0fa62c9c30e0  guile-2.0.2.tar.gz
1943fd22417ce1e51babbdcd7681e66a794a8da3  guile-2.0.2.tar.gz

[*] You can use either of the above signature files to verify that
the corresponding file (without the .sig suffix) is intact.  First,
be sure to download both the .sig file and the corresponding tarball.
Then, run a command like this:

  gpg --verify guile-2.0.2.tar.gz.sig

If that command fails because you don't have the required public key,
then run this command to import it:

  gpg --keyserver --recv-keys EA52ECF4

and rerun the `gpg --verify' command.

This release was bootstrapped with the following tools:
  Autoconf 2.68
  Automake 1.11.1
  Libtool 2.4
  Gnulib v0.0-5874-g7170ee0

This release contains many bug fixes along with some new features.
Here are the highlights, taken from the `NEWS' file:

  Changes in 2.0.2 (since 2.0.1):

  * Notable changes

  ** `guile-tools' renamed to `guild'

  The new name is shorter.  Its intended future use is for a CPAN-like
  system for Guile wizards and journeyfolk to band together to share code;
  hence the name.  `guile-tools' is provided as a backward-compatible
  symbolic link.  See "Using Guile Tools" in the manual, for more.

  ** New control operators: `shift' and `reset'

  See "Shift and Reset" in the manual, for more information.

  ** `while' as an expression

  Previously the return value of `while' was unspecified.  Now its
  values are specified both in the case of normal termination, and via
  termination by invoking `break', possibly with arguments.  See "while
  do" in the manual for more.

  ** Disallow access to handles of weak hash tables

  `hash-get-handle' and `hash-create-handle!' are no longer permitted to
  be called on weak hash tables, because the fields in a weak handle could
  be nulled out by the garbage collector at any time, but yet they are
  otherwise indistinguishable from pairs.  Use `hash-ref' and `hash-set!'

  ** More precision for `get-internal-run-time', `get-internal-real-time'

  On 64-bit systems which support POSIX clocks, Guile's internal timing
  procedures offer nanosecond resolution instead of the 10-millisecond
  resolution previously available.  32-bit systems now use 1-millisecond

  ** Guile now measures time spent in GC

  `gc-stats' now returns a meaningful value for `gc-time-taken'.

  ** Add `gcprof'

  The statprof profiler now exports a `gcprof' procedure, driven by the
  `after-gc-hook', to see which parts of your program are causing GC.  Let
  us know if you find it useful.

  ** `map', `for-each' and some others now implemented in Scheme

  We would not mention this in NEWS, as it is not a user-visible change,
  if it were not for one thing: `map' and `for-each' are no longer
  primitive generics.  Instead they are normal bindings, which can be
  wrapped by normal generics.  This fixes some modularity issues between
  core `map', SRFI-1 `map', and GOOPS.

  Also it's pretty cool that we can do this without a performance impact.

  ** Add `scm_peek_byte_or_eof'.

  This helper is like `scm_peek_char_or_eof', but for bytes instead of
  full characters.

  ** Implement #:stop-at-first-non-option option for getopt-long

  See "getopt-long Reference" in the manual, for more information.

  ** Improve R6RS conformance for conditions in the I/O libraries

  The `(rnrs io simple)' module now raises the correct R6RS conditions in
  error cases.  `(rnrs io ports)' is also more correct now, though it is
  still a work in progress.

  ** All deprecated routines emit warnings

  A few deprecated routines were lacking deprecation warnings.  This has
  been fixed now.

  * Speed improvements

  ** Constants in compiled code now share state better

  Constants with shared state, like `("foo")' and `"foo"', now share state
  as much as possible, in the entire compilation unit.  This cuts compiled
  `.go' file sizes in half, generally, and speeds startup.

  ** VLists: optimize `vlist-fold-right', and add `vhash-fold-right'

  These procedures are now twice as fast as they were.

  ** UTF-8 ports to bypass `iconv' entirely

  This reduces memory usage in a very common case.

  ** Compiler speedups

  The compiler is now about 40% faster.  (Note that this is only the case
  once the compiler is itself compiled, so the build still takes as long
  as it did before.)

  ** VM speed tuning

  Some assertions that were mostly useful for sanity-checks on the
  bytecode compiler are now off for both "regular" and "debug" engines.
  This together with a fix to cache a TLS access and some other tweaks
  improve the VM's performance by about 20%.

  ** SRFI-1 list-set optimizations

  lset-adjoin and lset-union now have fast paths for eq? sets.

  ** `memq', `memv' optimizations

  These procedures are now at least twice as fast than in 2.0.1.

  * Deprecations

  ** Deprecate scm_whash API

  `scm_whash_get_handle', `SCM_WHASHFOUNDP', `SCM_WHASHREF',
  `SCM_WHASHSET', `scm_whash_create_handle', `scm_whash_lookup', and
  `scm_whash_insert' are now deprecated.  Use the normal hash table API

  ** Deprecate scm_struct_table

  `scm_struct_table', and `scm_struct_create_handle' are now deprecated.
  These routines formed part of the internals of the map between structs
  and classes.

  ** Deprecate scm_internal_dynamic_wind

  The `scm_t_inner' type and `scm_internal_dynamic_wind' are deprecated,
  as the `scm_dynwind' API is better, and this API encourages users to
  stuff SCM values into pointers.

  ** Deprecate scm_immutable_cell, scm_immutable_double_cell

  These routines are deprecated, as the GC_STUBBORN API doesn't do
  anything any more.

  * Manual updates

  Andreas Rottman kindly transcribed the missing parts of the `(rnrs io
  ports)' documentation from the R6RS documentation.  Thanks Andreas!

  * Bugs fixed

  ** Fix double-loading of script in -ds case
  ** -x error message fix
  ** iconveh-related cross-compilation fixes
  ** Fix small integer return value packing on big endian machines.
  ** Fix hash-set! in weak-value table from non-immediate to immediate
  ** 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 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

You can follow Guile development in the Git repository and on the Guile
mailing lists.  Guile builds from the `master' branch of Git have
version number 2.1.x.

Guile versions with an odd middle number, e.g., 2.1.*, are unstable
development versions.  Even middle numbers indicate stable versions.
This has been the case since the 1.3.* series.

Please report bugs to address@hidden'.  We also welcome reports of
successful builds, which can be sent to the same email address.

Ludovic, on behalf of the Guile team.

Attachment: pgpagjcfI_F0k.pgp
Description: PGP signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]