We are pleased to announce GNU Guile release 3.0.9, the latest in the
3.0 stable release series, corresponding to 138 commits by 27 people
since 3.0.8.

This release provides many bug fixes as well as new functionality,
including new bindings to POSIX interfaces.  See the ‘NEWS’ excerpt
below for details.

Compared to the previous stable series (2.2.x), Guile 3.0 adds support
for just-in-time native code generation, speeding up all Guile programs.

Guile is an implementation of the Scheme programming language, packaged
for use in a wide variety of environments.  In addition to implementing
the R5RS, R6RS, and R7RS Scheme standards, Guile includes full access to
POSIX system calls, networking support, multiple threads, dynamic
linking, a foreign function call interface, powerful string processing,
and HTTP client and server implementations.

Guile can run interactively, as a script interpreter, and as a Scheme
compiler to VM bytecode.  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.  It is easy to call Scheme code
from C code and vice versa.  Applications can add new functions, data
types, control structures, and even syntax to Guile, to create a
domain-specific language tailored to the task at hand.

Check out the web page for more info and resources:


Guile 3.0.9 can be installed in parallel with Guile 2.2.x; see

Here are the compressed sources:
  https://ftp.gnu.org/gnu/guile/guile-3.0.9.tar.gz   (9.3MB)
  https://ftp.gnu.org/gnu/guile/guile-3.0.9.tar.lz   (5.2MB)
  https://ftp.gnu.org/gnu/guile/guile-3.0.9.tar.xz   (5.5MB)

Here are the GPG detached signatures:

Use a mirror for higher download bandwidth:

Here are the SHA1 and SHA256 checksums:

6ce38ec3fefc19aa08d4662e9b054f7018a72004  guile-3.0.9.tar.gz
GFJQea0poNRtFcdlgbXZHIcCMBv9ghZm0uHRNyYWKBE  guile-3.0.9.tar.gz
bcc02997587cdd03a831ee8d7153cad92629dc3f  guile-3.0.9.tar.lz
vA7go2D7E5GcFOtuJFMxmt8eyZgojJk4KbzxePtIzJo  guile-3.0.9.tar.lz
bf6af1aac320a56233d4d8c0fbeb2c0dca474eab  guile-3.0.9.tar.xz
GiYlrHKyNm6VeS8/51j9Lfd1tARKkKSpeHMm5mwNdQ0  guile-3.0.9.tar.xz

The SHA256 checksum is base64 encoded, instead of the
hexadecimal encoding that most checksum tools default to.

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-3.0.9.tar.gz.sig

The signature should match the fingerprint of the following key:

  pub   rsa4096 2014-08-11 [SC]
        3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
  uid           [ unknown] Ludovic Courtès <l...@gnu.org>
  uid           [ unknown] Ludovic Courtès <l...@chbouib.org>
  uid           [ unknown] Ludovic Courtès (Inria) <ludovic.cour...@inria.fr>

If that command fails because you don't have the required public key,
or that public key has expired, try the following commands to retrieve
or refresh it, and then rerun the 'gpg --verify' command.

  gpg --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5

As a last resort to find the key, you can try the official GNU

  wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg
  gpg --keyring gnu-keyring.gpg --verify guile-3.0.9.tar.gz.sig

This release was bootstrapped with the following tools:
  Autoconf 2.71
  Automake 1.16.5
  Libtool 2.4.7
  Gnulib v0.1-5703-g356a414e8c
  Makeinfo 7.0.1

Changes in 3.0.9 (since 3.0.8)

* Notable changes

* New interfaces and functionality

** New `spawn' procedure to spawn child processes

The new `spawn' procedure creates a child processes executing the given
program.  It lets you control the environment variables of that process
and redirect its standard input, standard output, and standard error

Being implemented in terms of `posix_spawn', it is more portable, more
robust, and more efficient than the combination of `primitive-fork' and
`execl'.  See "Processes" in the manual for details, and see the 2019
paper entitled "A fork() in the road" (Andrew Baumann et al.) for
background information.

`system*', as well as the `open-pipe' and `pipeline' procedures of
(ice-9 popen) are now implemented in terms of `posix_spawn' as well,
which fixes bugs such as redirects: <https://bugs.gnu.org/52835>.

