guile-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: GNU Guile 3.0.10 released


From: Linus Björnstam
Subject: Re: GNU Guile 3.0.10 released
Date: Mon, 24 Jun 2024 11:54:08 +0200
User-agent: Cyrus-JMAP/3.11.0-alpha0-522-ga39cca1d5-fm-20240610.002-ga39cca1d

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 <wingo@pobox.com>
>   uid   Andy Wingo <wingo@igalia.com>
>   uid   Andy Wingo <wingo@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-guile@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.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]