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.
>
>

Reply via email to