We are pleased to announce GNU Guile release 3.0.11, the latest in the
3.0 stable release series.

Guile 3.0.11 is a bug-fix release that also adds support for "SRFI 197:
Pipeline Operators" and "SRFI 207: String-notated bytevectors"
(bytestrings), overhauls SRFI 64 (testing), adds JIT support for the
RISC-V architecture, and includes many other improvements.  See the NEWS
extract below for full details.

Here are the compressed sources:
  https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.gz   (9.6MB)
  https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.lz   (5.4MB)
  https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.xz   (5.7MB)

Here are the GPG detached signatures:
  https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.gz.sig
  https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.lz.sig
  https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.xz.sig

Use a mirror for higher download bandwidth:
  https://www.gnu.org/order/ftp.html

Here are the SHA1 checksums:

3ccecd8e5493d7d1d7db8ac9cb27ac21359f738e     guile-3.0.11.tar.gz
f3a9c390c8f1364c1e44fff5baf38943a62087d5     guile-3.0.11.tar.lz
6547ee884a3baae287fdb411cb6661fffa3b9a87     guile-3.0.11.tar.xz

and the SHA256 checksums:

PJwWlypzu3knUvLk8cznIS12ONVJS19+jhnzgZ2/Ohk  guile-3.0.11.tar.gz
DOUxeY8tgMvbJ2STCN6VoalAxzCQS2zzdroExm3FU34  guile-3.0.11.tar.lz
gYx50jZlen+pb7NkE3zHtBs73uDWXGF0ygN2lVlXlGA  guile-3.0.11.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.11.tar.gz.sig

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
keyring:

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

An extract from NEWS follows.

* Notable changes

** Guile supports SRFI-207: String notated bytevectors (bytestrings)

Guile can now read and write #u8"\xe2;\x88;\x9e; Improbability\n" style
bytestrings when they are enabled by `(read-enable 'bytestrings)` and
`(print-enable 'bytestrings)` respectively. See "SRFI-207 String-notated
bytevectors" in the info pages for additional information.

All of the SRFI-207 procedures have also been added, including support
for hex and base64 encoding and decoding.

