We are pleased to announce GNU Guile release 1.9.5. This is the next pre-release of what will eventually become the 2.0 release series. It provides many new noteworthy features, most notably the addition of a compiler and virtual machine. We encourage you to test them and provide feedback to `guile-devel@gnu.org'. The Guile web page is located at http://gnu.org/software/guile/, and among other things, it contains a link to the Guile FAQ and pointers to the mailing lists. Guile is an implementation of the Scheme programming language, with support for many SRFIs, packaged for use in a wide variety of environments. In addition to implementing the R5RS Scheme standard, Guile includes a module system, full access to POSIX system calls, networking support, multiple threads, dynamic linking, a foreign function call interface, and powerful string processing. 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. Here are the compressed sources: ftp://alpha.gnu.org/gnu/guile/guile-1.9.5.tar.gz (4.6MB) Here are the GPG detached signatures[*]: ftp://alpha.gnu.org/gnu/guile/guile-1.9.5.tar.gz.sig Here are the MD5 and SHA1 checksums: a5b5527d59e30dd964bd3a9d00dad452 guile-1.9.5.tar.gz b8d6055318c8ac3482479df679adf943a2e1c292 guile-1.9.5.tar.gz [*] You can use either of the above signature files 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-1.9.5.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 EA52ECF4 and rerun the `gpg --verify' command. This release was bootstrapped with the following tools: Autoconf 2.64 Automake 1.11 Libtool 2.2.6 Gnulib v0.0-2885-g29c308a This is a new release series with many new features and differences compared to 1.8. The complete list of changes compared to the 1.8.x series is available in the `NEWS' file. Changes since the 1.9.4 pre-release: ** Compiled procedures may now have more than one arity. This can be the case, for example, in case-lambda procedures. The arities of compiled procedures may be accessed via procedures from the `(system vm program)' module; see "Compiled Procedures", "Optional Arguments", and "Case-lambda" in the manual. ** `case-lambda' is now available in the default environment. The binding in the default environment is equivalent to the one from the `(srfi srfi-16)' module. Use the srfi-16 module explicitly if you wish to maintain compatibility with Guile 1.8 and earlier. ** VM calling convention change: callee-parsed arguments As an internal implementation detail, compiled procedures are now responsible for parsing their own arguments, which they receive on the stack. ** VM support for multiple-arity dispatch Calls to procedures with multiple arities, for example those made be `case-lambda', now dispatch via special opcodes, without the need to cons a rest list. ** Intermediate language support for multiple-arity procedures. In the intermediate language, tree-il, all procedures may have one or more arities. This allows all Guile languages to have multiple arities. It is, however, an incompatible change, and anyone maintaining a compiler out-of-tree would be advised to get it into Guile soon :) ** `lambda*' and `define*' are now available in the default environment As with `case-lambda', `(ice-9 optargs)' continues to be supported, for compatibility purposes. No semantic change has been made (we hope). Optional and keyword arguments now dispatch via special VM operations, without the need to cons rest arguments, making them very fast. ** Better support for Lisp `nil'. The bit representation of `nil' has been tweaked so that it is now very efficient to check e.g. if a value is equal to Scheme's end-of-list or Lisp's nil. Additionally there are a heap of new, specific predicates like scm_is_null_or_nil. Probably in the future we will #define scm_is_null to scm_is_null_or_nil. ** No future. Actually the future is still in the state that it was, is, and ever shall be, Amen, except that `futures.c' and `futures.h' are no longer a part of it. These files were experimental, never compiled, and would be better implemented in Scheme anyway. In the future, that is. ** Support for static allocation of strings, symbols, and subrs. Calls to snarfing CPP macros like SCM_DEFINE macro will now allocate much of their associated data as static variables, reducing Guile's memory footprint. ** Inline vector allocation Instead of having vectors point out into the heap for their data, their data is now allocated inline to the vector object itself. The same is true for bytevectors, by default, though there is an indirection available which should allow for making a bytevector from an existing memory region. ** New syntax: include-from-path. `include-from-path' is like `include', except it looks for its file in the load path. It can be used to compile other files into a file. ** New syntax: quasisyntax. `quasisyntax' is to `syntax' as `quasiquote' is to `quote'. See the R6RS documentation for more information. Thanks to Andre van Tonder for the implementation. ** Cleanups to Guile's primitive object system. There were a number of pieces in `objects.[ch]' that tried to be a minimal object system, but were never documented, and were quickly obseleted by GOOPS' merge into Guile proper. So `scm_make_class_object', `scm_make_subclass_object', `scm_metaclass_standard', and like symbols from objects.h are no more. In the very unlikely case in which these were useful to you, we urge you to contact guile-devel. ** GOOPS cleanups. GOOPS had a number of concepts that were relevant to the days of Tcl, but not any more: operators and entities, mainly. These objects were never documented, and it is unlikely that they were ever used. Operators were a kind of generic specific to the Tcl support. Entities were applicable structures, but were unusable; entities will come back in the next alpha release, but with a less stupid name. ** Faster bit operations. The bit-twiddling operations `ash', `logand', `logior', and `logxor' now have dedicated bytecodes. Guile is not just for symbolic computation, it's for number crunching too. ** `inet-ntop' and `inet-pton' are always available. Guile now use a portable implementation of `inet_pton'/`inet_ntop', so there is no more need to use `inet-aton'/`inet-ntoa'. The latter functions are deprecated. ** R6RS block comment support Guile now supports R6RS nested block comments. The start of a comment is marked with `#|', and the end with `|#'. ** `guile-2' cond-expand feature To test if your code is running under Guile 2.0 (or its alpha releases), test for the `guile-2' cond-expand feature. Like this: (cond-expand (guile-2 (eval-when (compile) ;; This must be evaluated at compile time. (fluid-set! current-reader my-reader))) (guile ;; Earlier versions of Guile do not have a ;; separate compilation phase. (fluid-set! current-reader my-reader))) ** ABI harmonization `scm_search_path' now has the signature it did in 1.8, reverting an incompatible change made in 1.9.0. ** Compile-time warnings: -Warity-mismatch Guile can warn when you pass the wrong number of arguments to a procedure. Pass the -Warity-mismatch on the `guile-tools compile' command line, or add `#:warnings '(arity-mismatch)' to your `compile' or `compile-file' invocation. ** Guile is now built without `-Werror' by default Use the `--enable-error-on-warning' configure option to enable it. ** And of course, the usual collection of bugfixes Interested users should see the ChangeLog for more information. You can follow Guile development in the Git repository and on the Guile mailing lists. Guile builds from the `master' branch of Git have version number 1.9.x. Guile versions with an odd middle number, e.g., 1.9.*, 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-guile@gnu.org'. We also welcome reports of successful builds, which can be sent to the same email address. Ludovic Courtès, on behalf of the Guile team.