[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

GNU Guile 1.9.7 released (beta)

From: Ludovic Courtès
Subject: GNU Guile 1.9.7 released (beta)
Date: Tue, 19 Jan 2010 23:45:29 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.1 (gnu/linux)

We are pleased to announce GNU Guile release 1.9.7.  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 address@hidden'.

The Guile web page is located at, 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:   (4.8MB)

Here are the GPG detached signatures[*]:

To reduce load on the main server, use a mirror listed at:

Here are the MD5 and SHA1 checksums:

0d58d2f0533fe61c6a5fe9679aff3b28  guile-1.9.7.tar.gz
f50f807873303d3812ba974d9be6b5ea1b9d02f2  guile-1.9.7.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.7.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 --recv-keys EA52ECF4

and rerun the `gpg --verify' command.

This release was bootstrapped with the following tools:
  Autoconf 2.65
  Automake 1.11.1
  Libtool 2.2.6b

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.6 pre-release:

  ** Complete support for version information in Guile's `module' form

  Guile modules now have a `#:version' field. They may be loaded by
  version as well. See "R6RS Version References", "General Information
  about Modules", "Using Guile Modules", and "Creating Guile Modules" in
  the manual for more information.

  ** Support for renaming bindings on module export

  Wherever Guile accepts a symbol as an argument to specify a binding to
  export, it now also accepts a pair of symbols, indicating that a binding
  should be renamed on export. See "Creating Guile Modules" in the manual
  for more information.

  ** Imported statprof, SSAX, and texinfo modules from Guile-Lib

  The statprof statistical profiler, the SSAX XML toolkit, and the texinfo
  toolkit from Guile-Lib have been imported into Guile proper. See
  "Standard Library" in the manual for more details.

  ** Function profiling and tracing at the REPL

  The `,profile FORM' REPL meta-command can now be used to statistically
  profile execution of a form, to see which functions are taking the most
  time. See `,help profile' for more information.

  Similarly, `,trace FORM' traces all function applications that occur
  during the execution of `FORM'. See `,help trace' for more information.

  ** New debugger

  By default, if an exception is raised at the REPL and not caught by user
  code, Guile will drop the user into a debugger. The user may request a
  backtrace, inspect frames, or continue raising the exception. Full
  documentation is available from within the debugger.

  ** New function, `truncated-print', with `format' support

  `(ice-9 pretty-print)' now exports `truncated-print', a printer that
  will ensure that the output stays within a certain width, truncating the
  output in what is hopefully an intelligent manner. See the manual for
  more details.

  There is a new `format' specifier, address@hidden', for doing a truncated
  print (as opposed to `~y', which does a pretty-print). See the `format'
  documentation for more details.

  ** Primitive procedures are now VM trampoline procedures

  Guile's old evaluator used to have special cases for applying "gsubrs",
  primitive procedures with specified numbers of required, optional, and
  rest arguments. Now, however, Guile represents gsubrs as normal VM
  procedures, with appropriate bytecode to parse out the correct number of
  arguments, including optional and rest arguments, and then with a
  special bytecode to apply the gsubr.

  This allows primitive procedures to appear on the VM stack, allowing
  them to be accurately counted in profiles. Also they now have more
  debugging information attached to them -- their number of arguments, for
  example. In addition, the VM can completely inline the application
  mechanics, allowing for faster primitive calls.

  However there are some changes on the C level. There is no more
  `scm_tc7_gsubr' or `scm_tcs_subrs' typecode for primitive procedures, as
  they are just VM procedures. Likewise the macros `SCM_GSUBR_TYPE',

  Perhaps more significantly, `scm_c_make_subr',
  `scm_c_make_subr_with_generic', `scm_c_define_subr', and
  `scm_c_define_subr_with_generic'. They all operated on subr typecodes,
  and there are no more subr typecodes. Use the scm_c_make_gsubr family

  Normal users of gsubrs should not be affected, though, as the
  scm_c_make_gsubr family still is the correct way to create primitive

  ** SRFI-4 vectors reimplemented in terms of R6RS bytevectors

  Guile now implements SRFI-4 vectors using bytevectors. Often when you
  have a numeric vector, you end up wanting to write its bytes somewhere,
  or have access to the underlying bytes, or read in bytes from somewhere
  else. Bytevectors are very good at this sort of thing. But the SRFI-4
  APIs are nicer to use when doing number-crunching, because they are
  addressed by element and not by byte.

  So as a compromise, Guile allows all bytevector functions to operate on
  numeric vectors. They address the underlying bytes in the native
  endianness, as one would expect.

  Following the same reasoning, that it's just bytes underneath, Guile
  also allows uniform vectors of a given type to be accessed as if they
  were of any type. One can fill a u32vector, and access its elements with
  u8vector-ref. One can use f64vector-ref on bytevectors. It's all the
  same to Guile.

  In this way, uniform numeric vectors may be written to and read from
  input/output ports using the procedures that operate on bytevectors.

  Calls to SRFI-4 accessors (ref and set functions) from Scheme are now
  inlined to the VM instructions for bytevector access.

  See "SRFI-4" in the manual, for more information.

  ** Nonstandard SRFI-4 procedures now available from `(srfi srfi-4 gnu)'

  Guile's `(srfi srfi-4)' now only exports those srfi-4 procedures that
  are part of the standard. Complex uniform vectors and the
  `any->FOOvector' family are now available only from `(srfi srfi-4 gnu)'.

  Guile's default environment imports `(srfi srfi-4)', and probably should
  import `(srfi srfi-4 gnu)' as well.

  See "SRFI-4 Extensions" in the manual, for more information.

  ** Unicode: String normalization, general categories, title case

  Guile now exports the Unicode string normalization functions
  `string-normalize-nfc', `string-normalize-nfd', `string-normalize-nfkc',
  and `string-normalize-nfkd'. See "String Comparison" in the manual for
  more information. See "Characters" for information on the new
  `char-general-category', and "Character Case Mapping" for
  `char-titlecase', `char-locale-titlecase', and

  ** Faster access to the free variables of a closure

  Guile's old garbage collector limited the size of Scheme objects to be 2
  or 4 words. Now with the BDW collector, Guile can allocate
  variable-sized objects, allowing storage of the free variables of a
  closure inline to the closure itself.

  ** New primitive `getsid'

  Scheme binding for the `getsid' C library call.

  ** Changed invocation mechanics of applicable SMOBs

  Guile's old evaluator used to have special cases for applying SMOB
  objects. Now, with the VM, when Guile sees a SMOB, it looks up a VM
  trampoline procedure for it, and use the normal mechanics to apply the
  trampoline. This simplifies procedure application in the normal,
  non-SMOB case.

  The upshot is that the mechanics used to apply a SMOB are different from
  1.8. Descriptors no longer have `apply_0', `apply_1', `apply_2', and
  `apply_3' functions, and the macros SCM_SMOB_APPLY_0 and friends are now
  deprecated. Just use the scm_call_0 family of procedures.

  ** Remove deprecated array C interfaces

  Removed the deprecated array functions `scm_i_arrayp',
  `scm_i_array_ndim', `scm_i_array_mem', `scm_i_array_v',
  `scm_i_array_base', `scm_i_array_dims', and the deprecated macros

  ** String encoding errors throw to `encoding-error' instead of `misc-error'

  ** Keyword argument errors uniformly throw to `keyword-argument-error'

  ** Remove unused snarf macros

  are no more. Use SCM_DEFINE or SCM_PRIMITIVE_GENERIC instead.

  ** Add foreign value wrapper

  Guile now has a datatype for aliasing "foreign" values, such as native
  long values. This should be useful for making a proper foreign function
  interface. Interested hackers should see libguile/foreign.h.

  ** New functions: `scm_call_n', `scm_c_run_hookn'

  `scm_call_n' applies to apply a function to an array of arguments.
  `scm_c_run_hookn' runs a hook with an array of arguments.

  ** Load path change: search in version-specific paths before site paths

  When looking for a module, Guile now searches first in Guile's
  version-specific path (the library path), *then* in the site dir. This
  allows Guile's copy of SSAX to override any Guile-Lib copy the user has
  installed. Also it should cut the number of `stat' system calls by half,
  in the common case.

  ** Compile-time warning: -Wunused-toplevel

  Guile can warn about potentially unused top-level (global)
  variables. Pass the -Wunused-toplevel on the `guile-tools compile'
  command line, or add
  `#:warnings '(unused-toplevel)' to your `compile' or `compile-file'

  ** New reader options: `square-brackets' and `r6rs-hex-escapes'

  The reader supports a new option (changeable via `read-options'),
  `square-brackets', which instructs it to interpret square brackets as
  parenthesis.  This option is on by default.

  If this causes problems with your code, make sure to report it to
  address@hidden so we can change the default.

  When the new `r6rs-hex-escapes' reader option is enabled, the reader
  will recognize string escape sequences as defined in R6RS.

  ** 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 address@hidden'.  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.

Attachment: pgp4zcw_I85V2.pgp
Description: PGP signature

reply via email to

[Prev in Thread] Current Thread [Next in Thread]