We are delighted to announce GNU Guile release 3.0.3, the third bug-fix release of the new 3.0 stable series. This release represents 170 commits by 17 people since version 3.0.2. See the NEWS excerpt that follows 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 can be installed in parallel with Guile 2.2.x; see http://www.gnu.org/software/guile/manual/html_node/Parallel-Installations.html. * * * Changes in 3.0.3 (since 3.0.2) * New interfaces and functionality ** New baseline compiler Guile's CPS-based compiler generates good code, but it takes time and memory to do so. For users that prioritize speed of compilation over speed of generated code, Guile now has a new baseline compiler that goes directly from the high-level Tree-IL to bytecode, skipping CPS and all of its optimizations. This compiler is used for `guild compile -O0', and generally runs around ten times as fast as the CPS compiler. *** New VM intrinsics to support baseline compiler See "Intrinsic Call Instructions" in the manual. *** Compiler support for warning and lowering passes *** Compiler support for choosing different compilation orders See "Compiler Tower" in the manual. The new per-language "compiler chooser" facility can choose different compilers based on optimization level. *** Better support for specifying optimization and warning levels The procedural compilation interfaces (`compile', `compile-file', and so on) now have #:optimization-level and #:warning-level keyword arguments, which default to corresponding `default-optimization-level' and `default-warning-level' parameters. You can still specify warning and optimization passes manually, but we think most users will find the higher-level interfaces more robust to use. ** Faster Guile build from source Guile now uses the baseline compiler for its bootstrap, when building the first Scheme compiler. Because the baseline compiler runs faster and includes less code than the CPS compiler, Guile takes less time to build. ** New 'pipeline' procedure in (ice-9 popen) The 'pipeline' procedure provides a simple way to spawn command pipeline as one would do in a shell. ** Refreshed bitvector facility See "Bit Vectors" in the manual, for more on all of these. *** New bitvector-count, bitvector-count-bits, bitvector-position procedures These replace the wonky "bit-count", "bit-count*", and "bit-position" procedures. *** New bitvector-bit-set?, bitvector-bit-clear? procedures These replace bitvector-ref. The reason to migrate is that it's an opportunity be more efficient in 3.0 (because the new procedures only work on true bitvectors, and not generic bit arrays), easier to read (no need for 'not' when checking for false bits), and more consistent with other bitvector procedures. *** New bitvector-set-bit!, bitvector-clear-bit! procedures These replace bitvector-set!, for similar reasons as the bitvector-ref replacement above. *** New bitvector-set-all-bits!, bitvector-clear-all-bits! procedures These replace bitvector-fill!. *** New bitvector-flip-all-bits! procedure This replaces bit-invert!. *** New bitvector-set-bits!, bitvector-clear-bits! procedures These replace the wonky "bit-set*!" procedure. * Bug fixes ** statprof reports the names of primitives Previously statprof would show strings like "anon #x1234" for primitives written in C. ** Compiler reduces 'equal?' when passed a character literal The compiler now properly reduces expressions such as (equal? c #\x) to (eq? c #\x). This was not the case in 3.0.2, which could lead to slower code, especially in 'match' expressions with many clauses with with character literals. ** JIT bugs on ARMv7 have been fixed (<https://bugs.gnu.org/40737>, <https://gitlab.com/wingo/lightening/-/issues/12>) ** 'http-get', 'http-post', etc. now honor #:verify-certificates? (<https://bugs.gnu.org/40486>) ** web: Accept URI host names consisting only of hex digits (<https://bugs.gnu.org/40582>) ** (web http) parser recognizes the CONNECT and PATCH methods ** Initial revealed count of file ports is now zero (<https://bugs.gnu.org/41204>) * New deprecations ** Old bitvector interfaces deprecated See "Bit Vectors" in the manual, for details on all of these replacements. *** bit-count, bit-position Use bitvector-count or bitvector-position instead. *** bitvector-ref Use 'bitvector-bit-set?' or 'bitvector-bit-clear?' instead. *** bitvector-set! Use 'bitvector-set-bit!' or 'bitvector-clear-bit!' instead. *** bitvector-fill! Use 'bitvector-set-all-bits!' or 'bitvector-clear-all-bits!' instead. *** bit-invert! Use 'bitvector-flip-all-bits! instead. *** bit-set*! Use 'bitvector-set-bits!' or 'bitvector-clear-bits!' instead. *** bit-count* Use 'bitvector-count-bits' instead, subtracting from 'bitvector-count' on the mask bitvector if you are counting unset bits. *** Accessing generic arrays using the bitvector procedures For the same efficiency reasons that use of 'vector-ref' on generic arrays was deprecated in Guile 2.0.10, using 'bitvector->list' and similar procedures on 1-dimensional boolean-typed arrays is now deprecated. Use 'array-ref' and similar procedures on arrays. *** scm_istr2bve This C-only procedure to parse a bitvector from a string should be replaced by calling `read' on a string port instead, if needed. * * * Here are the compressed sources: https://ftp.gnu.org/gnu/guile/guile-3.0.3.tar.gz (21MB) https://ftp.gnu.org/gnu/guile/guile-3.0.3.tar.lz (11MB) https://ftp.gnu.org/gnu/guile/guile-3.0.3.tar.xz (13MB) Here are the GPG detached signatures[*]: https://ftp.gnu.org/gnu/guile/guile-3.0.3.tar.gz.sig https://ftp.gnu.org/gnu/guile/guile-3.0.3.tar.lz.sig https://ftp.gnu.org/gnu/guile/guile-3.0.3.tar.xz.sig Use a mirror for higher download bandwidth: https://www.gnu.org/order/ftp.html Here are the SHA256 checksums: fb75d95d8f4aa2efd1d3a0eeee9643dc125698e8cf7497ecc9fdca27ad85e937 guile-3.0.3.tar.gz eabb399928ef465d4dc2cf1107a2d410f32fcde3b6263edd0fbb0d521b778159 guile-3.0.3.tar.lz b3242d61c5583560cbc9adadf1c8b4333139d9ad129d4481b5c6aa7cfa73e63b guile-3.0.3.tar.xz [*] 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.3.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 pool.sks-keyservers.net \ --recv-keys 3CE464558A84FDC69DB40CFB090B11993D9AEBB5 and rerun the 'gpg --verify' command. This release was bootstrapped with the following tools: Autoconf 2.69 Automake 1.16.2 Libtool 2.4.6 Makeinfo 6.7 Gnulib v0.1-1157-gb03f418 Thanks to everyone who helped make this release: 1 Alex Sassmannshausen 1 Andrew Gierth 112 Andy Wingo 4 Arun Isaac 1 Christopher Baines 1 Dale P. Smith 2 Daniel Llorens 1 Eric Bavier 11 Icecream95 1 Jan (janneke) Nieuwenhuizen 1 Jan Synacek 1 Linus Björnstam 28 Ludovic Courtès 1 Mathieu Lirzin 2 Matt Wette 1 Ricardo G. Herdt 1 Rutger van Beusekom Happy hacking with Guile! Ludovic Courtès and Andy Wingo.
signature.asc
Description: PGP signature
-- If you have a working or partly working program that you'd like to offer to the GNU project as a GNU package, see https://www.gnu.org/help/evaluation.html.