** `open-file' now supports an "e" flag for O_CLOEXEC

Until now, the high-level `open-file' facility did not provide a way to
pass O_CLOEXEC to the underlying `open' call.  It can now be done by
appending "e" to the `mode' string passed as a second argument.  See
"File Ports" in the manual for more info.

** `pipe' now takes flags as an optional argument

This lets you pass flags such as O_CLOEXEC and O_NONBLOCK, as with the
pipe2(2) system call found on GNU/Linux and GNU/Hurd, instead of having
to call `fnctl' afterwards.  See "Ports and File Descriptors" in the
manual for details.

** Bindings to `openat' and friends

The procedures `openat', `open-fdes-at', `statat', `chownat',
`unlinkat', `chmodat', `renameat', `mkdirat' and `symlinkat' have been
added.  They resolve file names relative to a directory passed as a file
port.  The procedures `chdir' `readlink' and `utime' have been extended
to support file ports.  The related flags `AT_REMOVEDIR' and
`AT_EACCESS' have been added. See `File System' in the manual

** Abstract Unix-domain sockets are supported

It is now possible to create an AF_UNIX socket with a leading zero byte
in its file name to create an abstract Unix-domain socket.  See
"man 7 unix" for information on abstract Unix-domain sockets.

** New socket-related constants defined

The `IN6ADDR_ANY' and `IN6ADDR_LOOPBACK' are now defined on systems with
IPv6 support; they can be used with `bind'.

Likewise, the `IPPROTO_IPV6' and `IPV6_V6ONLY' constants are defined,
for use with `setsockopt'.

** New `bytevector-slice' procedure

As an extension to the R6RS interface, the new (rnrs bytevectors gnu)
module defines `bytevector-slice', which returns a bytevector that
aliases part of an existing bytevector.  See "Bytevector Slices" in the

** Disassembler now shows intrinsic names

Disassembler output now includes the name of intrinsics next to each
`call-' instruction (info "(guile) Intrinsic Call Instructions").

** Linker and assembler consume less memory

Previously, the entire output ELF file contents would be stored in
memory when compiling as with `guild compile'.  This is no longer the

* Bug fixes

** JIT compilation is now supported on Apple M1 processors
** Type sizes are correctly determined when cross-compiling
** psyntax honors source properties coming from read hash extensions
** ./configure checks whether the linker supports '-flto' (needed on macOS)
** libguile/srfi-14.i.c is now longer shipped and is instead built from source
** Cross-compilation supports triplets with empty vendor strings
** It is possible to use a 'library-form' inside 'cond-expand' in R7RS libraries
** 'coverage-data->lcov' accepts a #:modules argument as documented
** 'connect' returns #f upon EAGAIN, not just EINPROGRESS
** (web http) capitalizes the "Basic" authorization header
** (web http) terminates chunked encoding with an extra \r\n
** (web client) retries TLS handshake upon non-fatal errors
** 'primitive-load' opens files as O_CLOEXEC
** Baseline compiler no longer crashes on (not (list 1 2))
** Fix documentation of ‘mkdir’
   Previously, the documentation implied the umask was ignored if the
   mode was set explicitly.  However, this is not the case.
** 'system*' honors output/error port redirects
** 'open-input-pipe' & co. are now much faster
** Fix crash with out-of-bound indexes with `string-ref' and `fluid-ref*'
   (https://bugs.gnu.org/60488, https://bugs.gnu.org/58154)
** Fix infinite loop when compiling (make-vector)

Many thanks to everyone who contributed to Guile, in particular to the
following people for their contributions to code and documentation:

     2  Aleix Conchillo Flaqué
     5  Andrew Whatson
     3  Andy Wingo
     1  Antoine Kalmbach
     1  Arne Babenhauserheide
     3  Christopher Baines
     1  Colin Woodbury
     7  Daniel Llorens
     2  Fulbert
     5  Jean Abou Samra
     1  Jessica Tallon
     3  Josselin Poiret
     1  Liliana Marie Prikler
    58  Ludovic Courtès
    14  Maxime Devos
     5  Michael Gran
     1  Mihail Iosilevich
     1  Mikael Djurfeldt
    13  Mike Gran
     1  Olivier Dion
     1  Rob Browning
     1  Sergei Trofimovich
     1  Taylor R Campbell
     2  Timothy Sample
     2  Vijay Marupudi
     1  Zhang Ning
     2  jgart

Ludo’ on behalf of the Guile team.

Attachment: signature.asc
Description: PGP signature

Reply via email to