|Subject:||Re: GNU Guile 2.0.9 released|
|Date:||Wed, 10 Apr 2013 08:41:39 +0100|
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 http://gnu.org/software/guile/ .
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:
Here are the GPG detached signatures[*]:
Use a mirror for higher download bandwidth:
Here are the MD5 and SHA1 checksums:
[*] 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 keys.gnupg.net --recv-keys EA52ECF4
and rerun the 'gpg --verify' command.
This release was bootstrapped with the following tools:
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
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
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
** 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_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'
** 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'
** 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
* 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.
|[Prev in Thread]||Current Thread||[Next in Thread]|