[Top][All Lists]

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

GNU Guile 2.0.7 released

From: Ludovic Courtès
Subject: GNU Guile 2.0.7 released
Date: Fri, 30 Nov 2012 01:34:40 +0100
User-agent: Gnus/5.130005 (Ma Gnus v0.5) Emacs/24.2 (gnu/linux)

We are pleased to announce GNU Guile release 2.0.7, 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.9MB)   (4.3MB)

Here are the GPG detached signatures[*]:

Use a mirror for higher download bandwidth:

Here are the MD5 and SHA1 checksums:

c18d48ba90296fb346f4cf2779f41598  guile-2.0.7.tar.gz
30ff9e94663a2e2098b52f8ce9d050b9  guile-2.0.7.tar.xz
4425cc1a60ffe5637972a328880f98746c2a0f5b  guile-2.0.7.tar.gz
cd6b061e76e36c6e75083168febab4807f1eadab  guile-2.0.7.tar.xz

[*] Use a .sig file 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.7.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.69
  Automake 1.12.2
  Libtool 2.4.2
  Gnulib v0.0-7695-g26c0590

This release provides many bug fixes, performance improvements, and some
new features.  Here are the highlights, taken from the `NEWS' file:

  * Notable changes

  ** SRFI-105 curly infix expressions are supported

  Curly infix expressions as described at are now supported by
  Guile's reader.  This allows users to write things like {a * {b + c}}
  instead of (* a (+ b c)).  SRFI-105 support is enabled by using the
  `#!curly-infix' directive in source code, or the `curly-infix' reader
  option.  See the manual for details.

  ** Reader options may now be per-port

  Historically, `read-options' and related procedures would manipulate
  global options, affecting the `read' procedure for all threads, and all
  current uses of `read'.

  Guile can now associate `read' options with specific ports, allowing
  different ports to use different options.  For instance, the
  `#!fold-case' and `#!no-fold-case' reader directives have been
  implemented, and their effect is to modify the current read options of
  the current port only; similarly for `#!curly-infix'.  Thus, it is
  possible, for instance, to have one port reading case-sensitive code,
  while another port reads case-insensitive code.

  ** Futures may now be nested

  Futures may now be nested: a future can itself spawn and then `touch'
  other futures.  In addition, any thread that touches a future that has
  not completed now processes other futures while waiting for the touched
  future to completed.  This allows all threads to be kept busy, and was
  made possible by the use of delimited continuations (see the manual for

  Consequently, `par-map' and `par-for-each' have been rewritten and can
  now use all cores.

  ** `GUILE_LOAD_PATH' et al can now add directories to the end of the path

  `GUILE_LOAD_PATH' and `GUILE_LOAD_COMPILED_PATH' can now be used to add
  directories to both ends of the load path.  If the special path
  component `...' (ellipsis) is present in these environment variables,
  then the default path is put in place of the ellipsis, otherwise the
  default path is placed at the end.  See "Environment Variables" in the
  manual for details.

  ** `load-in-vicinity' search for `.go' files in `%load-compiled-path'

  Previously, `load-in-vicinity' would look for compiled files in the
  auto-compilation cache, but not in `%load-compiled-path'.  This is now
  fixed.  This affects `load', and the `-l' command-line flag.  See
  <> for details.

  ** Extension search order fixed, and LD_LIBRARY_PATH preserved

  Up to 2.0.6, Guile would modify the `LD_LIBRARY_PATH' environment
  variable (or whichever is relevant for the host OS) to insert its own
  default extension directories in the search path (using GNU libltdl
  facilities was not possible here.)  This approach was problematic in two

  First, the `LD_LIBRARY_PATH' modification would be visible to
  sub-processes, and would also affect future calls to `dlopen', which
  could lead to subtle bugs in the application or sub-processes.  Second,
  when the installation prefix is /usr, the `LD_LIBRARY_PATH' modification
  would typically end up inserting /usr/lib before /usr/local/lib in the
  search path, which is often the opposite of system-wide settings such as

  Both issues have now been fixed.

  ** `make-vtable-vtable' is now deprecated

  Programs should instead use `make-vtable' and `<standard-vtable>'.

  ** The `-Wduplicate-case-datum' and `-Wbad-case-datum' are enabled

  These recently introduced warnings have been documented and are now
  enabled by default when auto-compiling.

  ** Optimize calls to `equal?' or `eqv?' with a constant argument

  The compiler simplifies calls to `equal?' or `eqv?' with a constant
  argument to use `eq?' instead, when applicable.

  * Manual updates

  ** SRFI-9 records now documented under "Compound Data Types"

  The documentation of SRFI-9 record types has been moved in the "Compound
  Data Types", next to Guile's other record APIs.  A new section
  introduces the various record APIs, and describes the trade-offs they
  make.  These changes were made in an attempt to better guide users
  through the maze of records API, and to recommend SRFI-9 as the main

  The documentation of Guile's raw `struct' API has also been improved.

  ** (ice-9 and-let-star) and (ice-9 curried-definitions) now documented

  These modules were missing from the manual.

  * New interfaces

  ** New "functional record setters" as a GNU extension of SRFI-9

  The (srfi srfi-9 gnu) module now provides three new macros to deal with
  "updates" of immutable records: `define-immutable-record-type',
  `set-field', and `set-fields'.

  The first one allows record type "functional setters" to be defined;
  such setters keep the record unchanged, and instead return a new record
  with only one different field.  The remaining macros provide the same
  functionality, and also optimize updates of multiple or nested fields.
  See the manual for details.

  ** web: New `http-get*', `response-body-port', and `text-content-type?'

  These procedures return a port from which to read the response's body.
  Unlike `http-get' and `read-response-body', they allow the body to be
  processed incrementally instead of being stored entirely in memory.

  The `text-content-type?' predicate allows users to determine whether the
  content type of a response is textual.

  See the manual for details.

  ** `string-split' accepts character sets and predicates

  The `string-split' procedure can now be given a SRFI-14 character set or
  a predicate, instead of just a character.

  ** R6RS SRFI support

  Previously, in R6RS modules, Guile incorrectly ignored components of
  SRFI module names after the SRFI number, making it impossible to specify
  sub-libraries.  This release corrects this, bringing us into accordance
  with SRFI 97.

  ** `define-public' is no a longer curried definition by default

  The (ice-9 curried-definitions) should be used for such uses.  See the
  manual for details.

  * Build fixes

  ** Remove reference to `scm_init_popen' when `fork' is unavailable

  This fixes a MinGW build issue (

  ** Fix race between installing `guild' and the `guile-tools' symlink

  * Bug fixes

  ** Procedures returned by `eval' now have docstrings
  ** web client: correctly handle uri-query, etc. in relative URI headers
  ** Fix docs for R6RS `hashtable-copy'
  ** R6RS `string-for-each' now accepts multiple string arguments
  ** Fix out-of-range error in the compiler's CSE pass
  ** Add missing R6RS `open-file-input/output-port' procedure
  ** Futures: Avoid creating the worker pool more than once
  ** Fix invalid assertion about mutex ownership in threads.c
  ** Have `SCM_NUM2FLOAT' and `SCM_NUM2DOUBLE' use `scm_to_double'
  ** The `scandir' procedure now uses `lstat' instead of `stat'
  ** Fix `generalized-vector->list' indexing bug with shared arrays
  ** web: Change `http-get' to try all the addresses for the given URI
  ** Implement `hash' for structs
  ** `read' now adds source properties for data types beyond pairs
  ** Improve error reporting in `append!'
  ** In fold-matches, set regexp/notbol unless matching string start
  ** Don't stat(2) and access(2) the .go location before using it
  ** SRFI-19: use zero padding for hours in ISO 8601 format, not blanks
  ** web: Fix uri-encoding for strings with no unreserved chars, and octets 0-15
  ** More robust texinfo alias handling
  ** Optimize `format' and `simple-format'
  ** Angle of -0.0 is pi, not zero

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: pgpjjeBtvGKxr.pgp
Description: PGP signature

reply via email to

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