From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Andy Wingo Newsgroups: gmane.lisp.guile.devel,gmane.lisp.guile.user Subject: GNU Guile 3.0.10 released Date: Sun, 23 Jun 2024 23:56:55 +0200 Message-ID: <877cef2uhk.fsf@pobox.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14266"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) To: guile-user@gnu.org, guile-devel@gnu.org, info-gnu@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Sun Jun 23 23:57:23 2024 Return-path: Envelope-to: guile-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sLVD8-0003VG-R1 for guile-devel@m.gmane-mx.org; Sun, 23 Jun 2024 23:57:22 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sLVCs-0004yb-FL; Sun, 23 Jun 2024 17:57:06 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sLVCp-0004yD-LB; Sun, 23 Jun 2024 17:57:03 -0400 Original-Received: from fanzine.igalia.com ([178.60.130.6] helo=fanzine2.igalia.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sLVCm-0005VP-Aa; Sun, 23 Jun 2024 17:57:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-ID: Date:Subject:To:From:Sender:Reply-To:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=b6YTFQNE2wyj8Izo+HR+e2JMDvBC2PQ/xmq6q3JfGrk=; b=EQX85V7sUJIoIkfM1ZYoyayNny HbkK8fG7Jcr5Cq9WvRTVVc6btEdXhJh7pXZqDXdjcCzN0jaMlKm8/zDQyBaC5NOx54hPvJ9nW3hSe TWoMp6i8bcpoVRr9DBpSamQBIGJC4PI7pv5RvIH1YkB2Ml8NXlwybrrcJhJxnXBbV9u3E+Ix9rMVo WkASGVC8fi6yyEzDuRJBeiXMgYrIifhwA1Dh/BFWRKEVDmVXrP1oNcc/5OEeAFdZOaMih7gEvl1Nh IAut2rqPd7gfcmbaIdTM6qBlwajFfpPcuEHQ+g5uzzo2A7OL8TqyHNjuwqXj2nszlxqUKzIOl3Fu+ 371CTNNw==; Original-Received: from [37.67.75.195] (helo=trouble) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1sLVCi-006evr-Gw; Sun, 23 Jun 2024 23:56:56 +0200 Received-SPF: neutral client-ip=178.60.130.6; envelope-from=wingo@pobox.com; helo=fanzine2.igalia.com X-Spam_score_int: -10 X-Spam_score: -1.1 X-Spam_bar: - X-Spam_report: (-1.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, SPF_HELO_NONE=0.001, SPF_NEUTRAL=0.779 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.devel:22463 gmane.lisp.guile.user:19724 Archived-At: 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 uid Andy Wingo uid Andy Wingo 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) =3D> (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 () ** (ice-9 suspendable-ports) incorrect UTF-8 decoding () ** Fix invalid use of 'posix_spawn' on non-glibc systems () ** Adjust 'spawn' test for GNU/Hurd () ** Fix 'system*' with non-file input/output/error port () ** 'spawn' errors out instead of crashing when passed non-file ports () ** Support signal handling child processes after 'primitive-fork' () ** Fix possible deadlock in 'sigaction' (aka. 'scm_sigaction_for_thread') () ** Avoid module resolution in 'call-with-new-thread', which could deadlock () ** Fix deadlock in 'join-thread' when timeout is hit () ** 'read-u8' in (scheme base) now defaults to (current-input-port) () ** Second argument of 'unread-string' is now optional, as previously docume= nted () ** 'ftw' now correctly deals with directory permissions () ** '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 () ** 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 () Hearty thanks to Arne Babenhauserheide, Arsen Arsenovi=C4=87, 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=C3=A4ppler, Mikael Djurfeldt, Morgan Smith, Nikita Domnitskii, Olivier Dion, Rob Browning, Taylan Kammer, Timothy Sample, Tomas Volf, Tony Garnock-Jones, and =E7=84=A1=E7=84=A1for their patches and bug reports.