We are pleased to announce GNU Guile release 2.0.12, the next maintenance release for the 2.0.x stable series.
Guile is an implementation of the Scheme programming language. It is designed to help programmers create flexible applications that can be extended by users or other programmers with plug-ins, modules, or scripts. With Guile you can create applications and games for the desktop, the Web, the command-line, and more. See the lovely Guile web page at http://gnu.org/software/guile/, for more information on Guile. This release contains 245 commits by 23 people over more than two years, and is essentially a maintenance release, maintaining full compatibility with the 2.0 release series. See the end of this mail for a full description of user-visible changes. In parallel the Guile development team has been hard at work on the next stable series, which we hope will see a stable release within the next couple months. Inquisitive users should see the recent 2.1.3 release notes at https://lists.gnu.org/archive/html/guile-user/2016-06/msg00058.html for a preview of our future stable series. ======================================================================== Here are the compressed sources: ftp://ftp.gnu.org/gnu/guile/guile-2.0.12.tar.gz (7.1MB) ftp://ftp.gnu.org/gnu/guile/guile-2.0.12.tar.xz (4.3MB) Here are the GPG detached signatures[*]: ftp://ftp.gnu.org/gnu/guile/guile-2.0.12.tar.gz.sig ftp://ftp.gnu.org/gnu/guile/guile-2.0.12.tar.xz.sig Use a mirror for higher download bandwidth: http://www.gnu.org/order/ftp.html Here are the MD5 and SHA1 checksums: 666000e0842a81c81fbbb48c7c5c27ef guile-2.0.12.tar.gz 081fdf80cd3a76f260a2a0d87f773d6b guile-2.0.12.tar.xz 51eeedadb1e12be2b728afca0a8685f69cf55f04 guile-2.0.12.tar.gz d3a4c11b9faa01e3da6d58cd0d64fcf26d937e63 guile-2.0.12.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-2.0.12.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 8812F8F2 and rerun the 'gpg --verify' command. This release was bootstrapped with the following tools: Autoconf 2.69 Automake 1.15 Libtool 2.4.6 Gnulib v0.1-800-g68b6ade Makeinfo 6.1 ======================================================================== Changes in 2.0.12 (since 2.0.11): * Notable changes ** FFI: Add support for functions that set 'errno' When accessing POSIX functions from a system's libc via Guile's dynamic FFI, you commonly want to access the 'errno' variable to be able to produce useful diagnostic messages. This is now possible using 'pointer->procedure' or 'scm_pointer_to_procedure_with_errno'. See "Dynamic FFI" in the manual. ** The #!r6rs directive now influences read syntax The #!r6rs directive now changes the per-port reader options to make Guile's reader conform more closely to the R6RS syntax. In particular: - It makes the reader case sensitive. - It disables the recognition of keyword syntax in conflict with the R6RS (and R5RS). - It enables the `square-brackets', `hungry-eol-escapes' and `r6rs-hex-escapes' reader options. ** 'read' now accepts "\(" as equivalent to "(" This is indented for use at the beginning of lines in multi-line strings to avoid confusing Emacs' lisp modes. Previously "\(" was an error. ** SRFI-14 character data set upgraded to Unicode 8.0.0 ** SRFI-19 table of leap seconds updated ** 'string-hash', 'read-string', and 'write' have been optimized ** GOOPS bug fix for inherited accessor methods In the port of GOOPS to Guile 2.0, we introduced a bug related to accessor methods. The bug resulted in GOOPS assuming that a slot S in an object whose class is C would always be present in instances of all subclasses C, and allocated to the same struct index. This is not the case for multiple inheritance. This behavior has been fixed to be as it was in 1.8. One aspect of this change may cause confusion among users. Previously if you defined a class C: (use-modules (oop goops)) (define-class C () (a #:getter get-a)) And now you define a subclass, intending to provide an #:init-value for the slot A: (define-class D () (a #:init-value 42)) Really what you have done is define in D a new slot with the same name, overriding the existing slot. The problem comes in that before fixing this bug (but not in 1.8), the getter 'get-a' would succeed for instances of D, even though 'get-a' should only work for the slot 'a' that is defined on class C, not any other slot that happens to have the same name and be in a class with C as a superclass. It would be possible to "merge" the slot definitions on C and D, but that part of the meta-object protocol (`compute-slots' et al) is not fully implemented. Somewhat relatedly, GOOPS also had a fix around #:init-value on class-allocated slots. GOOPS was re-initializing the value of slots with #:class or #:each-subclass allocation every time instances of that class was allocated. This has been fixed. * New interfaces ** New SRFI-28 string formatting implementation See "SRFI-28" in the manual. ** New (ice-9 unicode) module See "Characters" in the manual. ** Web server The (web server) module now exports 'make-server-impl', 'server-impl?', and related procedures. Likewise, (web server http) exports 'http'. ** New procedures: 'string-utf8-length' and 'scm_c_string_utf8_length' See "Bytevectors as Strings" in the manual, for more. ** New 'EXIT_SUCCESS' and 'EXIT_FAILURE' Scheme variables See "Processes" in the manual. ** New C functions to disable automatic SMOB finalization The new 'scm_set_automatic_finalization_enabled' C function allows you to choose whether automatic object finalization should be enabled (as was the case until now, and still is by default.) This is meant for applications that are not thread-safe nor async-safe; such applications can disable automatic finalization and call the new 'scm_run_finalizers' function when appropriate. See the "Garbage Collecting Smobs" and "Smobs" sections in the manual. ** Cross-compilation to ARM More ARM cross-compilation targets are supported: "arm.*eb", "^aarch64.*be", and "aarch64". * New deprecation ** The undocumented and unused C function 'scm_string_hash' is now deprecated * Bugs fixed ** Compiler *** 'call-with-prompt' does not truncate multiple-value returns (<http://bugs.gnu.org/14347>) *** Use permissions of source file for compiled file (<http://bugs.gnu.org/18477>) *** Fix bug when inlining some functions with optional arguments (<http://bugs.gnu.org/17634>) *** Avoid quadratic expansion time in 'and' and 'or' macros (<http://bugs.gnu.org/17147>) *** Fix expander bug introduced when adding support for tail patterns (<http://lists.gnu.org/archive/html/guile-user/2015-09/msg00017.html>) *** Handle ~p in 'format' warnings (<http://bugs.gnu.org/18299>) *** Fix bug that exposed `list' invocations to CSE (<http://bugs.gnu.org/21899>) *** Reduce eq? and eqv? over constants using equal? (<http://bugs.gnu.org/21855>) *** Skip invalid .go files found in GUILE_LOAD_COMPILED_PATH ** Threads *** Fix data races leading to corruption (<http://bugs.gnu.org/22152>) ** Memory management *** Fix race between SMOB marking and finalization (<http://bugs.gnu.org/19883>) ** Ports *** Setting GUILE_INSTALL_LOCALE=1 sets port default charset from locale *** Fix port position handling on binary input ports (<http://bugs.gnu.org/20302>) *** Bytevector and custom binary ports to use ISO-8859-1 (<http://bugs.gnu.org/20200>) *** Fix buffer overrun with unbuffered custom binary input ports (<http://bugs.gnu.org/19621>) *** Fix memory corruption that arose when using 'get-bytevector-n' (<http://bugs.gnu.org/17466>) ** System *** {get,set}sockopt now expect type 'int' for SO_SNDBUF/SO_RCVBUF *** 'system*' now available on MS-Windows *** 'open-pipe' now available on MS-Windows *** Better support for file names containing backslashes on Windows ** Web *** 'split-and-decode-uri-path' no longer decodes "+" to space *** HTTP: Support date strings with a leading space for hours (<http://bugs.gnu.org/23421>) *** HTTP: Accept empty reason phrases (<http://bugs.gnu.org/22273>) *** HTTP: 'Location' header can now contain URI references, not just absolute URIs *** HTTP: Improve chunked-mode support (<http://bugs.gnu.org/19939>) *** HTTP: 'open-socket-for-uri' now sets better OS buffering parameters (<http://bugs.gnu.org/15368>) ** Miscellaneous *** Fix 'atan' procedure when applied to complex numbers *** Fix Texinfo to HTML conversion for @itemize and @acronym (<http://bugs.gnu.org/21772>) *** 'bytevector-fill!' accepts fill arguments greater than 127 (<http://bugs.gnu.org/19027>) *** 'bytevector-copy' correctly copies SRFI-4 homogeneous vectors (<http://bugs.gnu.org/18866>) *** 'strerror' no longer hangs when passed a non-integer argument (<http://bugs.gnu.org/18065>) *** 'scm_boot_guile' now gracefully handles argc == 0 (<http://bugs.gnu.org/18680>) *** Fix 'SCM_SMOB_OBJECT_LOC' definition (<http://bugs.gnu.org/18495>) *** Fix bug where 'bit-count*' was not using its second argument *** SRFI-1 'length+' raises an error for non-lists and dotted lists (<http://bugs.gnu.org/17296>) *** Add documentation for SXPath (<http://bugs.gnu.org/19478>) ======================================================================== You can follow Guile development in the Git repository and on the Guile mailing lists. Note that Guile builds from the `master' branch of Git have version number 2.1.x; the stable release series can be had from `stable-2.0'. Guile versions with an odd middle number, e.g., 2.1.*, are unstable development versions. Even middle numbers indicate stable versions. This has been the case since the 1.3.* series. Please report bugs to bug-gu...@gnu.org. We also welcome reports of successful builds, which can be sent to the same email address. Happy hacking with Guile, Andy, on behalf of the Guile team.