What a wonderful release! High fives all around! Since I got a other kid I have only really done 2 things, a little bit of goof loop (https://git.sr.ht/~bjoli/goof-loop) and the patch to make define valid in more situations. I didn't even know it was merged, but I am glad I was able to contribute something :)
Best regards Linus Björnstam On Sun, 23 Jun 2024, at 23:56, Andy Wingo wrote: > We are pleased to announce GNU Guile release 3.0.10, the latest in the > 3.0 stable release series. > > Guile 3.0.10 is a bug-fix release which also adds optimizations, support > for a new WebAssembly back-end, new custom port facilities, a new > optional front-end syntax, and more. See the NEWS extract at the end of > the mail for full details. > > Here are the compressed sources: > ftp://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.gz (9.3MB) > ftp://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.lz (5.3MB) > ftp://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.xz (5.6MB) > > Here are the GPG detached signatures: > ftp://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.gz.sig > ftp://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.lz.sig > ftp://ftp.gnu.org/gnu/guile/guile-3.0.10.tar.xz.sig > > Use a mirror for higher download bandwidth: > https://www.gnu.org/order/ftp.html > > Here are the SHA1 and SHA256 checksums: > > ca52ff876b8552b6f8f70231cc33ef7cbcc4a95f guile-3.0.10.tar.gz > Lb28l1mLL68xATVk77SOT+1EEx0o6ZbCar6KWyO1bCo guile-3.0.10.tar.gz > 105a99a0771d7371502b529b762abe18d729930e guile-3.0.10.tar.lz > 8Nl8zPUG5LYQTFFjm9G3v2dADgs0AfCy9rcTZTIEAyc guile-3.0.10.tar.lz > e95e37f681dae692de52242929cbc7092eef3eb4 guile-3.0.10.tar.xz > vXFoUX/VJjM0RtT3q4FlJ5JWNAlPvTcyLhfiuNjnY4g guile-3.0.10.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.10.tar.gz.sig > > The signature should match the fingerprint of the following key: > > pub rsa4096 2017-08-09 [SC] > 4FD4 D288 D445 934E 0A14 F9A5 A880 3732 E443 6885 > uid Andy Wingo <wi...@pobox.com> > uid Andy Wingo <wi...@igalia.com> > uid Andy Wingo <wi...@gnu.org> > > 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 4FD4D288D445934E0A14F9A5A8803732E4436885 > > 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.10.tar.gz.sig > > > This release was bootstrapped with the following tools: > Autoconf 2.71 > Automake 1.16.5 > Libtool 2.4.7 > Gnulib v0.1-4855-g8f4538a53d > Makeinfo 7.1 > > An extract from NEWS follows. > > > * Notable changes > > ** Beginnings of support for alternate back-ends > > A number of adaptations and additions of as-yet unstable interfaces have > been made to allow third-party projects such as the Hoot > Guile-to-WebAssembly whole-program compiler > (https://spritely.institute/hoot/) to use the Guile front-end and > optimizer. Depending on how Hoot development goes, we may consider > adding first-class support for WebAssembly as a compilation target; > discussion is welcome on the guile-devel mailing list. > > ** `define` in all bodies > > `define` adds a definition to the body in which it appears, as if each > non-tail definition or expression in that body were a binding in a > surrounding `letrec*` clause. However, in some places, using `define` > would result in the annoying error "definition in expression context, > where definitions are not allowed", which could be fixed by explicitly > adding a surrounding binding contour, for example an empty `let`. This > was because there was no implicit surrounding lexical binding contour > for the body of `when` and `unless`, for `cond` clauses, `case` clauses, > `and-let*` bodies, and `with-fluids`. But no more; now these contexts > now create a binding contour, allowing the use of `define`. > > ** Two bug fixes of note regarding scoping of top-level variables > > Previously, a reference to a top-level variable in a module other than > the current module would be silently rewritten to reference the current > module, if the variable was unbound in its original module. This was a > hack from the early days of when we extended psyntax to know about the > module system, and is now fixed to properly use the scope of the > introduced binding instead of the scope of the macro use site. > > Also, embarrassingly, sometimes macro-introduced top-level variables > would use the same generated name. This is because of the strategy > discussed in the manual, "Hygiene and the Top-Level"; sometimes the > hashes would collide, for example if two definitions were the same in > the beginning and only differed long into the end. This has been fixed > to ensure name uniqueness. > > * New interfaces and functionality > > ** R6RS custom textual ports > > Guile finally supports this venerable R6RS interface; see "Custom Ports" > in the manual for more. These ports are suspendable (see "Non-Blocking > I/O"). Also new in this release, custom binary ports are now > suspendable as well. > > ** New "soft port" interface > > Instead of using R6RS custom textual ports, we recommend the new "soft > ports" facility, because it is easier to use while also being more > expressive. See "Soft Ports" in the manual for more details. > > Soft ports are implemented by the new module `(ice-9 soft-ports)`. > There is a legacy "soft ports" facility exported by `(guile)` which will > be deprecated at some point. > > ** New "custom port" facility: (ice-9 custom-ports) > > Custom ports are like R6RS custom binary ports, but lower-level, having > access to all of Guile's internal port API. See "Custom Ports" in the > manual. > > ** New surface syntax: Wisp (SRFI-119) > > Guile now includes SRFI-119, commonly referred to as Wisp (for > "Whitespace for Lisp"), a Pythonesque surface syntax for Scheme where > parentheses are replaced by equivalent indentation. See SRFI-119 in the > manual. > > ** New warning: unused-module > > This analysis, enabled at `-W2', issues warnings for modules that appear > in a `use-modules' form or as a #:use-module clause of `define-module', > and whose bindings are unused. This is useful to trim the list of > imports of a module. > > In some cases, the compiler cannot conclude whether a module is > definitely unused---this is notably the case for modules that are only > used at macro-expansion time, such as (srfi srfi-26). In those cases, > the compiler reports it as "possibly unused". > > ** New documentation on inline procedure property declarations > > Did you know that you can annotate procedures with properties? It goes > like this: > > (define (frobnicate) > #((fruits . (apple banana))) > (whatever)) > (procedure-property frobnicate 'fruits) => (apple banana) > > Now you know, and now it is documented in "Procedure Properties" in the > manual. It has been this way since at Guile 2.0, but was never > documented before. > > ** New procedure annotation: maybe-unused > > The utility of the `-Wunused-toplevel` warning, enabled at `-W2`, has > historically been somewhat limited, especially when a macro generates a > number of bindings, not all of which may be used. To produce more > useful results, we now allow procedures to set the `maybe-unused` > property, which if true will not result in unused-toplevel warnings. > This property is set by `define-inlinable`, in case an inline binding > never needs the procedure-as-value definition. > > ** New exports from `(system foreign)`: read-c-struct, write-c-struct > > See "Foreign Structs" in the manual. These macros are like the older > `parse-c-struct` / `make-c-struct` procedures, but they are more > efficient because they inline the field accesses and don't deal in > lists. > > ** Wider backtraces when not writing to a terminal > > When writing a backtrace, if the output port is not a terminal, Guile > truncates the lines at 500 characters instead of 80. Override this > width via the `default-frame-width` parameter exported by the `(system > repl debug)` module. > > ** copy-file now supports copy-on-write > > The copy-file procedure now takes an additional keyword argument, > #:copy-on-write, specifying whether copy-on-write should be done, if the > underlying file-system supports it. Possible values are 'always, 'auto > and 'never, with 'auto being the default. > > This speeds up copying large files a lot while saving the disk space. > > ** 'seek' can now navigate holes in sparse files > > On systems that support it, such as GNU/Linux, the new SEEK_DATA and > SEEK_HOLE values can now be passed to the 'seek' procedure to change > file offset to the next piece of data or to the next hole in sparse > files. See "Random Access" in the manual for details. > > ** ((scm foreign-object) make-foreign-object-type) now supports #:super > > A list of superclasses can now be provided via #:super. > > ** 'get-bytevector-all' is now written in Scheme and is thus suspendable > > The 'get-bytevector-all' procedure from (rnrs io ports) and (ice-9 > binary-port) used to be implemented in C, making it non-suspendable--a > bummer for programs using suspendable ports and Fibers. It has been > rewritten in Scheme, addressing this limitation. > > * Performance improvements > > ** Better compilation of calls to procedures with keyword arguments > > Calls to keyword-arg functions can now be inlined. Even when not > inlined, sometimes now we can compute default values for missing > keywords at the callee instead of in the caller. > > ** Better compilation of append with more than 2 arguments > ** Better compilation logand with one immediate argument > ** Better type inference for result of symbol-hash > ** Elide effect-free primitive calls when called for effect > ** Constant folding for string->utf8 > ** JIT improvements for rarely-used push/pop/drop > ** Better type inference for numeric tower predicates > ** Better compilation for calls to raise-exception > ** Smaller disk usage via sparse binary files > > * New deprecations > > ** (ice-9 lineio) > > Use read-line together with unread-string instead. > > * Changes to the distribution > > ** Parallel test driver for Guile unit tests > > Guile's internal unit test harness is now compatible with Automake's > parallel test driver, allowing `make check -j20` to use 20 cores, if you > have them. Send any bug reports to bug-gu...@gnu.org. > > * Bug fixes > > ** Fix incorrect comparison between exact and inexact numbers > (<https://debbugs.gnu.org/69725>) > ** (ice-9 suspendable-ports) incorrect UTF-8 decoding > (<https://bugs.gnu.org/62290>) > ** Fix invalid use of 'posix_spawn' on non-glibc systems > (<https://bugs.gnu.org/61095>) > ** Adjust 'spawn' test for GNU/Hurd > (<https://bugs.gnu.org/62501>) > ** Fix 'system*' with non-file input/output/error port > (<https://bugs.gnu.org/63024>) > ** 'spawn' errors out instead of crashing when passed non-file ports > (<https://bugs.gnu.org/61073>) > ** Support signal handling child processes after 'primitive-fork' > (<https://bugs.gnu.org/68087>) > ** Fix possible deadlock in 'sigaction' (aka. 'scm_sigaction_for_thread') > (<https://bugs.gnu.org/64666>) > ** Avoid module resolution in 'call-with-new-thread', which could deadlock > (<https://bugs.gnu.org/62691>) > ** Fix deadlock in 'join-thread' when timeout is hit > (<https://bugs.gnu.org/55356>) > ** 'read-u8' in (scheme base) now defaults to (current-input-port) > (<https://bugs.gnu.org/62690>) > ** Second argument of 'unread-string' is now optional, as previously > documented > (<https://bugs.gnu.org/67063>) > ** 'ftw' now correctly deals with directory permissions > (<https://bugs.gnu.org/55344>) > ** 'make-custom-port' now honors its #:conversion-strategy argument > ** 'eval-string' respects #:column (previously it was set to the #:line) > ** 'string->date' now allows a colon in the ISO 8601 zone offset > ** 'system*' no longer fiddles with the process' signal handlers > (<https://bugs.gnu.org/70144>) > ** Fix bug with JIT of atomic swap on AArch64 > (https://github.com/wingo/fibers/issues/83) > ** Fix exception dispatch for exceptions thrown within pre-unwind > handlers > ** Fix error computing backtrace when call-with-values on stack > ** Fix r7rs string-for-each to stop when any string runs out of chars > ** Hashing of UTF-8 symbols with non-ASCII characters avoids corruption > (<https://bugs.gnu.org/56413>) > > Hearty thanks to Arne Babenhauserheide, Arsen Arsenović, Bruno Victal, > Christopher Baines, Daniel Llorens, Denis 'GNUtoo' Carikli, Ekaitz > Zarraga, Jonas Hahnfeld, Jorge Gomez, Josselin Poiret, Juliana Sims, > Linus Bjornstam, Luke Nihlen, Maxim Cournoyer, Michael Gran, Michael > Käppler, Mikael Djurfeldt, Morgan Smith, Nikita Domnitskii, Olivier > Dion, Rob Browning, Taylan Kammer, Timothy Sample, Tomas Volf, Tony > Garnock-Jones, and 無無for their patches and bug reports.