Nice! ** 'setlocale' now mentions that it raises a 'system-error' for missing locales
Thanks for the fix! Best regards. On Tue, Dec 2, 2025, 06:50 Rob Browning <[email protected]> wrote: > > 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. > >
