Ludovic Courtès — January 25, 2023
We are pleased to announce the release of GNU Guile 3.0.9! This release
fixes a number of bugs and adds several new features, among which:
- New bindings for POSIX functionality, including bindings for the
at
family of functions (openat
, statat
,
etc.),
a new
spawn
procedure that wraps
posix_spawn
and that system*
now uses, and the ability to pass flags such as
O_CLOEXEC
to the pipe
procedure. - A new
bytevector-slice
procedure. - Reduced memory consumption for the linker and assembler.
For full details, see the
NEWS
entry, and check out the download page.
Happy Guile hacking!
Andy Wingo — February 11, 2022
We are delighted to announce the release of GNU Guile 3.0.8. This
release adds support for cross-module inlining: allowing small functions
and constants defined in one module to be inlined into their uses in
other modules. Guile 3.0.8 also fixes a number of bugs.
For full details, see the
NEWS
entry. See the release
note
for signatures, download links, and all the rest. Onwards and upwards!
Andy Wingo — May 10, 2021
We are humbled to announce the release of GNU Guile 3.0.7. This release
fixes a number of bugs, a couple of which were introduced in the
previous release. For full details, see the
NEWS
entry. See the release
note
for signatures, download links, and all the rest. Happy hacking!
Andy Wingo — April 28, 2021
We are pleased to announce the release of GNU Guile 3.0.6. This release
improves source-location information for compiled code, removes the
dependency on libltdl
, fixes some important bugs, adds an optional
bundled "mini-gmp" library, as well as the usual set of minor
optimizations and bug fixes. For full details, see the
NEWS
entry. See the release
note
for signatures, download links, and all the rest. Happy hacking!
Andy Wingo — January 7, 2021
We are delighted to announce the release of GNU Guile 3.0.5. This
release adds optimizations that can turn chains of repeated comparisons,
such as those produced by the case
and (sometimes) the match
macros,
into efficient O(1) table dispatches. For full details, see the
NEWS
entry. See the release
note
for signatures, download links, and all the rest. Happy hacking!
Ludovic Courtès — June 24, 2020
We are pleased but also embarrassed to announce GNU Guile 3.0.4. This
release fixes the SONAME
of libguile-3.0.so
, which was wrongfully
bumped in
3.0.3.
Distributions should use 3.0.4.
Apologies for the inconvenience!
Ludovic Courtès — June 21, 2020
We are pleased to announce GNU Guile 3.0.3, the third bug-fix release of
the new 3.0 stable
series!
This release represents 170 commits by 17 people since version 3.0.2.
The highlight of this release is the addition of a new baseline
compiler,
used at optimizations levels -O1
and -O0
. The baseline compiler is
designed to generate code fast, for applications where compilation speed
matters more than execution time of the generated code. It is around
ten times faster than the optimizing continuation-passing style (CPS)
compiler.
This version also includes a new pipeline
procedure
to create shell-like process pipelines, improvements to the bitvector
interface,
and bug fixes for JIT compilation on ARMv7 machines.
See the release
announcement
for details and the download
page to give it a go!
Ludovic Courtès — March 8, 2020
We are pleased to announce GNU Guile 3.0.1, the first bug-fix release of
the new 3.0 stable
series!
This release represents 45 commits by 7 people since version 3.0.0.
Among the bug fixes is a significant performance improvement for
applications making heavy use of bignums, such as the compiler. Also
included are fixes for an embarrassing bug in the include
directive,
for the hash
procedure when applied to keywords and some other
objects, portability fixes, and better R7RS support.
See the release
announcement
for details and the download
page to give it a go!
Ludovic Courtès — March 7, 2020
We are pleased to announce GNU Guile 2.2.7, the seventh bug-fix release
of the “legacy” 2.2 series (the current stable series is 3.0). This
release represents 17 commits by 5 people since version 2.2.6. Among
the bug fixes is a significant performance improvement for applications
making heavy use of bignums, such as the compiler.
See the release
announcement
for details.
Andy Wingo — January 16, 2020
We are ecstatic and relieved to announce the release of GNU Guile 3.0.0.
This is the first release in the new stable 3.0 release series.
See the release
announcement
for full details and a download link.
The principal new feature in Guile 3.0 is just-in-time (JIT) native code
generation. This speeds up the performance of all programs. Compared
to 2.2, microbenchmark performance is around twice as good on the whole,
though some individual benchmarks are up to 32 times as fast.
![Comparison of microbenchmark performance for Guile 3.0 versus 2.2](https://wingolog.org/pub/guile-3.0.0-vs-2.2.6-microbenchmarks.png)
For larger use cases, notably, this finally makes the performance of
"eval" as written in
Scheme
faster than "eval" written in C, as in the days of Guile 1.8.
Other new features in 3.0 include support for interleaved definitions
and expressions in lexical
contexts,
native support for structured
exceptions,
better support for the
R6RS
and
R7RS
Scheme standards, along with a pile of optimizations. See the NEWS
file for a
complete list of user-visible changes.
Guile 3.0.0 and all future releases in the 3.0.x series are
parallel-installable
with other stable release series (e.g. 2.2). As the first release in a
new stable series, we anticipate that Guile 3.0.0 might have build
problems on uncommon platforms; bug reports are very welcome. Send any
bug
reports
you might have as email at to [email protected]
.
Happy hacking with Guile 3!
Andy Wingo — January 13, 2020
We are delighted to announce the release of GNU Guile 2.9.9. This is
the ninth and final pre-release of what will eventually become the 3.0
release series.
See the release
announcement
for full details and a download link.
This release fixes a number of bugs, omissions, and regressions.
Notably, it fixes the build on 32-bit systems.
We plan to release a final Guile 3.0.0 on 17 January: this Friday!
Please do test this prerelease; build reports, good or bad, are very
welcome; send them to [email protected]
. If you know you found a
bug, please do send a note to [email protected]
. Happy hacking!
Andy Wingo — January 2, 2020
We are delighted to announce the release of GNU Guile 2.9.8. This is
the eighth and possibly final pre-release of what will eventually become
the 3.0 release series.
See the release
announcement
for full details and a download link.
This release fixes an error in libguile that could cause Guile to crash
in some particular conditions, and was notably experienced by users compiling Guile itself on Ubuntu 18.04.
We plan to release a final Guile 3.0.0 on 17 January, though we may
require another prerelease in the meantime. However until then, note
that GNU Guile 2.9.8 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
As always, experience reports with GNU Guile 2.9.8, good or bad, are
very welcome; send them to [email protected]
. If you know you found
a bug, please do send a note to [email protected]
. Happy hacking!
Andy Wingo — December 13, 2019
We are delighted to announce GNU Guile 2.9.7, the seventh and hopefully
penultimate beta release in preparation for the upcoming 3.0 stable
series. See the release
announcement
for full details and a download link.
This release makes Guile go faster. Compared to 2.9.6 there are some
significant improvements:
![Comparison of microbenchmark performance for Guile 2.9.6 and 2.9.7](https://wingolog.org/pub/guile-2.9.6-vs-2.9.7-microbenchmarks.png)
The cumulative comparison against 2.2 is finally looking like we have no
significant regressions:
![Comparison of microbenchmark performance for Guile 2.2.6 and 2.9.7](https://wingolog.org/pub/guile-2.2.6-vs-2.9.7-microbenchmarks.png)
Now we're on the home stretch! Hopefully we'll get out just one more
prerelease and then release a stable Guile 3.0.0 in January. However
until then, note that GNU Guile 2.9.7 is a beta release, and as such
offers no API or ABI stability guarantees. Users needing a stable Guile
are advised to stay on the stable 2.2 series.
As always, experience reports with GNU Guile 2.9.7, good or bad, are
very welcome; send them to [email protected]
. If you know you found
a bug, please do send a note to [email protected]
. Happy hacking!
Andy Wingo — December 6, 2019
We are delighted to announce GNU Guile 2.9.6, the sixth beta release in
preparation for the upcoming 3.0 stable series. See the release
announcement
for full details and a download link.
This release fixes bugs caught by users of the previous 2.9.5
prerelease, and adds some optimizations as well as a guile-3
feature
for cond-expand
.
In this release, we also took the opportunity to do some more rigorous
benchmarking:
![Comparison of microbenchmark performance for Guile 2.2.6 and 2.9.6](https://wingolog.org/pub/guile-2.2.6-vs-2.9.6-microbenchmarks.png)
GNU Guile 2.9.6 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
As always, experience reports with GNU Guile 2.9.6, good or bad, are
very welcome; send them to [email protected]
. If you know you found
a bug, please do send a note to [email protected]
. Happy hacking!
Andy Wingo — November 22, 2019
We are delighted to announce GNU Guile 2.9.5, the fifth beta release in
preparation for the upcoming 3.0 stable series. See the release
announcement
for full details and a download link.
Besides the usual set of optimizations, this release adds an --r6rs
option for better R6RS support out of the box, and also adds a new
--r7rs
corresponding to R&RS. Guile's core exception handling has
also been rebased onto the raise-exception
and
with-exception-handler
primitives, enabling better compatibility going
forward with structured exception objects, which are more common in the
broader Scheme community than Guile's old throw
and catch
.
GNU Guile 2.9.5 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
Experience reports with GNU Guile 2.9.5, good or bad, are very welcome;
send them to [email protected]
. If you know you found a bug, please
do send a note to [email protected]
. Happy hacking!
Andy Wingo — August 25, 2019
We are delighted to announce GNU Guile 2.9.4, the fourth beta release in
preparation for the upcoming 3.0 stable series. See the release
announcement
for full details and a download link.
This release enables inlining of references to top-level definitions
within a compilation unit, speeding up some programs by impressive
amounts. It also improves compilation of floating-point routines like
sin
, implements the Ghuloum/Dybvig "Fixing Letrec (reloaded)"
algorithm, and allows mixed definitions and expressions within lexical
contours, as is the case at the top level. Try it out, it's good times!
GNU Guile 2.9.4 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
Experience reports with GNU Guile 2.9.4, good or bad, are very welcome;
send them to [email protected]
. If you know you found a bug, please
do send a note to [email protected]
. Happy hacking!
Andy Wingo — August 3, 2019
We are delighted to announce GNU Guile 2.9.3, the third beta release in
preparation for the upcoming 3.0 stable series. See the release
announcement
for full details and a download link.
This release improves the quality of the just-in-time (JIT) native code
generation, resulting in up to 50% performance improvements on some
workloads. See the article "Fibs, lies, and
benchmarks"
for an in-depth discussion of some of the specific improvements.
GNU Guile 2.9.3 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
Experience reports with GNU Guile 2.9.3, good or bad, are very welcome;
send them to [email protected]
. If you know you found a bug, please
do send a note to [email protected]
. Happy hacking!
Ludovic Courtès — June 30, 2019
We are pleased to announce GNU Guile 2.2.6, the sixth bug-fix
release in the new 2.2 stable release series. This release represents
11 commits by 4 people since version 2.2.5. First and foremost, it
fixes a regression introduced
in 2.2.5 that would break Guile’s built-in HTTP server.
See the release
announcement
for details.
Ludovic Courtès — June 20, 2019
We are pleased to announce GNU Guile 2.2.5, the fifth bug-fix
release in the new 2.2 stable release series. This release represents
100 commits by 11 people since version 2.2.4. It fixes bugs that
had accumulated over the last few months, notably in the SRFI-19 date
and time library and in the (web uri)
module. This release also
greatly improves performance of bidirectional pipes, and introduces the
new get-bytevector-some!
binary input primitive that made it possible.
Guile 2.2.5 can be downloaded from the usual
places.
See the release
announcement
for details.
Besides, we remind you that Guile 3.0 is in the works, and that you can
try out version 2.9.2, which is the latest beta release of what will
become
3.0.
Enjoy!
Ludovic Courtès — May 28, 2019
We’re organizing Guile Days at the University of Strasbourg, France,
co-located with the Perl Workshop,
on June 21st and 22nd.
![Guile Days 2019](https://www.gnu.org/software/guile/static/base/img/guile-days-2019.png)
Update: The program is now complete, view the schedule
on-line.
The schedule is not complete yet, but we can already announce a couple
of events:
- Getting Started with GNU Guix will be an introductory hands-on
session to Guix, targeting an
audience of people who have some experience with GNU/Linux but are
new to Guix.
- During a “code buddy” session, experienced Guile programmers will
be here to get you started programming in Guile, and to answer
questions and provide guidance while you hack at your pace on the
project of your choice.
If you’re already a Guile or Guix user or developer, consider submitting
by June 8th, on the web site,
talks on topics such as:
The neat Guile- or Guix-related project you’ve been working on.
Cool Guile hacking topics—Web development, databases, system
development, graphical user interfaces, shells, you name it!
Fancy Guile technology—concurrent programming with Fibers, crazy
macrology, compiler front-ends, JIT compilation and Guile 3,
development environments, etc.
Guixy things: on Guix subsystems, services, the Shepherd, Guile
development with Guix, all things OS-level in Guile, Cuirass,
reproducible builds, bootstrapping, Mes and Gash, all this!
You can also propose hands-on workshops, which could last anything from
an hour to a day. We expect newcomers at this event, people who don’t
know Guile and Guix and want to learn about it. Consider submitting
introductory workshops on Guile and Guix!
We encourage submissions from people in communities usually
underrepresented in free software, including women, people in sexual
minorities, or people with disabilities.
We want to make this event a pleasant experience for everyone, and
participation is subject to a code of
conduct.
Many thanks to the organizers of the Perl
Workshop and to the sponsors of the
event: RENATER, Université de Strasbourg, X/Stra, and Worteks.
Andy Wingo — May 23, 2019
We are delighted to announce GNU Guile 2.9.2, the second beta release in
preparation for the upcoming 3.0 stable series. See the release
announcement
for full details and a download link.
This release extends just-in-time (JIT) native code generation support
to the ia32, ARMv7, and AArch64 architectures. Under the hood, we
swapped out GNU Lightning for a related fork called
Lightening, which was better
adapted to Guile's needs.
GNU Guile 2.9.2 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
Users on the architectures that just gained JIT support are especially
encouraged to report experiences (good or bad) to [email protected]
.
If you know you found a bug, please do send a note to
[email protected]
. Happy hacking!
Ludovic Courtès — January 29, 2019
GNU Guile will be present this year again at
FOSDEM, which is just a few days away. The
Guiler’s lair this time (in addition to the Guix
Days
right before FOSDEM for some of us!) will be the minimalist languages
track.
Among the great talks this Saturday, don’t miss:
We’re looking forward to meeting you in Brussels!
Andy Wingo — October 10, 2018
We are delighted to announce GNU Guile 2.9.1, the first beta release in
preparation for the upcoming 3.0 stable series.
This release adds support for just-in-time (JIT) native code generation,
speeding up all Guile programs. Currently support is limited to x86-64
platforms, but will expand to all architectures supported by GNU
Lightning.
GNU Guile 2.9.1 is a beta release, and as such offers no API or ABI
stability guarantees. Users needing a stable Guile are advised to stay
on the stable 2.2 series.
See the release
announcement
for full details and a download link. Happy hacking, and please do any
bugs you might find to [email protected]
.
Ludovic Courtès — July 2, 2018
We are delighted to announce GNU Guile 2.2.4, the fourth bug-fix
release in the new 2.2 stable release series. It fixes many bugs that
had accumulated over the last few months, in particular bugs that could
lead to crashes of multi-threaded Scheme programs. This release also
brings documentation improvements, the addition of
SRFI-71, and better
GDB support.
See the release
announcement
for full details and a download link. Enjoy!
Andy Wingo — December 1, 2017
We are delighted to announce GNU Guile 2.2.3, the third bug-fix
release in the new 2.2 stable release series. Besides the usual pile of bug
fixes, we think you will be most delighted by two things. The first is that
the compiler is faster, especially on large Scheme files. The second is that
finally, when you paste a multi-lined expression into the REPL, it now takes
up only one history entry, and any tabs in that pasted entry no longer trigger
bogus and annoying auto-complete attempts.
See
the release
announcement for full details and a download link. Enjoy!
Andy Wingo — April 21, 2017
We sheepishly announce GNU Guile 2.2.2, a quick bug-fix after the
recent 2.2.1
release. This release restores our ability to compile with
libgc 7.2, and restores the ability of syntax objects to be
structurally compared with equal?.
See
the release
announcement for full details and a download link.
Andy Wingo — April 19, 2017
We are delighted to announce GNU Guile 2.2.1, the first bug-fix
release in the new 2.2 stable release series. This release adds a
"sandbox" facility that can run code from untrusted users. It also
includes a compiler and runtime change that ensures that attempts to
mutate literal constants will always throw an exception. Before
this change, the mutation would either succeed, potentially
corrupting further use of that constant or other constants sharing
structure with it, or cause a segmentation fault if that data
happened to be mapped read-only.
See
the release
announcement for full details and a download link.
Andy Wingo — March 16, 2017
We are pleased to announce GNU Guile 2.2.0, the first of a new
stable release series. More than 6 years in the making, Guile 2.2
includes a new optimizing compiler and high-performance register
virtual machine. Compared to the old 2.0 series, real-world
programs often show a speedup of 30% or more with Guile 2.2.
Besides bringing the compiler and virtual machine, Guile 2.2 removes
limitations on you and your programs by lowering memory usage,
speeding up the "eval" interpreter, providing better support for
multi-core programming, and last but not least, removing any fixed
stack size limit. With Guile 2.2, you can recurse to your heart's
content!
Not only does Guile 2.2 run fast, it also supports the creation of
user-space concurrency facilities that have millions of lightweight
"fibers" running at the same time. When a fiber goes to read or
write on a port, and that operation would block, concurrency
libraries built on Guile can now cause the calling fiber to suspend
and only resume when the I/O operation can progress. In the
mean-time, these concurrency facilities can schedule other fibers.
Guile has not blessed any one library (yet?) but for some examples,
see 8sync, guile-a-sync,
and Fibers. Also
check out
the Fibers
manual for a full discussion.
See
the release
announcement for full details and a download link. If you are
migrating from earlier versions of Guile, be sure to read the NEWS
from the release announcement for exhaustive information on
user-visible changes relative to the previous stable series.
This release is parallel-installable with the 2.0 series.
See Parallel
Installations in the manual, for more. Many Guile libraries and
applications already support 2.2; Ludovic Courtès mentions
that Guix
is ready for Guile 2.2, for example. Give your favorite
application a try and if you have problems, check the NEWS for what
steps to take to fix it, and pop by #guile if you need
help.
Andy Wingo — March 10, 2017
We are delighted to announce GNU Guile release 2.1.8, the next
pre-release in what will become the 2.2 stable series.
This release fixes a number of portability bugs. We hope this is
the last pre-release before starting the stable 2.2.0 series. With
luck, we will follow up with a 2.2.0 within a week or so, so any
testing you can perform on this release is very welcome.
See
the release
announcement for full details and a download link.
Andy Wingo — February 18, 2017
We are pleased to announce GNU Guile release 2.1.7, the next
pre-release in what will become the 2.2 stable series.
This release fixes bugs related to migrating coroutines between
threads. It is an incremental release along the path to 2.2. We
hope to be able to release a final 2.2.0 within a few weeks.
See
the release
announcement for full details and a download link.
Ludovic Courtès — February 13, 2017
Ludovic Courtès — January 10, 2017
GNU Guile has its own session
at FOSDEM this year again. The
schedule
is now
available. Talks cover a range of topics:
FOSDEM takes place in Brussels, Belgium, on the 4th and 5th of
February, with
the Guile
track all day long on Sunday 5th. Hope to see you there!
Andy Wingo — December 9, 2016
We are delighted to announce GNU Guile release 2.1.5, the next
pre-release in what will become the 2.2 stable series.
This release improves Guile's parallelism and concurrency primitives,
with the goal of providing Guile users with the tools they need to
build custom concurrency and parallelism abstractions that suit their
needs.
See
the release
announcement for full details and a download link.
Christopher Allan Webber — October 12, 2016
We've just released a new version of GNU Guile, version 2.0.13, which is a security release for Guile (see the original announcement).
This handles a significant security vulnerability affecting the live REPL, CVE-2016-8606. Due to the nature of this bug, Guile applications themselves in general aren't vulnerable, but Guile developers are. Arbitrary Scheme code may be used to attack your system in this scenario. (A more minor security issue is also addressed, CVE-2016-8605.)
There is also a lesson here that applies beyond Guile: the presumption that "localhost" is only accessible by local users can't be guaranteed by modern operating system environments. If you are looking to provide local-execution-only, we recommend using Unix domain sockets or named pipes. Don't rely on localhost plus some port.
To give context, Guile supports a nice live-hacking feature where a user can expose a REPL to connect to, through Geiser or so on. This allows Guile users to hack programs even while programs are running.
When using the live hacking feature, the default in Guile has been to expose a port over localhost to which code may be passed. The assumption for this is that only a local user may write to localhost, so it should be safe. Unfortunately, users simultaneously developing Guile and operating modern browsers are vulnerable to a combination of an HTML form protocol attack and a DNS rebinding attack. How to combine these attacks is published in the article How to steal any developer's local database.
In Guile's case, the general idea is that you visit some site which presumably loads some JavaScript code (or tricks the developer into pressing a button which performs a POST), and the site operator switches the DNS from their own IP to 127.0.0.1. Then a POST is done from the website to 127.0.0.1 with the body containing Scheme code. This code is then executed by the Guile interpreter on the listening port.
The version we are releasing mitigates this problem by detecting incoming HTTP connections and closing them before executing any code.
However, there is a better long term solution, which is already available even to users of older versions of Guile: Guile supports Unix domain sockets in POSIX environments. For example, users may run the command:
guile --listen=/tmp/guile-socket
to open and listen to a socket at /tmp/guile-socket. Geiser users may then connect using M-x geiser-connect-local. This is considerably safer.
We hope that other program authors take heed of this lesson as well: many programs make use of localhost + port as a way of limiting connections. Unfortunately, in today's complex networked environment, this isn't a safe assumption. It's very difficult to predict what programs may provide a way of chaining requests to an application listening on localhost, and certainly difficult on a system where web browsers are involved. Take heed!
(This post originally appeared on the guile-users mailing list.)
Andy Wingo — September 14, 2016
We are delighted to announce GNU Guile release 2.1.4, the next pre-release in what will become the 2.2 stable series.
This release fixes many small bugs, adds an atomic reference facility, and improves the effectiveness of integer unboxing in the compiler. See the release announcement for full details and a download link.
Andy Wingo — July 14, 2016
Andy Wingo — June 19, 2016
Andy Wingo — February 3, 2016
Andy Wingo — January 19, 2016
We are delighted to announce GNU Guile release 2.1.6, the next
pre-release in what will become the 2.2 stable series.
This release fixes bugs related to threads and interrupts. It is an
incremental release along the path to 2.2. It also includes some
floating-point performance improvements thanks to David Thompson.
See
the release
announcement for full details and a download link.
Ludovic Courtès — December 30, 2015
Ludovic Courtès — November 23, 2015
GNU Guile will have its own developer room at FOSDEM 2016, which will take place in Brussels, Belgium, 3031 January 2016.
Now is the time to submit a proposal for a talk in our devroom! We welcome all kinds of talks, be it about functional programming with Guile, experience reports on embedding Guile in your application, Web development with Guile, GNU Guix development, and more—Guile has very diverse use cases, and this devroom should reflect that.
We look forward to reading your proposal and to meeting you! :-)
Andy Wingo — November 4, 2015
We are delighted to announce GNU Guile release 2.1,1, the first pre-release in what will become the 2.2 stable series. This release features a new compiler and virtual machine that offer important performance improvements. It also removes all limitations on stack sizes: users are free to recurse to their hearts' content, using the stack as a data structure, as it was meant to be.
See the original announcement for full details.
Ludovic Courtès — March 21, 2014
We are pleased to announce GNU Guile release 2.0.11, the next maintenance release for the 2.0.x stable series.
This release fixes an embarrassing regression introduced in 2.0.10 in the C functions to access SRFI-4 vectors.
See the original announcement for details.
Ludovic Courtès — March 18, 2014
Ludovic Courtès — February 20, 2014
Last week was Guile 2.0's third anniversary. Guile 2 was a major milestone for Guile and so, like in previousyears, we organized a birthday potluck---a hack fest where Guilers brought their freshly cooked dishes.
The Potluck Dishes
This year again we got a variety of fine dishes. Here's the menu:
- David Thompson brought a neat module for functional reactive programming (FRP). The module is currently used in guile-2d, David's game engine.
- Mike Gran joined the party with an entertaining midi to WAV converter. The code uses produces chiptune---a sound reminiscent of the 80's video games.
- Andy Wingo came up with compost, a native compiler for leaf functions. Compost can generate ELF binaries for leaf functions written in a subset of Scheme. By using it to optimize the inner loops of the OpenGL particle simulation he wrote last year, Andy was able to achieve a speedup of 80x! Compost is available on Gitorious.
- Panicz Maciej Godek and Drcz brought a Pandora game clone to the party, based on the SLAYER game engine.
- Alex Sassmannshausen's dish actually relates to food: food-guile is a program that suggests meals taken from a collection of recipes, and according to various constraints.
- Doug Evans came up with a patch to improve SIGINT handling in GDB's Guile support---the ability to extend GDB with Guile code, which Doug committed in GDB a couple of weeks ago.
- Another GDB-related dish is Ludovic Courtès' GDB pretty-printer for Guile's SCM values. This GDB extension, written in Guile, allows GDB to display the SCM values manipulated by libguile in a human-friendly way.
This has been another pleasant potluck. Thanks to all the participants, and happy birthday Guile 2!
Ludovic Courtès — May 28, 2013
There will be two exciting Guile-related projects going on as part of GSoC this year:
- Guile-Emacs. BT Templeton will continue the excellent work that has been done on Guile and Emacs integration. Previous GSoCs focused on providing a full-fledged Emacs Lisp front-end to Guile’s compiler and VM. This project focuses on the missing piece: replacing the Emacs Lisp interpreter in Emacs by Guile.
- Emacsy is another approach to the Emacs/Guile vision: Shane Celis will work on a framework, Emacsy, that will allow application developers to easily “emacsify” themi.e., by providing the mechanisms for a “key-lookup-execute-command loop” similar to that of Emacs, with Guile inside.
See the initial discussion for details.
Happy hacking!
Ludovic Courtès — April 10, 2013
Andy Wingo — February 19, 2013
February the 16th marked the second anniversary of Guile 2.0. Guile 2 was a major upgrade to Guile's performance and expressiveness as a language, and has become a pleasant foundation for its users.
To celebrate, we organized a little birthday hack-feast -- a communal potluck of programs that Guilers brought together to share with each other. Like last year, many people took on the challenge to come up with a dish, in one month.
The Potluck's Dishes
- Daniel Hartwig and Andy Wingo hacked out a binding to OpenGL, using the dynamic FFI to generate an interface from the OpenGL specification. They promise to release a first version soon, but for now, interested hackers should check out the guile-figl page at gitorious. Andy built a little demo around Figl, putting a bunch of particles in orbit around a central gravitational well. Check out his blog entry for more.
- Stefan Tampe conjured up a neat distributed computation system based on the ZeroMQ messaging library. The DOCUMENTATION file over at the gitorious page has all the lovely details.
- John Darrington announced version 0.0 of a optimizing calculator for statisticians based on GNU PSPP. The aim was not to bind PSPP directly, but to draw on its algorithms, while providing a more friendly Scheme-based interface. The source code is available in a [git://de.cellform.com/pspp-experimental Git repo] at his site.
- Nala Ginrut hacked together a small web framework inspired by Ruby's Sinatra. It comes with a small blog example to get you up and running. The code is available on Gitorious.
- Mark Witmer wrote XCB bindings for Guile, implemented as a language front-end for Guile's compiler whose input is the XML files used XCB.
- Ludovic Courtès came up with a Boot-to-Guile QEMU image. The image boots a Linux-Libre kernel with an initrd containing a copy of Guile, and where the +/init+ file is a Scheme program. The image's build process is fully automated with GNU Guix. This is a preview of what the Guix-based GNU distribution will soon use.
- Noah Lavine did some development work on the next generation of Guile's compiler and virtual machine, updating the continuation-passing-style intermediate language to the latest version of the development virtual machine. This work will make Guile faster and more amenable to native compilation. Peruse the wip-rtp-cps branch for the nitties and the gritties.
- Aleix Conchillo filled in two important missing pieces from Guile's web tool suite, implementing a JSON parser and emitter and an XML-RPC server and client. Check out the code at the guile-json and guile-xmlrpc projects on GitHub.
Conclusion
Well, there you have it. We hope you enjoy digesting these programs as much as we enjoyed writing them, and we hope to see you at our table next year.
Happy birthday, Guile 2!
Ludovic Courtès — November 30, 2012
Ludovic Courtès — July 7, 2012
We are pleased to announce GNU Guile 2.0.6, the next maintenance release of the 2.0.x stable series.
This release provides many bug fixes, as well a new features: the introduction of a new common-subexpression elemination (CSE) pass in the compiler, improved effect analysis and new optimizations in the compiler's partial evaluator (peval), new functions in the web modules, localized number output with (ice-9 format), and more.
See the original announcement at http://lists.gnu.org/archive/html/guile-devel/2012-07/msg00036.html for more details.
Ludovic Courtès — February 16, 2012
Ludovic Courtès — January 30, 2012
We are pleased to announce GNU Guile 2.0.3, the fourth maintenance release of the 2.0.x stable series.
This release provides many bug fixes, including better portability and an improved compatibility with version 1.8, garbage-collection-related performance improvements, and some new features such as a better random state seed, functional file system traversal procedures, and syntax parameters.
See the original announcement at http://lists.gnu.org/archive/html/guile-devel/2012-01/msg00521.html for more details.
Ludovic Courtès — January 30, 2012
GNU Guile 2.0.5 was just released, to fix the incorrect binary interface information (SONAME) found in libguile in 2.0.4. It does not contain other changes.
Please be sure to upgrade to 2.0.5 if you already installed 2.0.4.
We apologize for the inconvenience.
Ludovic Courtès — December 14, 2011
The manual of GNU Guile 2.0 has been published under ISBN 978-1-906966-15-7 by Network Theory, Ltd, a UK-based publisher, and is now available from any good bookstore! See http://www.network-theory.co.uk/guile/manual/ for more details.
It is a paperback of the Guile 2.0.3 reference manual, covering almost all the aspects of using Guile from Scheme and C, its modules, as well as its internals, and a discussion of the project's history and rationale.
The book is fairly impressive: 918 pages, 1.4 kg (3.0 lb), reflecting 15 years of work by more than 20 writers.
If you were looking for a present for your beloved, this is surely a good candidate. :-)
Thanks to Brian Gough for making it possible!
Ludovic Courtès — October 22, 2011
We are pleased to announce GNU Guile 2.0.3, the third maintenance release of the 2.0.x stable series.
The main highlight of this release is the compiler's new optimizer, based on a partial evaluator. It provides the usual optimizations: procedure inlining, copy propagation, and constant folding. The new REPL `,optimize' command allows users to see how it would optimize a given expression.
The release also comes with a few new features and many bug fixes.
See https://lists.gnu.org/archive/html/guile-devel/2011-10/msg00034.html for the original announcement.
Ludovic Courtès — July 2, 2011
Ludovic Courtès — April 28, 2011
Ludovic Courtès — February 16, 2011
We are pleased to announce GNU Guile 2.0.0, the first of a new stable series, after 16 pre-releases on almost 3 years. We're very excited about all the new things in there. We hope you'll like it too and come up with neat ideas to guilify GNU!
In a nutshell, compared to the 1.8 stable series, Guile 2.0 brings a new compiler infrastructure and VM, which can compile Scheme (and ECMAScript, and Emacs Lisp) to bytecode, a new powerful REPL and integrated debugger, native support for hygienic macros, Unicode, good R6RS compatibility, a dynamic foreign function interface (FFI), use of the Boehm-Demers-Weiser GC, and many, many new modules and improvements.
See http://gnu.org/software/guile/news.html and the original announcement at http://lists.gnu.org/archive/html/guile-devel/2011-02/msg00173.html for details.
Many thanks to the numerous contributors and testers, and a special thanks to Andy Wingo for initiating the 1.9/2.0 adventure and for his tireless work adding all these bells and whistles that make Guile 2.0 so nice.
Ludovic Courtès — February 2, 2011
We are pleased to announce GNU Guile 1.9.15, the sixteenth and last pre-release before 2.0, featuring a compiler and virtual machine, and a large set of exciting new features. Yes, that's right, the last one: 2.0 is due on February 16th!
This pre-release comes with many bug fixes and improvements, including faster Unicode I/O with better error reporting, improved math functions, and better R6RS compatibility.
See http://lists.gnu.org/archive/html/guile-devel/2011-02/msg00041.html for the original announcement.
Last but not least, if you're around, don't miss Andy Wingo's Guile talk at FOSDEM this Saturday: http://fosdem.org/2011/schedule/event/guile .
Ludovic Courtès — December 17, 2010
We are pleased to announce GNU Guile 1.9.14, the fifteenth and one of the last pre-releases before 2.0, featuring a compiler and virtual machine, and a large set of exciting new features. As usual feedback, bug reports, etc., are all welcome!
In addition to bug fixes, this release adds modules for dealing with HTTP, including a built-in web server, support for fine-grain parallelism using "futures", and this Summer of Code work on the Emacs Lisp compiler.
See http://lists.gnu.org/archive/html/guile-devel/2010-12/msg00031.html for the original announcement.
Ludovic Courtès — December 13, 2010
We are pleased to announce GNU Guile release 1.8.8. This is a bug-fix release of the 1.8 stable series. See http://lists.gnu.org/archive/html/guile-devel/2010-12/msg00023.html for the original announcement.
Note that development effort is currently spent on the 1.9 unstable
series, which will lead to the 2.0 stable series within a couple of
months. The 1.9 series provides many new noteworthy features, most
notably the addition of a compiler and virtual machine. Users are
encouraged to test it and provide feedback
Ludovic Courtès — October 17, 2010
We are pleased to announce GNU Guile 1.9.13, the fourteenth and one of the last pre-releases before 2.0, featuring a compiler and virtual machine and a large set of exciting new features. As usual feedback, bug reports, portability issues, etc., are all welcome!
Among others, this release comes with new debugging facilities at the REPL (breakpoints, tracepoints, stepping), several new SRFI implementations, and many bug fixes.
See http://lists.gnu.org/archive/html/guile-devel/2010-10/msg00075.html for the original announcement.
Ludovic Courtès — September 4, 2010
We are pleased to announce GNU Guile 1.9.12, the thirteenth and one of the last pre-releases before 2.0, featuring a compiler and virtual machine and a large set of exciting new features. As usual feedback, bug reports, portability issues, etc., are all welcome!
Summer holidays in this hemisphere reduced the release pace, though the list of news and bug fixes is pretty long. These changes bring us closer to our expectations for 2.0.
Among other things 1.9.12 comes with a new "recursive REPL" for debugging (similar to Emacs' recursive editing levels), improvements to the dynamic foreign function interface (FFI), and various R6RS bug fixes.
See http://lists.gnu.org/archive/html/guile-devel/2010-09/msg00033.html for the original announcement.
Ludovic Courtès — June 2, 2010
We are pleased to announce GNU Guile 1.9.11, the twelfth and probably last pre-release before 2.0, featuring a compiler and virtual machine and a large set of exciting new features. As usual feedback, bug reports, portability issues, etc., are all welcome!
Granted, we already said last month that 1.9.10 may be the last pre-release. But there's been such a wealth of contributions, improvements, and bug fixes that publishing another pre-release made a lot of sense.
To name a few: the R6RS `library' form and most of the R6RS standard libraries were added, there are new modules for SXML pattern matching and for code coverage reports, and the mechanics of macro expansion have been harmonized between the compiler, the expander, and the evaluator.
See http://lists.gnu.org/archive/html/guile-devel/2010-06/msg00013.html for the original announcement.
Ludovic Courtès — April 22, 2010
Ludovic Courtès — April 15, 2010
We are pleased to announce GNU Guile 1.9.10, the eleventh and probably last pre-release before 2.0, featuring a compiler and virtual machine and a large set of exciting new features. As usual feedback, bug reports, portability issues, etc., are all welcome!
This release focuses on documentation updates, better integration of Emacs Lisp's nil, and the addition of Dominique Boucher's `lalr-scm' parser generator.
See http://lists.gnu.org/archive/html/guile-devel/2010-04/msg00094.html for the original announcement.
Ludovic Courtès — March 19, 2010
We are pleased to announce GNU Guile 1.9.9, the tenth pre-release of what will soon become the 2.0 stable series, featuring a compiler and virtual machine. If you haven't tried it yet, please do and report back!
This release adds support for delimited and composable continuations, a powerful mechanism that allows part of a program's control flow to be captured and reinstated. Besides, the release focuses on performance and usability improvements as well as bug fixes.
See http://lists.gnu.org/archive/html/guile-devel/2010-03/msg00055.html for the announcement.
Ludovic Courtès — February 17, 2010
We are pleased to announce GNU Guile 1.9.8. It is the ninth pre-release of what will eventually become the 2.0 stable series, featuring a compiler and virtual machine.
This release brings us closer to 2.0, bringing a new dynamic "foreign function interface" (FFI), an implementation of Phil Bagwell's vlists and hash lists, and the usual collection of optimizations, bug fixes, and portability improvements. See http://lists.gnu.org/archive/html/guile-devel/2010-02/msg00030.html for the announcement.
Ludovic Courtès — January 19, 2010
We are pleased to announce GNU Guile 1.9.7. It is the eighth pre-release of what will eventually become the 2.0 stable series, featuring a compiler and virtual machine.
This release improves the efficiency of function call dispatch in the VM, adds a new debugger, new profiling and tracing commands at the REPL, as well as new modules (SSAX, Texinfo). See http://lists.gnu.org/archive/html/guile-devel/2010-01/msg00092.html for the complete announcement.
Ludovic Courtès — December 16, 2009
We are pleased to announce GNU Guile 1.9.6. It is the seventh pre-release of what will eventually become the 2.0 stable series, featuring a compiler and virtual machine.
This release includes a wealth of exciting new features, including a new `eval' written in Scheme (a meta-circular evaluator), integrated dispatch of GOOPS methods in the VM, and last but not least an Emacs Lisp compiler! See http://lists.gnu.org/archive/html/guile-devel/2009-12/msg00035.html for the complete announcement.
Ludovic Courtès — November 18, 2009
We are pleased to announce GNU Guile 1.9.5. It is the sixth pre-release of what will eventually become the 2.0 stable series, featuring a compiler and virtual machine.
This release provides, among other things, support for `case-lambda' (multiple-arity procedures), a more efficient calling convention for procedures with keyword and optional arguments, better support for Emacs Lisp's `nil', and new compiler warnings.
See the announcement at http://lists.gnu.org/archive/html/guile-devel/2009-11/msg00065.html for details.
Ludovic Courtès — October 16, 2009
Ludovic Courtès — September 16, 2009
We are pleased to announce GNU Guile 1.9.3. It is the fourth pre-release of what will eventually become the 2.0 stable series, featuring a compiler and virtual machine.
The highlights of this release are Unicode support (use `?' instead of `lambda'!) and the switch to libgc, the Boehm-Demers-Weiser conservative garbage collector.
The original announcement is available at http://lists.gnu.org/archive/html/guile-devel/2009-09/msg00090.html .
Ludovic Courtès — August 15, 2009