[Top][All Lists]

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

GNU Guile 2.0.9 released

From: Ludovic Courtès
Subject: GNU Guile 2.0.9 released
Date: Wed, 10 Apr 2013 08:51:52 +0200
User-agent: Gnus/5.130005 (Ma Gnus v0.5) Emacs/24.3 (gnu/linux)

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

This release contains 347 commits by 15 people over 4 months.

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:   (7.1MB)   (4.4MB)

Here are the GPG detached signatures[*]:

Use a mirror for higher download bandwidth:

Here are the MD5 and SHA1 checksums:

531839c3fe887382ca9d4774db544d34  guile-2.0.9.tar.gz
a69b575d4a633bdd9118f3a4a1e97766  guile-2.0.9.tar.xz
fc5d770e8b1d364b2f222a8f8c96ccf740b2956f  guile-2.0.9.tar.gz
a2275c23c4a03e8dbd5e500c47af694e14d2365b  guile-2.0.9.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.9.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.13.1
  Libtool 2.4.2
  Gnulib v0.0-7865-ga828bb2
  Makeinfo 5.1

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

  Changes in 2.0.9 (since 2.0.7):

  Note: 2.0.8 was a brown paper bag release that was never announced, but
  some mirrors may have picked it up.  Please do not use it.

  * Notable changes

  ** New keyword arguments for procedures that open files

  The following procedures that open files now support keyword arguments
  to request binary I/O or to specify the character encoding for text
  files: `open-file', `open-input-file', `open-output-file',
  `call-with-input-file', `call-with-output-file', `with-input-from-file',
  `with-output-to-file', and `with-error-to-file'.

  It is also now possible to specify whether Guile should scan files for
  Emacs-style coding declarations.  This scan was done by default in
  versions 2.0.0 through 2.0.7, but now must be explicitly requested.

  See "File Ports" in the manual for details.

  ** Rewritten guile.m4

  The `guile.m4' autoconf macros have been rewritten to use `guild' and
  `pkg-config' instead of the deprecated `guile-config' (which itself
  calls pkg-config).

  There is also a new macro, `GUILE_PKG', which allows packages to select
  the version of Guile that they want to compile against.  See "Autoconf
  Macros" in the manual, for more information.

  ** Better Windows support

  Guile now correctly identifies absolute paths on Windows (MinGW), and
  creates files on that platform according to its path conventions.  See
  "File System" in the manual, for all details.

  In addition, the new Gnulib imports provide `select' and `poll' on
  Windows builds.

  As an incompatible change, systems that are missing <sys/select.h> were
  previously provided a public `scm_std_select' C function that defined a
  version of `select', but unhappily it also provided its own incompatible
  definitions for FD_SET, FD_ZERO, and other system interfaces.  Guile
  should not be setting these macros in public API, so this interface was
  removed on those plaforms (basically only MinGW).

  ** Numerics improvements

  `number->string' now reliably outputs enough digits to produce the same
  number when read back in.  Previously, it mishandled subnormal numbers
  (printing them as "#.#"), and failed to distinguish between some
  distinct inexact numbers, e.g. 1.0 and (+ 1.0 (expt 2.0 -52)).  These
  problems had far-reaching implications, since the compiler uses
  `number->string' to serialize numeric constants into .go files.

  `sqrt' now produces exact rational results when possible, and handles
  very large or very small numbers more robustly.

  A number (ahem) of operations involving exact rationals have been
  optimized, most notably `integer-expt' and `expt'.

  `exact->inexact' now performs correct IEEE rounding.

  ** New optimizations

  There were a number of improvements to the partial evaluator, allowing
  complete reduction of forms such as:

    ((let ((_ 10)) (lambda () _)))

    ((lambda _ _))

    (apply (lambda _ _) 1 2 3 '(4))

    (call-with-values (lambda () (values 1 2)) (lambda _ _))

  `string-join' now handles huge lists efficiently.

  `get-bytevector-some' now uses buffered input, which is much faster.

  Finally, `array-ref', `array-set!' on arrays of rank 1 or 2 is now
  faster, because it avoids building a rest list.  Similarly, the
  one-argument case of `array-for-each' and `array-map!' has been
  optimized, and `array-copy!' and `array-fill!' are faster.

  ** `peek-char' no longer consumes EOF

  As required by the R5RS, if `peek-char' returns EOF, then the next read
  will also return EOF.  Previously `peek-char' would consume the EOF.
  This makes a difference for terminal devices where it is possible to
  read past an EOF.

  ** Gnulib update

  Guile's copy of Gnulib was updated to v0.0-7865-ga828bb2.  The following
  modules were imported from Gnulib: select, times, pipe-posix, fstat,
  getlogin, poll, and c-strcase.

  ** `include' resolves relative file names relative to including file

  Given a relative file name, `include' will look for it relative to the
  directory of the including file.  This harmonizes the behavior of
  `include' with that of `load'.

  ** SLIB compatibility restored

  Guile 2.0.8 is now compatible with SLIB.  You will have to use a
  development version of SLIB, however, until a new version of SLIB is

  ** Better ,trace REPL command

  Sometimes the ,trace output for nested function calls could overflow the
  terminal width, which wasn't useful.  Now there is a limit to the amount
  of space the prefix will take.  See the documentation for ",trace" for
  more information.

  ** Better docstring syntax supported for `case-lambda'

  Docstrings can now be placed immediately after the `case-lambda' or
  `case-lambda*' keyword.  See "Case-lambda" in the manual.

  ** Improved handling of Unicode byte order marks

  See "BOM Handling" in the manual for details.

  ** Update predefined character sets to Unicode 6.2

  ** GMP 4.2 or later required

  Guile used to require GMP at least version 4.1 (released in May 2002),
  and now requires at least version 4.2 (released in March 2006).

  * Manual updates

  ** Better SXML documentation

  The documentation for SXML modules was much improved, though there is
  still far to go.  See "SXML" in manual.

  ** Style updates

  Use of "iff" was replaced with standard English.  Keyword arguments are
  now documented consistently, along with their default values.

  ** An end to the generated-documentation experiment

  When Guile 2.0 imported some modules from Guile-Lib, they came with a
  system that generated documentation from docstrings and module
  commentaries.  This produced terrible documentation.  We finally bit the
  bullet and incorporated these modules into the main text, and will be
  improving them manually over time, as is the case with SXML.  Help is

  ** New documentation

  There is now documentation for `scm_array_type', and `scm_array_ref', as
  well as for the new `array-length' / 'scm_c_array_length' /
  `scm_array_length' functions.  `array-in-bounds?' has better
  documentation as well.  The `program-arguments-alist' and
  `program-lambda-list' functions are now documented, as well as `and=>',
  `exit', and `quit'.  The (system repl server) module is now documented
  (see REPL Servers).  Finally, the GOOPS class hierarchy diagram has been
  regenerated for the web and print output formats.

  * New deprecations

  ** Deprecate generalized vector interface

  The generalized vector interface, introduced in 1.8.0, is simply a
  redundant, verbose interface to arrays of rank 1.  `array-ref' and
  similar functions are entirely sufficient.  Thus,
  `scm_generalized_vector_p', `scm_generalized_vector_length',
  `scm_generalized_vector_ref', `scm_generalized_vector_set_x', and
  `scm_generalized_vector_to_list' are now deprecated.

  ** Deprecate SCM_CHAR_CODE_LIMIT and char-code-limit

  These constants were defined to 256, which is not the highest codepoint
  supported by Guile.  Given that they were useless and incorrect, they
  have been deprecated.

  ** Deprecate `http-get*'

  The new `#:streaming?' argument to `http-get' subsumes the functionality
  of `http-get*' (introduced in 2.0.7).  Also, the `#:extra-headers'
  argument is deprecated in favor of `#:headers'.

  ** Deprecate (ice-9 mapping)

  This module, present in Guile since 1996 but never used or documented,
  has never worked in Guile 2.0.  It has now been deprecated and will be
  removed in Guile 2.2.

  ** Deprecate undocumented array-related C functions

  These are `scm_array_fill_int', `scm_ra_eqp', `scm_ra_lessp',
  `scm_ra_leqp', `scm_ra_grp', `scm_ra_greqp', `scm_ra_sum',
  `scm_ra_product', `scm_ra_difference', `scm_ra_divide', and

  * New interfaces

  ** SRFI-41 Streams

  See "SRFI-41" in the manual.

  ** SRFI-45 exports `promise?'

  SRFI-45 now exports a `promise?' procedure that works with its promises.
  Also, its promises now print more nicely.

  ** New HTTP client procedures

  See "Web Client" for documentation on the new `http-head', `http-post',
  `http-put', `http-delete', `http-trace', and `http-options' procedures,
  and also for more options to `http-get'.

  ** Much more capable `xml->sxml'

  See "Reading and Writing XML" for information on how the `xml->sxml'
  parser deals with namespaces, processed entities, doctypes, and literal
  strings.  Incidentally, `current-ssax-error-port' is now a parameter

  ** New procedures for converting strings to and from bytevectors

  See "Representing Strings as Bytes" for documention on the new `(ice-9
  iconv)' module and its `bytevector->string' and `string->bytevector'

  ** Escape continuations with `call/ec' and `let/ec'

  See "Prompt Primitives".

  ** New procedures to read all characters from a port

  See "Line/Delimited" in the manual for documentation on `read-string'
   and `read-string!'.

  ** New procedure `sendfile'

  See "File System".

  ** New procedure `unget-bytevector'

  See "R6RS Binary Input".

  ** New C helper: `scm_c_bind_keyword_arguments'

  See "Keyword Procedures".

  ** New command-line arguments: `--language' and `-C'

  See "Command-line Options" in the manual.

  ** New environment variables: `GUILE_STACK_SIZE', `GUILE_INSTALL_LOCALE'

  See "Environment Variables".

  ** New procedures for dealing with file names

  See "File System" for documentation on `system-file-name-convention',
  `file-name-separator?', `absolute-file-name?', and

  ** `array-length', an array's first dimension

  See "Array Procedures".

  ** `hash-count', for hash tables

  See "Hash Tables".

  ** `round-ash', a bit-shifting operator that rounds on right-shift

  See "Bitwise Operations".

  ** New foreign types: `ssize_t', `ptrdiff_t'

  See "Foreign Types".

  ** New C helpers: `scm_from_ptrdiff_t', `scm_to_ptrdiff_t'

  See "Integers".

  ** Socket option `SO_REUSEPORT' now available from Scheme

  If supported on the platform, `SO_REUSEPORT' is now available from
  Scheme as well.  See "Network Sockets and Communication".

  ** `current-language' in default environment

  Previously defined only in `(system base language)', `current-language'
  is now defined in the default environment, and is used to determine the
  language for the REPL, and for `compile-and-load'.

  ** New procedure: `fluid->parameter'

  See "Parameters", for information on how to convert a fluid to a

  ** New `print' REPL option

  See "REPL Commands" in the manual for information on the new
  user-customizable REPL printer.

  ** New variable: %site-ccache-dir

  The "Installing Site Packages" and "Build Config" manual sections now
  refer to this variable to describe where users should install their
  `.go' files.

  * Build fixes

  ** Fix compilation against libgc 7.3.
  ** Fix cross-compilation of `c-tokenize.o'.
  ** Fix warning when compiling against glibc 2.17.
  ** Fix documentation build against Texinfo 5.0.
  ** Fix building Guile from a directory with non-ASCII characters.
  ** Fix native MinGW build.
  ** Fix --disable-posix build.
  ** Fix MinGW builds with networking, POSIX, and thread support.

  * Bug fixes

  ** Fix inexact number printer.
  ** Fix infinite loop when parsing optional-argument short options (SRFI-37).
  ** web: Support non-GMT date headers in the HTTP client.
  ** web: support IP-literal (IPv6 address) in Host header.
  ** Avoid stack overflows with `par-map' and nested futures in general.
  ** Peek-char no longer consumes EOF.
  ** Avoid swallowing multiple EOFs in R6RS binary-input procedures.
  ** A fork when multiple threads are running will now print a warning.
  ** Allow for spurious wakeups from pthread_cond_wait.
  ** Warn and ignore module autoload failures.
  ** Use chmod portably in (system base compile).
  ** Fix response-body-port for HTTP responses without content-length.
  ** Allow case-lambda expressions with no clauses.
  ** Improve standards conformance of string->number.
  ** Support calls and tail-calls with more than 255 formals.
  ** ,option evaluates its right-hand-side.
  ** Structs with tail arrays are not simple.
  ** Make `SCM_LONG_BIT' usable in preprocessor conditionals.
  ** Fix thread-unsafe lazy initializations.
  ** Allow SMOB mark procedures to be called from parallel markers.
  ** Fix later-bindings-win logic in with-fluids.
  ** Fix duplicate removal of with-fluids.
  ** Support calling foreign functions of 10 arguments or more.
  ** Let reverse! accept arbitrary types as second argument.
  ** Recognize the `x86_64.*-gnux32' triplet.
  ** Check whether a triplet's OS part specifies an ABI.
  ** Recognize mips64* as having 32-bit pointers by default.
  ** Use portable sed constructs.
  ** Remove language/glil/decompile-assembly.scm.
  ** Use O_BINARY in `copy-file', `load-objcode', `mkstemp'.
  ** Use byte-oriented functions in `get-bytevector*'.
  ** Fix abort when iconv swallows BOM from UTF-16 or UTF-32 stream.
  ** Fix compilation of functions with more than 255 local variables.
  ** Fix `getgroups' for when zero supplementary group IDs exist.
  ** Allow (define-macro name (lambda ...)).
  ** Various fixes to the (texinfo) modules.
  ** guild: Gracefully handle failures to install the locale.
  ** Fix format string warnings for ~!, ~|, ~/, ~q, ~Q, and ~^.
  ** Fix source annotation bug in psyntax 'expand-body'.
  ** Ecmascript: Fix conversion to boolean for non-numbers.
  ** Use case-insensitive comparisons for encoding names.
  ** Add missing cond-expand feature identifiers.
  ** A failure to find a module's file does not prevent future loading.
  ** Many (oop goops save) fixes.
  ** `http-get': don't shutdown write end of socket.
  ** Avoid signed integer overflow in scm_product.
  ** http: read-response-body always returns bytevector or #f, never EOF.
  ** web: Correctly detect "No route to host" conditions.
  ** `system*': failure to execvp no longer leaks dangling processes.
  ** More sensible case-lambda* dispatch.
  ** Do not defer expansion of internal define-syntax forms.

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

reply via email to

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