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
  cau

Re: Skribilo vs lout.

2012-07-07 Thread Ludovic Courtès
Hi,

rvclay...@verizon.net (R. Clayton) skribis:

> [ Please excuse posting this here; my message to the skribilo mailing list
>   bounced. ]

Can you provide me with details off-list, so we can fix it?

> and I've run into a few problems.  First front-page.lout isn't defined:

OK.

> In skribilo/engine/lout.scm:
> 2955: 1 [lout-illustration #:ident "document-toolchain" ...]
> In unknown file:
>?: 0 [scm-error misc-error #f ...]
>
> ERROR: In procedure scm-error:
> ERROR: lout-illustration: lout exited with error code 127
> make[3]: *** [skribilo.info] Error 1

OK.

Both are fixed in commit 5571cad0d19af06e98e89254de110d9a4dcde159,
thanks for the report!

Ludo’.



Re: GNU Guile 2.0.6 released

2012-07-07 Thread Ian Price

My thanks to Ludovic, Andy, and all other contributors for their help in
this release.

-- 
Ian Price

"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"



Re: GNU Guile 2.0.6 released

2012-07-07 Thread Ludovic Courtès
Hi,

Hans Aberg  skribis:

> It compiled on Mac OS X 10.7.4 using clang 3.1,

Nice, thanks for the report!

> which is the system compiler in later development packages. It is
> fairly compatible with GCC. LLVM-GCC, pointed to by /usr/bin/gcc, will
> not be supported in the future. Do you want to have the output from
> the compile? - It detected some unused variables and stuff.

There’s actually a ‘build_clang’ job on Hydra (on GNU/Linux):

  http://hydra.nixos.org/jobset/gnu/guile-2-0

Thanks,
Ludo’.



[ANN] Guix, functional package management from Guile

2012-07-07 Thread Ludovic Courtès
Hello!

I am delighted to announce Guix, a purely functional package
management tool.

  https://gitorious.org/guix

  http://www.fdn.fr/~lcourtes/software/guix-0.0.tar.gz
  SHA1: 30d99946c67e9a015bb9817b3731765aadc533be

Guix is written in Guile Scheme.  It builds on top of the low-level
build and storage mechanisms of the Nix package manager[*], and provides
high-level APIs to describe and run arbitrary build processes, and a
declarative interface to describe and compose software packages.

Guix implements purely functional package build and composition: a build
process is a Scheme function that returns the path of its result in the
“store”–the /nix/store directory.  The store acts as a build cache,
subject to garbage collection.  Changing a bit in the build process’s
inputs (dependencies, environment variables, etc.) changes the result.

All the nifty features of Nix are inherited:

  • multiple versions or variants of packages can happily coexist;

  • the package build environment is under control, in a chroot, such
that the result of a build process cannot be influenced by the
outside world;

  • support for transactional upgrades and rollback;

  • per-user environments, non-root package installation;

  • etc.


Last but not least, Guix comes with an actual distro!

  https://gitorious.org/guix/guix/blobs/master/distro/base.scm

Granted, it has yet to grow ;-), but it showcases the main ideas:
packages are described in a high-level, hopefully intelligible way, and
their build scripts are written and customized in Scheme.  Packages may
be built with, say:

  guix-build guile

or

  guix-build -e '(@ (distro base) guile-2.0)'

The latter refers unambiguously to the variable bound to the package of
interest, whereas the former would pick the first package of that name.

The ‘guile-reader’ example in the above file shows package composition,
while the ‘lout’ example shows that even hostile build systems can be
accommodated.


Guix & Nix
~~

Nix is really two things: a package build tool, implemented by a library
and daemon, and a special-purpose programming language.  Guix relies on
the former, but uses Scheme as a replacement for the latter.

Technically, Guix makes remote procedure calls to the ‘nix-worker’
daemon to perform operations on the store.  At the lowest level, Nix
“derivations” represent promises of a build, stored in ‘.drv’ files in
the store.  Guix produces such derivations, which are then interpreted
by the daemon to perform the build.  Thus, Guix derivations can use
derivations produced by Nix (and vice versa); in Guix, the cheat code is
the ‘nixpkgs-derivation’ procedure.  :-)

With Nix and the Nixpkgs distribution, package composition happens at
the Nix language level, but builders are usually written in Bash.
Conversely, Guix encourages the use of Scheme for both package
composition and builders.