** R7RS `cond-expand` now supports `else` (<https://debbugs.gnu.org/71304>)

** The SRFI-64 module for test suites has been rewritten

A new, backward-compatible implementation of (srfi srfi-64) has been
contributed by Tomas Volf.  The reference implementation, which was used
so far, had a number of issues on Guile that made some of its interface
downright unusable (e.g., <https://bugs.gnu.org/72378>), non-conforming
(e.g., <https://bugs.gnu.org/72383>), or buggy (e.g.,
<https://bugs.gnu.org/72372>).

* New interfaces and functionality

** Guile now supports SRFI-197 (Pipeline Operators)

Guile now provides chain, chain-and, chain-when, chain-lambda, nest, and
nest-reverse.

** Guile now supports SRFI-244 (Multiple-value Definitions)

Guile now provides syntax 'define-values' under the module (srfi
srfi-244). This syntax existed for a long time in the core of Guile,
now it is also exported via srfi-244 to help writing portable code.

** PEG parser

PEG grammar parser in (ice-9 peg string-peg) has been rewritten to cover
all the functionality defined in <https://bford.info/pub/lang/peg.pdf>.

The 'not-in-range' pattern was also added to (ice-9 peg); it is
available from PEG strings via '[^...]'.

** GOOPS: Introduce new forms method* and define-method*

The module (oop goops) now exports method* and define-method* which are
the counterparts of lambda* and define* in they provide support for
advanced argument handling such as optional and keyword arguments. The
implementation fully supports (next-method) calls, also for keyword
arguments. The new syntax is documented in the Guile Reference manual.

** (ice-9 rdelim) has new line and field iteration procedures

(ice-9 rdelim) has three new procedures: for-rdelim-from-port,
for-delimited-from-port and for-line-in-file. Of these, for-line-in-file
is helpful in the common situation where you want a procedure applied to
every line in a file.

** Add procedure (%inhibit-welcome-message) to silence the REPL welcome

If ((@ (system repl repl) %inhibit-welcome-message) #t) is set in
$HOME/.guile, the welcome message in the REPL is suppressed.

** Improve 'load-foreign-library' handling of DLLs

The non-libltdl load-foreign-library introduced in 3.0.6 does not handle
some common cases with libtool-generated DLLs.  It has been updated
to search for DLLs that have a version number appended to the name
by libtool, such as libfoo-1.dll.

Also, it has been updated to do library renaming for MSYS.  On Cygwin,
when the #:rename-on-cygwin? option is #t, it already had the capability
to search for "libfoo" as "cygfoo.dll".  It has been updated to add the
capability to search for "libfoo" as "msys-foo.dll" on MSYS.

The load-foreign-library option #:rename-on-cygwin? has been changed to
#:host-type-rename?, and handles both Cygwin and MSYS.

** Make piped-process and system* available on systems without fork

Now that piped-process and system* are implemented in terms of
`posix_spawn', they can be made available on systems without fork().
Note that currently Guile does use fork in piped-process to set exit
codes, so piped-process on systems without fork will have a different
behavior with regards to exit codes.

** MinGW: remove kill, getaffinity, setaffinity, getpriority, and setpriority

Now that Guile uses a posix_spawn module, these Win32 emulations of
POSIX functions no longer work.  They relied on Guile keeping an
internal handle-to-pid table, which is not part of the new posix_spawn
code.  They are removed on MinGW.

** MinGW: waitpid returns ENOSYS if options are non-zero

When Guile switched to using posix_spawn module, Guile's Win32 emulation
of waitpid could no longer emulate ENOHANG.  It relied on Guile keeping
an internal handle-to-pid table.  It now returns ENOSYS on any non-zero
waitpid option.

** The JIT (lightening) supports the riscv architecture

* Performance improvements

** 'copy-file' now relies on 'sendfile' rather than a read/write loop

** The performance of 'letrec' compilation has been improved

* Miscellaneous improvements

** Some array function error messages have been improved

** The psyntax implementation has been improved

** Many Cygwin/MSYS incompatibilities have been fixed

* Documentation updates

** The '-C', '--rNrs', and '--language' arguments are now included in 'guile(1)'

** Now documented: 'peek', 'pk', 'in-vicinity', and 'use-modules' '#:hide'

** The way to avoid SXML escaping has been documented

** SRFI-64 (test suite) documentation has been added

** 'setlocale' now mentions that it raises a 'system-error' for missing locales

* Changes to the distribution

* Build system changes

** -Werror=array-bounds is now added to CFLAGS when available

This catches <https://bugs.gnu.org/76907>

** Parallel builds should no longer fail due to a missing guile-procedures.txt

** Some sparse file tests are now skipped on Darwin hosts

While APFS does support sparse files, they behave differently.

** Guile now compiles with GCC 14 and musl on 32-bit systems

** Compilation with '-Werror=undef' works again (broken in 3.0.10)

** Some missing, readonly, and typical 'copy-file' tests have been added

** The test suite now supports SRFI-64 based tests

This support should be considered internal for now and subject to
change.

* Bug fixes

** `basename` now checks the suffix against the base name, not the full path
   (<https://bugs.gnu.org/69437>)
** UTF-8 string hashing no longer risks overrun with empty strings
** test-hashing works again on 32-bit systems
** GUILE-VERSION changes now propagate to .version and relevant Makefiles
   (<https://bugs.gnu.org/72084>)
** Compiler no longer crashes when building Guile on 32-bit platforms
   (<https://bugs.gnu.org/71891>)
** Compiler no longer crashes when inlining 3.0.9 procedure with kw args
   (<https://bugs.gnu.org/72936>)
** Guile is compiled with -fexcess-precision=standard for i[3456]86 when 
possible
   (<https://bugs.gnu.org/43262>)
** Fix setjmp/longjmp-related crashes on Windows
   (<https://bugs.gnu.org/73167>)
** Fix compilation with GCC 14 and musl on 32-bit systems
   (<https://bugs.gnu.org/73835>)
** Immutable stringbufs are now 8-byte aligned on all systems
   Previously they could end up with an alignment that violated the type
   tag for their type (e.g. ending up tagged as immediates SCM_IMP()).
** `readdir` and `ttyname` now release scm_i_misc_mutex during asyncs
   This avoids potential deadlocks.
** Displaying a `port` won't fail when `ttyname` returns ENODEV
   `ttyname` may return ENODEV even when the port `isatty()`, and
   previously Guile would pass through the related exception.  Now it
   prints the file descriptor instead (as it does when `ttyname` isn't
   available or the port isn't a tty).
** Fix build error when cross-compiling to MinGW
   (<https://bugs.gnu.org/75642>)
** Change <libguile/scm.h> to allow compilation with -Werror=undef
   (<https://bugs.gnu.org/75085>)
** 'all-threads' no longer includes the finalizer thread
   (<https://bugs.gnu.org/76343>)
   Previously 'all-threads' would include the finalizer thread.  This,
   in turn, would trigger warnings from 'primitive-fork' and 'environ'
   suggesting they are being called in a multi-threaded context, when in
   fact user code did not create any thread.
** Calling 'environ' without arguments in a multi-threaded program is OK
   This used to trigger a warning, unduly.
** SRFI-19: 'date->string' converter ~V is now correctly interpreted
   (<https://bugs.gnu.org/74841>)
** When -flto is enabled configure now adds -ffat-lto-objects if it exists
   Otherwise libguile.a can end up with no code.
   https://lintian.debian.org/tags/no-code-sections.html
** r6rs-ports.test custom ports tests should no longer fail on stray closes
   Previously the custom ports weren't explicitly closed, causing
   GC-related closes to produce spurious "log" events in other tests.
** getsockopt no longer risks a buffer overrun with timestamps
   (<https://bugs.gnu.org/76907>)
** 'string->uri-reference' now allows a trailing "."
   (<https://bugs.gnu.org/53201>)
** A bug in the Tree-IL verifier's handling of exact integers has been fixed
** The guile-3.0.pc pkg-config file now includes 'LIB_GETRANDOM'
** 'make-custom-port' now handles a '#f' '%default-port-encoding'
** Computing the buildstamp invokes 'date' more portably
   (<https://bugs.gnu.org/26121>)
** A C23 incompatibility in libguile/jit.c has been fixed
** 'readlink' on Darwin hosts now handles ports correctly
** 'pipe' on Darwin hosts now reports 'ENOSYS' when flags are provided
   Previously that provoked a 'system-error' with a zero errno value.
   (<https://bugs.gnu.org/72547>)
** A numer of test incompatibilities with Darwin hosts have been fixed
   (<https://bugs.gnu.org/72547>)
** define guile-test as non-declarative because it uses load
** make-struct/no-tail and scm_c_make_structv no longer segfault
   Previously they could if given the standard-vtable-fields, but inital
   values that weren't compatible with a vtable.
   (<https://bugs.gnu.org/78789>)
** 'tmpfile' preserves O_CLOEXEC so children won't prevent removal on exit
** Concurrent 'scm_with_guile' invocations no longer risk segfaulting
   <https://bugs.gnu.org/79100>
** 'spawn' should no longer risk segfaulting on at least FreeBSD
** A memory leak in 'spawn' has been fixed
** Issues preventing 'make check' from succeeding on FreeBSD have been fixed

* Thanks to (at least)

Adam Faiz, Andrew McNulty, Andy Wingo, Arne Babenhauserheide, Arun
Isaac, Brennan Vincent, Dale P. Smith, Daniel Llorens, Daphne
Preston-Kendal, David Thompson, Ekaitz Zarraga, Francesco
P. Lovergine, Hannes Müller, Helmut Eller, Ido Yariv, Jessica Tallon,
Jonas Hahnfeld, Juliana Sims, Ludovic Courtès, Matthew Wette, Maxim
Cournoyer, Michael Gran, Michael Käppler, Mikael Djurfeldt, Morgan
Smith, Natanael Copa, Nikolaos Chatzikonstantinou, Noé Lopez, Olivier
Dion, Richard Sent, Rob Browning, Simon Josefsson, Taylan Kammer,
Thomas Klausner, Tomas Volf, Werner Lemberg, Yuval Langer, Zheng
Junjie, Zhu Zihao, a aa, and euouae.

Reply via email to