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.6 released Date: Wed, 28 Apr 2021 09:17:28 +0200 Message-ID: <87lf92op2v.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="11579"; 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 Wed Apr 28 09:17:56 2021 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 1lbeSJ-0002sy-U1 for guile-sources@m.gmane-mx.org; Wed, 28 Apr 2021 09:17:56 +0200 Original-Received: from localhost ([::1]:57588 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lbeSJ-0005Am-0l for guile-sources@m.gmane-mx.org; Wed, 28 Apr 2021 03:17:55 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:43288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lbeSD-00059o-GG; Wed, 28 Apr 2021 03:17:49 -0400 Original-Received: from fanzine.igalia.com ([178.60.130.6]:33970) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lbeSA-0006IR-7n; Wed, 28 Apr 2021 03:17:49 -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; bh=yXns2M202U2eLYfNI90tONvAiqBoBwHiDzW2rUYuZhg=; b=JHUgHNsngs3wXjXuG6ckRtcYFMEDGDSxCcTM9CYNa68OILogGfq6ukNzK12rY7Rx9lmy0W25h7DrK+rI3jJk73b9D8pC2PyFXLyojmTrVo14cIykB4Y40AL8DS9xDbkOXFnUXjHhyuVCT2vW3sOtrni3b9sjFB1qGn3kMUvCHHT9kM7avKfyPBOuph3pRTHtEejTgAaERCE/Pqns0rD3lxbEnpEWJNcmsBBuo1dIkAjoJXYWOcec/Cdv9hD68FyE3lUWPSVoPrN0BX15bP6myNJ14wmyIN9RkhbVbZl0qvUcGaemixcEig2kna6e+MWQbKqyA8MXWAIpXe9J5j4QfQ==; Original-Received: from 82-65-63-215.subs.proxad.net ([82.65.63.215] helo=sparrow) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1lbeS2-0005Xj-V6; Wed, 28 Apr 2021 09:17:39 +0200 Received-SPF: neutral client-ip=178.60.130.6; envelope-from=wingo@pobox.com; helo=fanzine.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-sources@gnu.org X-Mailman-Version: 2.1.23 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:576 gmane.lisp.guile.user:17463 gmane.lisp.guile.devel:20756 Archived-At: We are pleased to announce GNU Guile release 3.0.6, the latest in the 3.0 stable release series. Compared to the previous release in the 3.0 series, Guile 3.0.6 improves source-location information for compiled code, removes the dependency on libltdl, fixes some important bugs, adds an optional bundled "mini-gmp" library, as well as the usual set of minor optimizations and bug fixes. 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. See the NEWS extract at the end of the mail for full details. 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.6 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.6.tar.lz (10MB) http://ftp.gnu.org/gnu/guile/guile-3.0.6.tar.xz (13MB) http://ftp.gnu.org/gnu/guile/guile-3.0.6.tar.gz (21MB) Here are the GPG detached signatures[*]: http://ftp.gnu.org/gnu/guile/guile-3.0.6.tar.lz.sig http://ftp.gnu.org/gnu/guile/guile-3.0.6.tar.xz.sig http://ftp.gnu.org/gnu/guile/guile-3.0.6.tar.gz.sig Use a mirror for higher download bandwidth: http://www.gnu.org/order/ftp.html Here are the SHA256 checksums: 2e5b9e3e56a967a58ae591053a65c1851875bf5e06c60caab409d5647cff4975 guile-3= .0.6.tar.lz e2bd83c2077d721356e7579ca33097a13a20e2b7eda6c2362ee1166fbc845d28 guile-3= .0.6.tar.xz 000fc43c1b0a5cfbd85b67e01afd58e847bd1f279e3439bb7db37282b0459f56 guile-3= .0.6.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.6.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-4551-ga3a946f670 Makeinfo 6.7 An extract from NEWS follows. Changes in 3.0.6 (since 3.0.5) * Notable changes ** Reimplement dynamic library loading ("dlopening") without libltdl Guile used to load dynamic libraries with libltdl, a library provided by the Libtool project. Libltdl provided some compatibility benefits when loading shared libraries made with older toolchains on older operating systems. However, no system from the last 10 years or so appears to need such a thick compatibility layer. Besides being an unmaintained dependency of limited utility, libltdl also has the negative aspect that in its search for libraries to load, it could swallow useful errors for libraries that are found but not loadable, instead showing just errors for search path candidates that are not found. Guile now implements dynamic library loading directly in terms of the standard "dlopen" interface, providing a limited shim for platforms with similar functionality exposed under different names (MinGW). This change has a few practical impacts to Guile users. There is a new library search path variable, `GUILE_EXTENSIONS_PATH'. Also, errors when loading a library fails now have better errors. And Guile no longer has a libltdl dependency. Although Guile no longer uses libltdl, for backwards compatibility Guile still adds `LTDL_LIBRARY_PATH' to the loadable library search path, and includes ad-hoc logic to support uninstalled dynamically loadable libraries via also adding the ".libs" subdirectories of `LTDL_LIBRARY_PATH' elements. See "Foreign Libraries" in the documentation for a full discussion. ** Fix important incompatibility with GnuTLS Guile uses the GNU multi-precision (GMP) library to implement arbitrary-precision integers (bignums) and fractions. Usually Guile is built to dynamically link to libgmp. In this configuration, any other user of GMP in the process uses the same libgmp instance, with the same shared state. An important piece of shared state is the GMP allocator, responsible for allocating storage for the digits of large integers. For Guile it's most efficient to install libgc as the GMP allocator. That way Guile doesn't need to install finalizers, which have significant overhead, to free GMP values when Guile bignums are collected. Using libgc to allocate digits also allows Guile's GC to adequately measure the memory cost of these values. However, if the Guile process is linked to some other user of GMP, then probably the references from the other library to GMP values aren't visible to the garbage collector. In this case libgc could prematurely collect values from that other GMP user. This isn't theoretical, sadly: it happens for Guile-GnuTLS. GnuTLS uses GMP, and so does Guile. Since Guile 2.0.4, Guile has installed libgc as the GMP allocator, so since then, Guile-GnuTLS has been buggy. Therefore, the default is now to not install libgc as the GMP allocator. This may slow down some uses of bignums. If you know that your Guile program will never use a library that uses GMP, you can set the GUILE_INSTALL_GMP_MEMORY_FUNCTIONS=3D1 variable in your environment. Guile sets this environment variable when building Guile, for example. See "Environment Variables" in the manual, for more. In some future, Guile may switch to GMP's more low-level "MPN" API for working with bignums, which would allow us to regain the ability to use GC-managed digit storage in all configurations. ** New build option: --enable-mini-gmp For some users, it would be preferable to bundle a private copy of the GMP bignum library into Guile. Some users would like to avoid the extra dependency. Others would like to use libgc to manage GMP values, while not perturbing the GMP allocator for other GMP users. For these cases, Guile now has an --enable-mini-gmp configure option, which will use a stripped-down version of GMP, bundled with Guile. This code doesn't have all the algorithmic optimizations of full GMP, but implements the same API in a basic way. It can be more optimal in a Guile context, given that it can use libgc to allocate its data. Note that a build with --enable-mini-gmp is not ABI-compatible with a "stock" build, as functions that use GMP types (scm_to_mpz, scm_from_mpz) are not exported. Thanks to Niels M=C3=B6ller and other GMP developers for their mini-gmp implementation! ** New `read' implementation in Scheme Guile's `read' procedure has been rewritten in Scheme. Compared to the C reader (which still exists for bootstrapping reasons), the new implementation is more maintainable, more secure, more debuggable, all while faithfully reproducing all quirks from Guile's previous reader implemented in C. Also, the Scheme reader is finally compatible with suspendable ports, allowing REPL implementations to be built with lightweight concurrency packages such as the third-party "Fibers" library. Calls to `read' from Scheme as well as calls to `scm_read' from C use the new reader. The Scheme implementation is currently about 60% as fast as the now-inaccessible C implementation, and we hope to close the gap over time. Bug reports very welcome. ** Scheme compiler uses `read-syntax' for better debugging The new Scheme reader also shares implementation with the new `read-syntax' procedure, which annotates each datum with source location information. Guile's compiler can use this to provide better source-level debugging for Scheme programs. Note that this can slightly increase compiled file sizes, though this is mitigated by some assembler optimizations. ** Syntax objects record source locations When compiling a file that defines a macro, the output will usually include a number of syntax objects as literals. Previously, these literals had no source information; now they do. This should improve debugging. ** Optimized run-time relocations The code that patches references between statically-allocated Scheme data has been optimized to be about 30% shorter than before or so, which can significantly decrease compiled file size and run-time initialization latency. ** Optimized calls to known functions For calls where the callee is within the compilation unit, Guile can now skip the argument count check. ** Reduce code size for calls to module variables All calls to a given exported or private variable from a module now dispatch through the same trampoline function. This reduces code size. ** Updated Gnulib The Gnulib compatibility library has been updated, for the first time since 2017 or so. We expect no functional change but look forward to any bug reports. * New interfaces and functionality ** `call-with-port' See "Ports" in the manual. ** `call-with-input-bytevector', `call-with-output-bytevector' See "Bytevector Ports" in the manual. ** `GUILE_EXTENSIONS_PATH' environment variable. See "Environment Variables" in the manual. ** `mkdtemp' and `mkstemp' See "File System" in the manual. There is still `mkstemp!' but we recommend that new code uses `mkstemp', which does not mutate the contents of the "template" argument string. Instead for `mkstemp' you get the name of the newly-created file by calling `port-filename' on the returned port. ** `(system foreign-library)' module See the newly reorganized "Foreign Function Interface", for details. These new interfaces replace `dynamic-link', `dynamic-pointer' and similar, which will eventually be deprecated. ** `read-syntax' See "Annotated Scheme Read" in the manual. ** `quote-syntax' See "Syntax Case" in the manual. ** `syntax-sourcev' See "Syntax Transformer Helpers" in the manual. * Optimizations ** eof-object? ** R6RS vector-map, vector-for-each * Bug fixes ** Fix reverse-list->string docstring ** Fix R7RS "member" result when no item found ** Fix make-transcoded-port on input+output ports ** Fix (ice-9 ftw) on filesystems where inode values are meaningless ** Fix many bugs that prevented Guile from building on MinGW ** Fix many bugs that prevented Guile from building on MinGW64 ** Fix many bugs that prevented Guile's test suite from running on MinGW ** Fix srfi-69 merge-hash ** Fix suspendable-ports implementation of get-bytevector-some! ** Fix overread in string-locale