GNU Guile 2.0.6 released

2012-07-07 Thread Ludovic Courtès
We are pleased to announce GNU Guile release 2.0.6, the next maintenance
release for the 2.0.x stable series.

The Guile web page is located at http://gnu.org/software/guile/ .

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 and
a large subset of R6RS, 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 suitable for stand-alone applications.  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.

Here are the compressed sources:
  ftp://ftp.gnu.org/gnu/guile/guile-2.0.6.tar.gz   (6.8MB)
  ftp://ftp.gnu.org/gnu/guile/guile-2.0.6.tar.xz   (4.2MB)

Here are the GPG detached signatures[*]:
  ftp://ftp.gnu.org/gnu/guile/guile-2.0.6.tar.gz.sig
  ftp://ftp.gnu.org/gnu/guile/guile-2.0.6.tar.xz.sig

Use a mirror for higher download bandwidth:
  http://www.gnu.org/order/ftp.html

Here are the MD5 and SHA1 checksums:

3438cd4415c0c43ca93a20e845eba7e2  guile-2.0.6.tar.gz
2d8f33c2c622399ca20145a5892369e2  guile-2.0.6.tar.xz
aee330029ea48160071fdbd09271d80c92498669  guile-2.0.6.tar.gz
d048179b03052c500779168668380dc1eafdf25a  guile-2.0.6.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.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 EA52ECF4

and rerun the 'gpg --verify' command.

This release was bootstrapped with the following tools:
  Autoconf 2.69
  Automake 1.12.1
  Libtool 2.4.2
  Gnulib v0.0-7509-g98a2286

This release provides many bug fixes, performance improvements, and some
new features.  Here are the highlights, taken from the `NEWS' file:

  * Notable changes

  ** New optimization pass: common subexpression elimination (CSE)

  Guile's optimizer will now run a CSE pass after partial evaluation.
  This pass propagates static information about branches taken, bound
  lexicals, and effects from an expression's dominators.  It can replace
  common subexpressions with their boolean values (potentially enabling
  dead code elimination), equivalent bound lexicals, or it can elide them
  entirely, depending on the context in which they are executed.  This
  pass is especially useful in removing duplicate type checks, such as
  those produced by SRFI-9 record accessors.

  ** Improvements to the partial evaluator

  Peval can now hoist tests that are common to both branches of a
  conditional into the test.  This can help with long chains of
  conditionals, such as those generated by the `match' macro.  Peval can
  now do simple beta-reductions of procedures with rest arguments.  It
  also avoids residualizing degenerate lexical aliases, even when full
  inlining is not possible.  Finally, peval now uses the effects analysis
  introduced for the CSE pass.  More precise effects analysis allows peval
  to move more code.

  ** Run finalizers asynchronously in asyncs

  Finalizers are now run asynchronously, via an async.  See Asyncs in the
  manual.  This allows Guile and user code to safely allocate memory while
  holding a mutex.

  ** Update SRFI-14 character sets to Unicode 6.1

  Note that this update causes the Latin-1 characters `§' and `¶' to be
  reclassified as punctuation.  They were previously considered to be part
  of `char-set:symbol'.

  ** Better source information for datums

  When the `positions' reader option is on, as it is by default, Guile's
  reader will record source information for more kinds of datums.

  ** Improved error and warning messages

  `syntax-violation' errors now prefer `subform' for source info, with
  `form' as fallback.  Syntactic errors in `cond' and `case' now produce
  better errors.  `case' can now warn on duplicate datums, or datums that
  cannot be usefully compared with `eqv?'.  `-Warity-mismatch' now handles
  applicable structs.  `-Wformat' is more robust in the presence of
  `gettext'.  Finally, various exceptions thrown by the Web modules now
  define appropriate exception printers.

  ** A few important bug fixes in the HTTP modules.

  Guile's web server framework now checks if an application returns a body
  where it is not permitted, for example in response to a HEAD request,
  and warn or truncate the response as appropriate.  Bad requests now
  

Re: A vm for native code in guile

2012-07-07 Thread Stefan Israelsson Tampe
Hi,

Branching now works and a big enough subset of the VM is translatable for
some interesting
benchmarks to be done.

So by skipping the goto structure a the win is maybe 3-4x for simple
numerical loops. I do expect
these loop ta be another factor of 2 when the wip-rtl is translated in the
same way. The
reason is that the overhead mainly consists of the instructions that move
things to and from the cache and rtl seams to decrease the number of such
operations. I've been incrementing fixnums and walked
some through lists of size 1 to measure these numbers.

One thing to note with that code are that it piggy-packs onto the C-stack
and is not working with it's own.
I bet that is not optimal but that's what I did and it should mean that
it's fast to switch to C-code from the
native compiled or jit compiled ones.

Have fun!
/Stefan