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)">** 'setlocale' now mentions that it ra= ises a 'system-error' 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>> 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 "SRFI 197= :<br> Pipeline Operators" and "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'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 'gpg --verify' 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"\xe2;\x88;\x9e; Improbability\n"= style<br> bytestrings when they are enabled by `(read-enable 'bytestrings)` and<b= r> `(print-enable 'bytestrings)` respectively. See "SRFI-207 String-n= otated<br> bytevectors" 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` (<<a href=3D"https://debbugs.g= nu.org/71304" rel=3D"noreferrer noreferrer" target=3D"_blank">https://debbu= gs.gnu.org/71304</a>>)<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., <<a href=3D"https://bugs.gnu.org/72378" rel=3D= "noreferrer noreferrer" target=3D"_blank">https://bugs.gnu.org/72378</a>>= ;), non-conforming<br> (e.g., <<a href=3D"https://bugs.gnu.org/72383" rel=3D"noreferrer norefer= rer" target=3D"_blank">https://bugs.gnu.org/72383</a>>), or buggy (e.g.,= <br> <<a href=3D"https://bugs.gnu.org/72372" rel=3D"noreferrer noreferrer" ta= rget=3D"_blank">https://bugs.gnu.org/72372</a>>).<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 'define-values' 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 <<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>>.<br> <br> The 'not-in-range' pattern was also added to (ice-9 peg); it is<br> available from PEG strings via '[^...]'.<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 'load-foreign-library' 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 "libfoo" as "cygfoo.dll".=C2=A0 It has be= en updated to add the<br> capability to search for "libfoo" as "msys-foo.dll" 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', 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'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> ** 'copy-file' now relies on 'sendfile' rather than a read/= write loop<br> <br> ** The performance of 'letrec' 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 '-C', '--rNrs', and '--language' arguments a= re now included in 'guile(1)'<br> <br> ** Now documented: 'peek', 'pk', 'in-vicinity', and= 'use-modules' '#:hide'<br> <br> ** The way to avoid SXML escaping has been documented<br> <br> ** SRFI-64 (test suite) documentation has been added<br> <br> ** 'setlocale' now mentions that it raises a 'system-error'= 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 <<a href=3D"https://bugs.gnu.org/76907" rel=3D"noreferrer n= oreferrer" target=3D"_blank">https://bugs.gnu.org/76907</a>><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 '-Werror=3Dundef' works again (broken in 3.0.10= )<br> <br> ** Some missing, readonly, and typical 'copy-file' 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(<<a href=3D"https://bugs.gnu.org/69437" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/69437</a>>)<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(<<a href=3D"https://bugs.gnu.org/72084" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/72084</a>>)<br> ** Compiler no longer crashes when building Guile on 32-bit platforms<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/71891" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/71891</a>>)<br> ** Compiler no longer crashes when inlining 3.0.9 procedure with kw args<br= > =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/72936" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/72936</a>>)<br> ** Guile is compiled with -fexcess-precision=3Dstandard for i[3456]86 when = possible<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/43262" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/43262</a>>)<br> ** Fix setjmp/longjmp-related crashes on Windows<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/73167" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/73167</a>>)<br> ** Fix compilation with GCC 14 and musl on 32-bit systems<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/73835" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/73835</a>>)<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'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't<br> =C2=A0 =C2=A0available or the port isn't a tty).<br> ** Fix build error when cross-compiling to MinGW<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/75642" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/75642</a>>)<br> ** Change <libguile/scm.h> to allow compilation with -Werror=3Dundef<= br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/75085" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/75085</a>>)<br> ** 'all-threads' no longer includes the finalizer thread<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/76343" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/76343</a>>)<br> =C2=A0 =C2=A0Previously 'all-threads' would include the finalizer t= hread.=C2=A0 This,<br> =C2=A0 =C2=A0in turn, would trigger warnings from 'primitive-fork' = and 'environ'<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 'environ' without arguments in a multi-threaded program = is OK<br> =C2=A0 =C2=A0This used to trigger a warning, unduly.<br> ** SRFI-19: 'date->string' converter ~V is now correctly interpr= eted<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/74841" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/74841</a>>)<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't explicitly closed, cau= sing<br> =C2=A0 =C2=A0GC-related closes to produce spurious "log" events i= n other tests.<br> ** getsockopt no longer risks a buffer overrun with timestamps<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/76907" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/76907</a>>)<br> ** 'string->uri-reference' now allows a trailing "."<b= r> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/53201" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/53201</a>>)<br> ** A bug in the Tree-IL verifier's handling of exact integers has been = fixed<br> ** The guile-3.0.pc pkg-config file now includes 'LIB_GETRANDOM'<br= > ** 'make-custom-port' now handles a '#f' '%default-port= -encoding'<br> ** Computing the buildstamp invokes 'date' more portably<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/26121" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/26121</a>>)<br> ** A C23 incompatibility in libguile/jit.c has been fixed<br> ** 'readlink' on Darwin hosts now handles ports correctly<br> ** 'pipe' on Darwin hosts now reports 'ENOSYS' when flags a= re provided<br> =C2=A0 =C2=A0Previously that provoked a 'system-error' with a zero = errno value.<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/72547" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/72547</a>>)<br> ** A numer of test incompatibilities with Darwin hosts have been fixed<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/72547" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/72547</a>>)<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't compatible with a vtable.<br> =C2=A0 =C2=A0(<<a href=3D"https://bugs.gnu.org/78789" rel=3D"noreferrer = noreferrer" target=3D"_blank">https://bugs.gnu.org/78789</a>>)<br> ** 'tmpfile' preserves O_CLOEXEC so children won't prevent remo= val on exit<br> ** Concurrent 'scm_with_guile' invocations no longer risk segfaulti= ng<br> =C2=A0 =C2=A0<<a href=3D"https://bugs.gnu.org/79100" rel=3D"noreferrer n= oreferrer" target=3D"_blank">https://bugs.gnu.org/79100</a>><br> ** 'spawn' should no longer risk segfaulting on at least FreeBSD<br= > ** A memory leak in 'spawn' has been fixed<br> ** Issues preventing 'make check' 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--