SISC 1.9.0-alpha finally released
[email protected] Tue, 24 Aug 2004 08:36:35 -0500
| Newsgroups | gmane.comp.java.sisc.user,gmane.comp.java.sisc.devel |
|---|---|
| Message-ID | <[email protected]> |
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.
signature.asc
(application/pgp-signature, 189 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQFBK0Rjr9IW4v3mHtQRAsMWAJ9074d7orSJ2bLPV6t1k1MysyLCogCePzzN FVeg1dqCaw+KPNpDiXqMJ8g= =nH8o -----END PGP SIGNATURE-----