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.sources,gmane.lisp.guile.user,gmane.lisp.guile.devel Subject: GNU Guile 3.0.8 released Date: Fri, 11 Feb 2022 08:47:48 +0100 Message-ID: <87zgmxn8t7.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="17274"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/27.1 (gnu/linux) To: guile-user@gnu.org, guile-sources@gnu.org, guile-devel@gnu.org, info-gnu@gnu.org Original-X-From: guile-sources-bounces+guile-sources=m.gmane-mx.org@gnu.org Fri Feb 11 08:48:40 2022 Return-path: Envelope-to: guile-sources@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 1nIQfX-0004N8-PR for guile-sources@m.gmane-mx.org; Fri, 11 Feb 2022 08:48:39 +0100 Original-Received: from localhost ([::1]:39040 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nIQfW-0006A4-1s for guile-sources@m.gmane-mx.org; Fri, 11 Feb 2022 02:48:38 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:55572) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nIQf4-00067L-8t; Fri, 11 Feb 2022 02:48:11 -0500 Original-Received: from fanzine2.igalia.com ([213.97.179.56]:40846) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nIQez-0000bL-U4; Fri, 11 Feb 2022 02:48:09 -0500 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=YMhy7ORLOk5ajt4LwecDAMDYR5/xIcGMEQfRK5yWC7I=; b=KYoPI7X/FmTKfgy23ZiAGG25XT K0G8EKgR223vXU2Dzw1hVscALGWzxPUHn5aLKbik5pjMd6NnypzXyH+FcQJAw5gDS8jB81mq94djk P8Lxnv1kahQ6QljKgl7Z4YD3l99OGa0w6clbL5wpyFqIIgTcKOZx17y4DpSU6cIZBZSI7dIDAIhIT 6mYMgSRm2ejuLaYyMosazoP767kMwjtPQOBBbl75pZ5idVKPKSAGWFoOF/gvFZNIBBF5fyVpZL1N8 KBLFn9n/PybdSDf9XUtlw7Pr114vY/gyNWpuWaDBuEzTZWxV6NIeWWeGDAqupheU6+oc+HVy8AAZE vceAxptQ==; Original-Received: from 162.156.15.93.rev.sfr.net ([93.15.156.162] helo=sparrow) by fanzine2.igalia.com with esmtpsa (Cipher TLS1.3:ECDHE_SECP256R1__RSA_PSS_RSAE_SHA256__AES_256_GCM:256) (Exim) id 1nIQeu-000AhA-0x; Fri, 11 Feb 2022 08:48:00 +0100 Original-From: Andy Wingo Received-SPF: neutral client-ip=213.97.179.56; 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, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: guile-sources@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Guile source code postings and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-sources-bounces+guile-sources=m.gmane-mx.org@gnu.org Original-Sender: "guile-sources" Xref: news.gmane.io gmane.lisp.guile.sources:595 gmane.lisp.guile.user:18070 gmane.lisp.guile.devel:21090 Archived-At: We are delighted to announce GNU Guile release 3.0.8, the latest in the 3.0 stable release series. The Guile 3.0.8 release mixes maintenance and optimizations that were landed since the previous 3.0.7 stable release in May 2021. See the NEWS extract at the end of the mail for full details. Compared to the previous stable series (2.2.x), Guile 3.0 adds support for just-in-time native code generation, speeding up all Guile programs. The Guile web page is located at http://gnu.org/software/guile/, and among other things, it contains a copy of the Guile manual and pointers to more resources. Guile is an implementation of the Scheme programming language, packaged for use in a wide variety of environments. In addition to implementing the R5RS, R6RS, and R7RS Scheme standards, Guile includes full access to POSIX system calls, networking support, multiple threads, dynamic linking, a foreign function call interface, powerful string processing, and HTTP client and server implementations. Guile can run interactively, as a script interpreter, and as a Scheme compiler to VM bytecode. It is also packaged as a library so that applications can easily incorporate a complete Scheme interpreter/VM. An application can use Guile as an extension language, a clean and powerful configuration language, or as multi-purpose "glue" to connect primitives provided by the application. It is easy to call Scheme code from C code and vice versa. Applications can add new functions, data types, control structures, and even syntax to Guile, to create a domain-specific language tailored to the task at hand. Guile 3.0.8 can be installed in parallel with Guile 2.2.x; see http://www.gnu.org/software/guile/manual/html_node/Parallel-Installations.h= tml. A more detailed NEWS summary follows these details on how to get the Guile sources. Here are the compressed sources: http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.lz (6MB) http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.xz (6MB) http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.gz (10MB) Here are the GPG detached signatures[*]: http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.lz.sig http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.xz.sig http://ftp.gnu.org/gnu/guile/guile-3.0.8.tar.gz.sig Use a mirror for higher download bandwidth: http://www.gnu.org/order/ftp.html Here are the SHA256 checksums: 96f5263f89dda2d757fe1129e489e672f5a0b7540ee6710ec7ef352120d8af52 guile-3= .0.8.tar.lz daa7060a56f2804e9b74c8d7e7fe8beed12b43aab2789a38585183fcc17b8a13 guile-3= .0.8.tar.xz f25ae0c26e911af1b5005292d4f56621879f74d6958b30741cf67d8b6feb2016 guile-3= .0.8.tar.gz [*] 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.8.tar.gz.sig If that command fails because you don't have the required public key, then run this command to import it: gpg --keyserver keys.gnupg.net --recv-keys 4FD4D288D445934E0A14F9A5A88037= 32E4436885 and rerun the 'gpg --verify' command. This release was bootstrapped with the following tools: Autoconf 2.71 Automake 1.16.2 Libtool 2.4.6 Gnulib v0.1-4855-g8f4538a53d Makeinfo 6.7 An extract from NEWS follows. Changes in 3.0.8 (since 3.0.7): * Notable changes ** Cross-module inlining Although historically Guile has treated modules as glorified hash tables, most modules are actually _declarative_ -- they just define functions and variables and provide them for other modules to use, and don't manipulate modules as first-class objects. See "Declarative Modules" in the manual, for more discussion. Since version 3.0.0, Guile has taken advantage of declarative semantics to allow a top-level definition to be inlined within its uses in the same compilation unit, provided the binding is never assigned and defined exactly once. Guile 3.0.8 extends this to allow some exported declarative definitions to be inlined into other modules. This facility is mostly transparent to the user and is enabled at the default -O2 optimization level. "Small" definitions are available for cross-module inlining (-Oinlinable-exports, included at -O2). The actual inlining decision is performed by Guile's partial evaluation pass (the -Ocross-module-inlining modifier to -Opeval, included at -O2 also), subject to effort and size growth counters. Note however that as with macros, when a definition changes in module A, a separately compiled module B that uses that definition doesn't automatically get recompiled. This is a limitation in Guile that we would like to fix. As another limitation, cross-module inlining is only available for imports from modules which have already been compiled at -O2 (or otherwise with -Oinlinable-exports). When determining whether to enable this facility by default, we weighed the usability problems of stale inlined bindings against the benefit of allowing module boundaries to no longer be optimization boundaries, we ended up on the "let's do it!" side of the equation. However we welcome feedback from users as to what should be the default behavior, until such a time as we have a proper notion of when a compiled file is stale or not. ** Avoid the need for a custom GMP allocator In Guile 3.0.6, we fixed a longstanding bug in Guile's use of the library that Guile uses to implement bignums (large integers), GMP (https://gmplib.org). See the Guile 3.0.6 release notes. However this left us with a suboptimal Guile, in which each large integer had to have a finalizer to free the memory allocated by GMP. Finalizers take time and space, and so they limit allocation rate, causing bignum performance to drop. Though you could set an environment variable to go back to the older, faster behavior, it wasn't the default. In Guile 3.0.8 we fix this problem comprehensively by avoiding embedding GMP's mpz_t values in Guile bignums. Instead we embed the bignum digits directly, avoiding the need for finalizers or custom allocators. This removes the need for the GUILE_INSTALL_GMP_MEMORY_FUNCTIONS environment variable mentioned in the Guile 3.0.6 release notes. We also deprecate the scm_install_gmp_memory_functions variable. * New interfaces and functionality ** Typed vector copy functions in (srfi srfi-4 gnu) The functions `u8vector-copy' `s8vector-copy' `u16vector-copy' `s16vector-copy' `u32vector-copy' `s32vector-copy' `u64vector-copy' `s64vector-copy' `f32vector-copy' `f64vector-copy' `c32vector-copy' `c64vector-copy' `u8vector-copy!' `s8vector-copy!' `u16vector-copy!' `s16vector-copy!' `u32vector-copy!' `s32vector-copy!' `u64vector-copy!' `s64vector-copy!' `f32vector-copy!' `f64vector-copy!' `c32vector-copy!' `c64vector-copy!' have been added. See SRFI-4 - Guile extensions" in the manual. ** New function srfi-4-vector-type-size in (srfi srfi-4 gnu) See SRFI-4 - Guile extensions" in the manual. ** `bytevector-fill!' supports partial fill through optional arguments This is an extension to the r6rs procedure. See "Manipulating Bytevectors" in the manual. ** `vector-copy!' and `vector-copy' from (rnrs base) included in core Compared to the previous versions, these accept range arguments. See "Accessing and Modifying Vector Contents" in the manual. ** New function bitvector-copy See "Bit vectors" in the manual. ** (system foreign) supports C99 complex types The types `complex-float' and `complex-double' stand for C99 `float _Complex' and `double _Complex` respectively. * Other new optimizations ** Better optimization of "let" in right-hand-side of "letrec" ** Allow constant-folding for calls to "expt" Thanks to Maxime Devos. ** Add ,optimize-cps REPL meta-command =20=20=20=20 This meta-command is like ,optimize, but at a lower level. ** Improve alias analysis in common subexpression elimination ** Avoid argument-count checks for well-typed calls to known procedures This speeds up calls to lexically bound procedures. ** Avoid return-value-count checks for calls to known-return-arity procedur= es This new optimization, enabled at -O2, speeds up returns from calls to lexically bound procedures. * Build system changes ** Update Gnulib (bugs.gnu.org/49930) Update gnulib to 8f4538a53d64054ae2fc8b86c0f87c418c6176e6. =20=20=20=20 ** Compile libguile with -flto if available By default, if the compiler supports link-time optimization via the -flto flag, Guile will add it to CFLAGS. This results in a libguile that is approximately 15% smaller. Pass --disable-lto to configure to inhibit this behavior. ** Trim set of prebuilt .go files shipped in the tarball Guile includes built Scheme files in its tarball to speed up the build, for casual builders that are less concerned with reproducibility. However they took a lot of space and we have now trimmed these down to a more minimal set. As always, you can remove them and build entirely from source via a `make -C prebuilt clean`. * New deprecations ** Vector functions require vector arguments Passing arrays that are not vectors (arrays for which `(vector? array)' returns false) to functions `vector-move-left!', `vector-move-right!', `vector->list', and `vector-copy' is deprecated. Use `array-copy!', `array-copy', and `array->list' for such arguments. ** `scm_from_contiguous_typed_array' is deprecated This function was added during the Guile 2.x series and was not documented and is no longer used in Guile itself. ** Deprecate the "simple vector" concept, `scm_is_simple_vector' This concept meant to indicate "vectors which aren't array slices". Use scm_is_vector. ** Deprecate internal contiguous array flag We still reserve space for the flag to preserve ABI but it has no effect. As such we also remove the internal SCM_I_ARRAY_CONTIGUOUS, SCM_SET_ARRAY_CONTIGUOUS_FLAG, SCM_CLR_ARRAY_CONTIGUOUS_FLAG, SCM_I_ARRAY_CONTP preprocessor interfaces, as they were internal and there is no longer a sensible way of using them. ** Deprecate symbol properties Symbols used to have a "function slot" and a "property slot", inherited from Emacs Lisp and early Lisps, which one would access with 'symbol-pref', 'symbol-fref', 'symbol-pset!', and 'symbol-fset!'. These procedures have been discouraged in favor of object properties; they are now deprecated. This saves a few words of memory per symbol. * Bug fixes ** Fix compilation of (ash x N), where N is a literal, at -O1 and below ** Texinfo and XML parsers are now thread-safe (bugs.gnu.org/51264) ** Fix `filename-completion-function' in (ice-9 readline) ** Fix trace-calls-to-procedure (bugs.gnu.org/43102, bugs.gnu.org/48412) ** Fix bug in nftw function (bugs.gnu.org/44182) ** Fix optimization bug in CSE in eq-constant? if both branches same ** Fix readline initialization with invalid keymaps ** Fix crash when reading #nil (bugs.gnu.org/49305) ** Fix read error when reading #{}}#. ** Fix Darwin host detection in foreign-library facility. ** Fix unification of (x ...) patterns in `match' ** Fix scaling floats with leading zeroes in `format' ** Improve support for r7rs-style `(srfi N)' and r6rs-style `(srfi :N) module names (bugs.gnu.org/39601, bugs.gnu.org/40371) ** Add support for the ARC architecture (bugs.gnu.org/48816) ** Build fix for const strerror result (bugs.gnu.org/43987) ** Fix typos in SRFI documentation (bugs.gnu.org/50127) ** Fix bounds check in `recvfrom!' (bugs.gnu.org/45595) ** Add support for riscv32 ** Limit `ash' to left-shift by 2^32 bits (bugs.gnu.org/48150) ** Fix type confusion in heap-numbers-equal? calls from VM =20=20=20=20 Hearty thanks to Jakub Wojciech, Robin Green, Daniel Llorens, Matija Obid, RhodiumToad, Rob Browning, Maxime Devos, Aleix Conchillo Flaqu=C3=A9, Timothy Sample, d4ryus, Fabrice Fontaine, Taylan Kammer, Vineet Gupta, Philipp Klaus Krause, Arun Isaac, and Alex Shinn.