Other noteworthy points: Guix doesn’t yet have an equivalent to
‘nix-env’; it supports multiple-derivation outputs (where a build
produces several files under /nix/store); package descriptions in the
mini-distro are internationalized; the distribution being written in
Scheme, it is compiled efficiently by Guile’s compiler.


Help needed!


It seems to me like a lot more can be done with this, and it’s fun!

If you’re a Nixer, you’re welcome to give it a try (you just need a
‘nix-worker’ instance running), attempt to build/package something, and
provide feedback on the API and declarative package expressions.

If you’re a Guiler, there are interesting challenges.  One is to write
more macros/EDSLs to provide builders with operations as high-level as
typically found in shell scripts (for instance, ‘substitute*’ attempts
to provide a sed-like API.)  Another one is to investigate whether/how
the code of builders could be generated hygienically (see
‘build-expression->derivation’.)

If you’re a GNU-system-discusser, feedback is welcome!  How would it fit
in a hypothetical GNU distribution?

Happy hacking & packaging!
Ludo’.

[*] http://nixos.org/nix/


pgpEOfO7KL5IG.pgp
Description: PGP signature


ANN: fectors v0.1

2012-07-07 Thread Ian Price

Hi folks,

Just a quick note to mention an implementation of persistent
(i.e. functional) vectors I wrote in celebration of the guile 2.0.6
release. It is written in portable R6RS, and tested on guile.

The code can be found at https://github.com/ijp/fectors

It's a pretty short and simple module, and I hope it proves useful.

I will note, however, that the library is not thread safe. It uses
internal mutation to provide efficient access to the most recently used
version of a fector. If this is a problem for you, or you are frequently
using branches other than the most frequent, I also have an
implementation of functional sequences based on fingertrees in my pfds
library, on the fingertrees branch. See
https://github.com/ijp/pfds/tree/fingertrees

Cheers,

-- 
Ian Price

"Programming is like pinball. The reward for doing it well is
the opportunity to do it again" - from "The Wizardy Compiled"



Re: GNU Guile 2.0.6 released

2012-07-07 Thread Hans Aberg
On 7 Jul 2012, at 12:36, Ludovic Courtès wrote:

> We are pleased to announce GNU Guile release 2.0.6, the next maintenance
> release for the 2.0.x stable series.

It compiled on Mac OS X 10.7.4 using clang 3.1, which is the system compiler in 
later development packages. It is fairly compatible with GCC. LLVM-GCC, pointed 
to by /usr/bin/gcc, will not be supported in the future. Do you want to have 
the output from the compile? - It detected some unused variables and stuff.

Hans





Re: GNU Guile 2.0.6 released

2012-07-07 Thread Hans Aberg
On 7 Jul 2012, at 15:56, Ludovic Courtès wrote:

> Hans Aberg  skribis:
> 
>> It compiled on Mac OS X 10.7.4 using clang 3.1,
> 
> Nice, thanks for the report!
> 
>> which is the system compiler in later development packages. It is
>> fairly compatible with GCC. LLVM-GCC, pointed to by /usr/bin/gcc, will
>> not be supported in the future. Do you want to have the output from
>> the compile? - It detected some unused variables and stuff.
> 
> There’s actually a ‘build_clang’ job on Hydra (on GNU/Linux):
> 
>  http://hydra.nixos.org/jobset/gnu/guile-2-0

It seems they fail on the same tests I just reported.

Hans





Re: [Nix-dev] [***SPAM***] [ANN] Guix, functional package management from Guile

2012-07-07 Thread Shea Levy
Hi Ludo,

Very cool work, I'll have to check it out. One queston and one quick note:

On Jul 7, 2012, at 5:55 PM, l...@gnu.org (Ludovic Courtès) wrote:

> in Guix, the cheat code is
> the ‘nixpkgs-derivation’ procedure.  :-)

Does the referenced derivation need to actually be in nixpkgs? I assume this 
works by calling nix-instantiate?

> 
> it supports multiple-derivation outputs (where a build
> produces several files under /nix/store)

Just FYI, multiple-outputs support is not complete at the nix-store level. In 
particular, if you have one output of a derivation realized but not all 
(because you gc'd the others or got the one via a substitutor), nix-store can't 
realize the non-realized ones directly yet. There may be other issues I'm not 
aware of too.

Cheers,
Shea