Re: GNU Guile 3.0.11 released

Nala Ginrut <[email protected]> Wed, 3 Dec 2025 13:26:30 +0900
Newsgroups gmane.lisp.guile.sources,gmane.lisp.guile.user,gmane.lisp.guile.devel
Message-ID <CAPjoZofJN+SVH5Bzda9JRyuiiNgxiDHc54HdC3JouE5ybmVpPg@mail.gmail.com>
--00000000000072088f0645049e56
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

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=3Darray-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=3Dundef' 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=3Dstandard for i[3456]86 whe=
n
> 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=3Dundef
>    (<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 exist=
s
>    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 clos=
es
>    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 exi=
t
> ** 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=C3=BCller, Helmut Eller, Ido Yariv, Jessica Tallon=
,
> Jonas Hahnfeld, Juliana Sims, Ludovic Court=C3=A8s, Matthew Wette, Maxim
> Cournoyer, Michael Gran, Michael K=C3=A4ppler, Mikael Djurfeldt, Morgan
> Smith, Natanael Copa, Nikolaos Chatzikonstantinou, No=C3=A9 Lopez, Olivie=
r
> 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.
>
>

--00000000000072088f0645049e56
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"auto">Nice!<div dir=3D"auto"><span style=3D"font-size:12.8px;ba=
ckground-color:rgb(15,14,8)">** &#39;setlocale&#39; now mentions that it ra=
ises a &#39;system-error&#39; for missing locales</span></div><div dir=3D"a=
uto"><span style=3D"font-size:12.8px;background-color:rgb(15,14,8)"><br></s=
pan></div><div dir=3D"auto">Thanks for the fix!=C2=A0</div><div dir=3D"auto=
"><br></div><div dir=3D"auto">Best regards.</div><div dir=3D"auto"><br></di=
v><div dir=3D"auto"><br></div><div dir=3D"auto"><br></div><div dir=3D"auto"=
><br></div></div><br><div class=3D"gmail_quote gmail_quote_container"><div =
dir=3D"ltr" class=3D"gmail_attr">On Tue, Dec 2, 2025, 06:50 Rob Browning &l=
t;<a href=3D"mailto:[email protected]">[email protected]</a>&gt; wrot=
e:<br></div><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><br>
We are pleased to announce GNU Guile release 3.0.11, the latest in the<br>
3.0 stable release series.<br>
<br>
Guile 3.0.11 is a bug-fix release that also adds support for &quot;SRFI 197=
:<br>
Pipeline Operators&quot; and &quot;SRFI 207: String-notated bytevectors&quo=
t;<br>
(bytestrings), overhauls SRFI 64 (testing), adds JIT support for the<br>
RISC-V architecture, and includes many other improvements.=C2=A0 See the NE=
WS<br>
extract below for full details.<br>
<br>
Here are the compressed sources:<br>
=C2=A0 <a href=3D"https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.gz" rel=3D=
"noreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/guile/gui=
le-3.0.11.tar.gz</a>=C2=A0 =C2=A0(9.6MB)<br>
=C2=A0 <a href=3D"https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.lz" rel=3D=
"noreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/guile/gui=
le-3.0.11.tar.lz</a>=C2=A0 =C2=A0(5.4MB)<br>
=C2=A0 <a href=3D"https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.xz" rel=3D=
"noreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/guile/gui=
le-3.0.11.tar.xz</a>=C2=A0 =C2=A0(5.7MB)<br>
<br>
Here are the GPG detached signatures:<br>
=C2=A0 <a href=3D"https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.gz.sig" re=
l=3D"noreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/guile=
/guile-3.0.11.tar.gz.sig</a><br>
=C2=A0 <a href=3D"https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.lz.sig" re=
l=3D"noreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/guile=
/guile-3.0.11.tar.lz.sig</a><br>
=C2=A0 <a href=3D"https://ftp.gnu.org/gnu/guile/guile-3.0.11.tar.xz.sig" re=
l=3D"noreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/guile=
/guile-3.0.11.tar.xz.sig</a><br>
<br>
Use a mirror for higher download bandwidth:<br>
=C2=A0 <a href=3D"https://www.gnu.org/order/ftp.html" rel=3D"noreferrer nor=
eferrer" target=3D"_blank">https://www.gnu.org/order/ftp.html</a><br>
<br>
Here are the SHA1 checksums:<br>
<br>
3ccecd8e5493d7d1d7db8ac9cb27ac21359f738e=C2=A0 =C2=A0 =C2=A0guile-3.0.11.ta=
r.gz<br>
f3a9c390c8f1364c1e44fff5baf38943a62087d5=C2=A0 =C2=A0 =C2=A0guile-3.0.11.ta=
r.lz<br>
6547ee884a3baae287fdb411cb6661fffa3b9a87=C2=A0 =C2=A0 =C2=A0guile-3.0.11.ta=
r.xz<br>
<br>
and the SHA256 checksums:<br>
<br>
PJwWlypzu3knUvLk8cznIS12ONVJS19+jhnzgZ2/Ohk=C2=A0 guile-3.0.11.tar.gz<br>
DOUxeY8tgMvbJ2STCN6VoalAxzCQS2zzdroExm3FU34=C2=A0 guile-3.0.11.tar.lz<br>
gYx50jZlen+pb7NkE3zHtBs73uDWXGF0ygN2lVlXlGA=C2=A0 guile-3.0.11.tar.xz<br>
<br>
The SHA256 checksum is base64 encoded, instead of the<br>
hexadecimal encoding that most checksum tools default to.<br>
<br>
Use a .sig file to verify that the corresponding file (without the<br>
.sig suffix) is intact.=C2=A0 First, be sure to download both the .sig file=
<br>
and the corresponding tarball.=C2=A0 Then, run a command like this:<br>
<br>
=C2=A0 gpg --verify guile-3.0.11.tar.gz.sig<br>
<br>
If that command fails because you don&#39;t have the required public key,<b=
r>
or that public key has expired, try the following commands to retrieve<br>
or refresh it, and then rerun the &#39;gpg --verify&#39; command.<br>
<br>
=C2=A0 gpg --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5<br>
<br>
As a last resort to find the key, you can try the official GNU<br>
keyring:<br>
<br>
=C2=A0 wget -q <a href=3D"https://ftp.gnu.org/gnu/gnu-keyring.gpg" rel=3D"n=
oreferrer noreferrer" target=3D"_blank">https://ftp.gnu.org/gnu/gnu-keyring=
.gpg</a><br>
=C2=A0 gpg --keyring gnu-keyring.gpg --verify guile-3.0.11.tar.gz.sig<br>
<br>
An extract from NEWS follows.<br>
<br>
* Notable changes<br>
<br>
** Guile supports SRFI-207: String notated bytevectors (bytestrings)<br>
<br>
Guile can now read and write #u8&quot;\xe2;\x88;\x9e; Improbability\n&quot;=
 style<br>
bytestrings when they are enabled by `(read-enable &#39;bytestrings)` and<b=
r>
`(print-enable &#39;bytestrings)` respectively. See &quot;SRFI-207 String-n=
otated<br>
bytevectors&quot; in the info pages for additional information.<br>
<br>
All of the SRFI-207 procedures have also been added, including support<br>
for hex and base64 encoding and decoding.<br>
<br>
** R7RS `cond-expand` now supports `else` (&lt;<a href=3D"https://debbugs.g=
nu.org/71304" rel=3D"noreferrer noreferrer" target=3D"_blank">https://debbu=
gs.gnu.org/71304</a>&gt;)<br>
<br>
** The SRFI-64 module for test suites has been rewritten<br>
<br>
A new, backward-compatible implementation of (srfi srfi-64) has been<br>
contributed by Tomas Volf.=C2=A0 The reference implementation, which was us=
ed<br>
so far, had a number of issues on Guile that made some of its interface<br>
downright unusable (e.g., &lt;<a href=3D"https://bugs.gnu.org/72378" rel=3D=
"noreferrer noreferrer" target=3D"_blank">https://bugs.gnu.org/72378</a>&gt=
;), non-conforming<br>
(e.g., &lt;<a href=3D"https://bugs.gnu.org/72383" rel=3D"noreferrer norefer=
rer" target=3D"_blank">https://bugs.gnu.org/72383</a>&gt;), or buggy (e.g.,=
<br>
&lt;<a href=3D"https://bugs.gnu.org/72372" rel=3D"noreferrer noreferrer" ta=
rget=3D"_blank">https://bugs.gnu.org/72372</a>&gt;).<br>
<br>
* New interfaces and functionality<br>
<br>
** Guile now supports SRFI-197 (Pipeline Operators)<br>
<br>
Guile now provides chain, chain-and, chain-when, chain-lambda, nest, and<br=
>
nest-reverse.<br>
<br>
** Guile now supports SRFI-244 (Multiple-value Definitions)<br>
<br>
Guile now provides syntax &#39;define-values&#39; under the module (srfi<br=
>
srfi-244). This syntax existed for a long time in the core of Guile,<br>
now it is also exported via srfi-244 to help writing portable code.<br>
<br>
** PEG parser<br>
<br>
PEG grammar parser in (ice-9 peg string-peg) has been rewritten to cover<br=
>
all the functionality defined in &lt;<a href=3D"https://bford.info/pub/lang=
/peg.pdf" rel=3D"noreferrer noreferrer" target=3D"_blank">https://bford.inf=
o/pub/lang/peg.pdf</a>&gt;.<br>
<br>
The &#39;not-in-range&#39; pattern was also added to (ice-9 peg); it is<br>
available from PEG strings via &#39;[^...]&#39;.<br>
<br>
** GOOPS: Introduce new forms method* and define-method*<br>
<br>
The module (oop goops) now exports method* and define-method* which are<br>
the counterparts of lambda* and define* in they provide support for<br>
advanced argument handling such as optional and keyword arguments. The<br>
implementation fully supports (next-method) calls, also for keyword<br>
arguments. The new syntax is documented in the Guile Reference manual.<br>
<br>
** (ice-9 rdelim) has new line and field iteration procedures<br>
<br>
(ice-9 rdelim) has three new procedures: for-rdelim-from-port,<br>
for-delimited-from-port and for-line-in-file. Of these, for-line-in-file<br=
>
is helpful in the common situation where you want a procedure applied to<br=
>
every line in a file.<br>
<br>
** Add procedure (%inhibit-welcome-message) to silence the REPL welcome<br>
<br>
If ((@ (system repl repl) %inhibit-welcome-message) #t) is set in<br>
$HOME/.guile, the welcome message in the REPL is suppressed.<br>
<br>
** Improve &#39;load-foreign-library&#39; handling of DLLs<br>
<br>
The non-libltdl load-foreign-library introduced in 3.0.6 does not handle<br=
>
some common cases with libtool-generated DLLs.=C2=A0 It has been updated<br=
>
to search for DLLs that have a version number appended to the name<br>
by libtool, such as libfoo-1.dll.<br>
<br>
Also, it has been updated to do library renaming for MSYS.=C2=A0 On Cygwin,=
<br>
when the #:rename-on-cygwin? option is #t, it already had the capability<br=
>
to search for &quot;libfoo&quot; as &quot;cygfoo.dll&quot;.=C2=A0 It has be=
en updated to add the<br>
capability to search for &quot;libfoo&quot; as &quot;msys-foo.dll&quot; on =
MSYS.<br>
<br>
The load-foreign-library option #:rename-on-cygwin? has been changed to<br>
#:host-type-rename?, and handles both Cygwin and MSYS.<br>
<br>
** Make piped-process and system* available on systems without fork<br>
<br>
Now that piped-process and system* are implemented in terms of<br>
`posix_spawn&#39;, they can be made available on systems without fork().<br=
>
Note that currently Guile does use fork in piped-process to set exit<br>
codes, so piped-process on systems without fork will have a different<br>
behavior with regards to exit codes.<br>
<br>
** MinGW: remove kill, getaffinity, setaffinity, getpriority, and setpriori=
ty<br>
<br>
Now that Guile uses a posix_spawn module, these Win32 emulations of<br>
POSIX functions no longer work.=C2=A0 They relied on Guile keeping an<br>
internal handle-to-pid table, which is not part of the new posix_spawn<br>
code.=C2=A0 They are removed on MinGW.<br>
<br>
** MinGW: waitpid returns ENOSYS if options are non-zero<br>
<br>
When Guile switched to using posix_spawn module, Guile&#39;s Win32 emulatio=
n<br>
of waitpid could no longer emulate ENOHANG.=C2=A0 It relied on Guile keepin=
g<br>
an internal handle-to-pid table.=C2=A0 It now returns ENOSYS on any non-zer=
o<br>
waitpid option.<br>
<br>
** The JIT (lightening) supports the riscv architecture<br>
<br>
* Performance improvements<br>
<br>
** &#39;copy-file&#39; now relies on &#39;sendfile&#39; rather than a read/=
write loop<br>
<br>
** The performance of &#39;letrec&#39; compilation has been improved<br>
<br>
* Miscellaneous improvements<br>
<br>
** Some array function error messages have been improved<br>
<br>
** The psyntax implementation has been improved<br>
<br>
** Many Cygwin/MSYS incompatibilities have been fixed<br>
<br>
* Documentation updates<br>
<br>
** The &#39;-C&#39;, &#39;--rNrs&#39;, and &#39;--language&#39; arguments a=
re now included in &#39;guile(1)&#39;<br>
<br>
** Now documented: &#39;peek&#39;, &#39;pk&#39;, &#39;in-vicinity&#39;, and=
 &#39;use-modules&#39; &#39;#:hide&#39;<br>
<br>
** The way to avoid SXML escaping has been documented<br>
<br>
** SRFI-64 (test suite) documentation has been added<br>
<br>
** &#39;setlocale&#39; now mentions that it raises a &#39;system-error&#39;=
 for missing locales<br>
<br>
* Changes to the distribution<br>
<br>
* Build system changes<br>
<br>
** -Werror=3Darray-bounds is now added to CFLAGS when available<br>
<br>
This catches &lt;<a href=3D"https://bugs.gnu.org/76907" rel=3D"noreferrer n=
oreferrer" target=3D"_blank">https://bugs.gnu.org/76907</a>&gt;<br>
<br>
** Parallel builds should no longer fail due to a missing guile-procedures.=
txt<br>
<br>
** Some sparse file tests are now skipped on Darwin hosts<br>
<br>
While APFS does support sparse files, they behave differently.<br>
<br>
** Guile now compiles with GCC 14 and musl on 32-bit systems<br>
<br>
** Compilation with &#39;-Werror=3Dundef&#39; works again (broken in 3.0.10=
)<br>
<br>
** Some missing, readonly, and typical &#39;copy-file&#39; tests have been =
added<br>
<br>
** The test suite now supports SRFI-64 based tests<br>
<br>
This support should be considered internal for now and subject to<br>
change.<br>
<br>
* Bug fixes<br>
<br>
** `basename` now checks the suffix against the base name, not the full pat=
h<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/69437" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/69437</a>&gt;)<br>
** UTF-8 string hashing no longer risks overrun with empty strings<br>
** test-hashing works again on 32-bit systems<br>
** GUILE-VERSION changes now propagate to .version and relevant Makefiles<b=
r>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/72084" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/72084</a>&gt;)<br>
** Compiler no longer crashes when building Guile on 32-bit platforms<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/71891" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/71891</a>&gt;)<br>
** Compiler no longer crashes when inlining 3.0.9 procedure with kw args<br=
>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/72936" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/72936</a>&gt;)<br>
** Guile is compiled with -fexcess-precision=3Dstandard for i[3456]86 when =
possible<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/43262" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/43262</a>&gt;)<br>
** Fix setjmp/longjmp-related crashes on Windows<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/73167" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/73167</a>&gt;)<br>
** Fix compilation with GCC 14 and musl on 32-bit systems<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/73835" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/73835</a>&gt;)<br>
** Immutable stringbufs are now 8-byte aligned on all systems<br>
=C2=A0 =C2=A0Previously they could end up with an alignment that violated t=
he type<br>
=C2=A0 =C2=A0tag for their type (e.g. ending up tagged as immediates SCM_IM=
P()).<br>
** `readdir` and `ttyname` now release scm_i_misc_mutex during asyncs<br>
=C2=A0 =C2=A0This avoids potential deadlocks.<br>
** Displaying a `port` won&#39;t fail when `ttyname` returns ENODEV<br>
=C2=A0 =C2=A0`ttyname` may return ENODEV even when the port `isatty()`, and=
<br>
=C2=A0 =C2=A0previously Guile would pass through the related exception.=C2=
=A0 Now it<br>
=C2=A0 =C2=A0prints the file descriptor instead (as it does when `ttyname` =
isn&#39;t<br>
=C2=A0 =C2=A0available or the port isn&#39;t a tty).<br>
** Fix build error when cross-compiling to MinGW<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/75642" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/75642</a>&gt;)<br>
** Change &lt;libguile/scm.h&gt; to allow compilation with -Werror=3Dundef<=
br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/75085" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/75085</a>&gt;)<br>
** &#39;all-threads&#39; no longer includes the finalizer thread<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/76343" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/76343</a>&gt;)<br>
=C2=A0 =C2=A0Previously &#39;all-threads&#39; would include the finalizer t=
hread.=C2=A0 This,<br>
=C2=A0 =C2=A0in turn, would trigger warnings from &#39;primitive-fork&#39; =
and &#39;environ&#39;<br>
=C2=A0 =C2=A0suggesting they are being called in a multi-threaded context, =
when in<br>
=C2=A0 =C2=A0fact user code did not create any thread.<br>
** Calling &#39;environ&#39; without arguments in a multi-threaded program =
is OK<br>
=C2=A0 =C2=A0This used to trigger a warning, unduly.<br>
** SRFI-19: &#39;date-&gt;string&#39; converter ~V is now correctly interpr=
eted<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/74841" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/74841</a>&gt;)<br>
** When -flto is enabled configure now adds -ffat-lto-objects if it exists<=
br>
=C2=A0 =C2=A0Otherwise libguile.a can end up with no code.<br>
=C2=A0 =C2=A0<a href=3D"https://lintian.debian.org/tags/no-code-sections.ht=
ml" rel=3D"noreferrer noreferrer" target=3D"_blank">https://lintian.debian.=
org/tags/no-code-sections.html</a><br>
** r6rs-ports.test custom ports tests should no longer fail on stray closes=
<br>
=C2=A0 =C2=A0Previously the custom ports weren&#39;t explicitly closed, cau=
sing<br>
=C2=A0 =C2=A0GC-related closes to produce spurious &quot;log&quot; events i=
n other tests.<br>
** getsockopt no longer risks a buffer overrun with timestamps<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/76907" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/76907</a>&gt;)<br>
** &#39;string-&gt;uri-reference&#39; now allows a trailing &quot;.&quot;<b=
r>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/53201" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/53201</a>&gt;)<br>
** A bug in the Tree-IL verifier&#39;s handling of exact integers has been =
fixed<br>
** The guile-3.0.pc pkg-config file now includes &#39;LIB_GETRANDOM&#39;<br=
>
** &#39;make-custom-port&#39; now handles a &#39;#f&#39; &#39;%default-port=
-encoding&#39;<br>
** Computing the buildstamp invokes &#39;date&#39; more portably<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/26121" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/26121</a>&gt;)<br>
** A C23 incompatibility in libguile/jit.c has been fixed<br>
** &#39;readlink&#39; on Darwin hosts now handles ports correctly<br>
** &#39;pipe&#39; on Darwin hosts now reports &#39;ENOSYS&#39; when flags a=
re provided<br>
=C2=A0 =C2=A0Previously that provoked a &#39;system-error&#39; with a zero =
errno value.<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/72547" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/72547</a>&gt;)<br>
** A numer of test incompatibilities with Darwin hosts have been fixed<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/72547" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/72547</a>&gt;)<br>
** define guile-test as non-declarative because it uses load<br>
** make-struct/no-tail and scm_c_make_structv no longer segfault<br>
=C2=A0 =C2=A0Previously they could if given the standard-vtable-fields, but=
 inital<br>
=C2=A0 =C2=A0values that weren&#39;t compatible with a vtable.<br>
=C2=A0 =C2=A0(&lt;<a href=3D"https://bugs.gnu.org/78789" rel=3D"noreferrer =
noreferrer" target=3D"_blank">https://bugs.gnu.org/78789</a>&gt;)<br>
** &#39;tmpfile&#39; preserves O_CLOEXEC so children won&#39;t prevent remo=
val on exit<br>
** Concurrent &#39;scm_with_guile&#39; invocations no longer risk segfaulti=
ng<br>
=C2=A0 =C2=A0&lt;<a href=3D"https://bugs.gnu.org/79100" rel=3D"noreferrer n=
oreferrer" target=3D"_blank">https://bugs.gnu.org/79100</a>&gt;<br>
** &#39;spawn&#39; should no longer risk segfaulting on at least FreeBSD<br=
>
** A memory leak in &#39;spawn&#39; has been fixed<br>
** Issues preventing &#39;make check&#39; from succeeding on FreeBSD have b=
een fixed<br>
<br>
* Thanks to (at least)<br>
<br>
Adam Faiz, Andrew McNulty, Andy Wingo, Arne Babenhauserheide, Arun<br>
Isaac, Brennan Vincent, Dale P. Smith, Daniel Llorens, Daphne<br>
Preston-Kendal, David Thompson, Ekaitz Zarraga, Francesco<br>
P. Lovergine, Hannes M=C3=BCller, Helmut Eller, Ido Yariv, Jessica Tallon,<=
br>
Jonas Hahnfeld, Juliana Sims, Ludovic Court=C3=A8s, Matthew Wette, Maxim<br=
>
Cournoyer, Michael Gran, Michael K=C3=A4ppler, Mikael Djurfeldt, Morgan<br>
Smith, Natanael Copa, Nikolaos Chatzikonstantinou, No=C3=A9 Lopez, Olivier<=
br>
Dion, Richard Sent, Rob Browning, Simon Josefsson, Taylan Kammer,<br>
Thomas Klausner, Tomas Volf, Werner Lemberg, Yuval Langer, Zheng<br>
Junjie, Zhu Zihao, a aa, and euouae.<br>
<br>
</blockquote></div>

--00000000000072088f0645049e56--