After months of work, SISC 1.9.0-alpha is finally released and is
available from the SISC website for download. This alpha release
represents the first build with the full feature set that will be
present in the stable release for the 1.9 series. We encourage you to
test the new features and any existing software you have to discover any
bugs in what is a large amount of new and changed code.
As usual we will go through an alpha, beta, and one or more release
candidates until the code has stabilized and a stable release is
justified.
Now, on to the changes. SISC 1.9's major architectural change is the
move from the lexical rib closures of all previous SISC releases to flat
closures. Flat closures represent the entire lexical environment at any
point in the Scheme program as a single flat array of values, with
settable values boxed. When a closure is created, all the live lexical
variables used by that closure are copied into a new lexical
environment.
This has two advantages and one disadvantage. The
disadvantage is that closure creation is more expensive, as more work
must be done to copy those variables than to append a single lexical rib
in the previous releases. But this is more than made up for by the
advantages in most cases. First, local variables are kept in the
interpreter rather than allocated in a new rib. Second, (and the main
motivation for the change), unreferenced lexical values are discarded,
and thus don't leak space. This property is called "safe-for-space".
See the following post on the SRFI-40 discussion list for examples:
http://srfi.schemers.org/srfi-40/mail-archive/msg00044.html
Much of the reason for the 1.9 series taking so long is that this
requires a lot more infrastructure in terms of analysis from the
compiler to accurately determine which lexical variables are live at
each point in the program. But the results are worth it.
Another interesting architectural change is the addition of 'fixable
procedures'. Most of the native procedures are now fixable, meaning
that if the programmer wishes, he may instruct SISC (using the
(inline-usual-primitives) call) to consider native procedures not
redefinable. This allows SISC to emit different microexpressions which
are far more efficient to call those primitives. The improvement is
usually about a 2x increase in performance. The compiler checks if a
primitive has already been redefined before generating the code, so one
can enable the inlining after all necessary redefinitions have occurred
and get the speedup for production code. With inlining enabled, SISC
performs within 30% of compiled Kawa and even competitive with some C
based implementations.
Moving on, SISC 1.9 brings some new library functionality and
flexibility to the table. I'll only briefly mention them with the
rest of the informal change log below. Consult the manual at
http://sisc.sf.net/manual-beta/ for documentation on the new
functionality.
Enjoy!
Changes since SISC 1.8.8:
* Unofficial support for weak hashtables
* More recent version of pattern matching from IU.
* Fixable native procedures.
* Support for breaking execution with CTL-C in the REPL. (does not work
with rlwrap)
* Flat closures.
* [953043] Fixed a bug in s2j for overloaded calls involving
java.lang.Object
* Added a module-exports function, which given a module name, lists
its bindings.
* Improved S2J error reporting.
* Fixed stack traces for sources loaded from the command line.
* Added the os module: process creation and manipulation.
* [987271] Fixed equal? on numbers, which was insensitive to exactness.
* Fixed annotations in the repl.
* Fixed psyntax's quasiquote macro to preserve immutability of subparts
of quasiquoted expressions.
* Added thread/interrupted to the threading library
* Better handling of infinity and NaN in the quantity library.
* In the full dist, I/O routines are now generic, allowing custom
port types to be created using the object system.
* Various other minor fixes.
pgpihayBhDKcJ.pgp
Description: PGP signature
|