Download Firefox: WindowsMac OS X
logo       
Google Custom Search
    AddThis Social Bookmark Button

SISC 1.9.0-alpha finally released: msg#00000

Subject: SISC 1.9.0-alpha finally released
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.

Attachment: pgpihayBhDKcJ.pgp
Description: PGP signature

<Prev in Thread] Current Thread [Next in Thread>