[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: GNU Guile 3.0.10 released
From: |
Nala Ginrut |
Subject: |
Re: GNU Guile 3.0.10 released |
Date: |
Wed, 26 Jun 2024 09:39:52 +0900 |
Congrats! Thanks to all!
On Wed, Jun 26, 2024, 03:18 Zelphir Kaltstahl <zelphirkaltstahl@posteo.de>
wrote:
> Thanks to all contributors for your work!
>
> Exciting to see Guile improving!
>
> On 23.06.24 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.
> >
> --
> repositories: https://notabug.org/ZelphirKaltstahl
>
>
>