This is the mail archive of the kawa@sourceware.cygnus.com mailing list for the Kawa project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

major Kawa changes checked in


This is to let people know that I've checked in some major
changes into the Kawa cvs repository.  Some big things have
changed, and while the Kawa testsuite passes, something
could easily have be broken.  Also, the changes aren't
quite done yet;  there are some improvements I want to
do relative to the changes (see the top of the TODO file),
so things may be a bit unstable.

On the other hand, I think there may be some noticable
performance improvements;  I would be interested in hearing
if people notice any difference.  If anything *slow down*,
I especially want to hear about it!

The other big thing in these check-ins is how top-level definitions
are handled.  Basically, a definition is translated into a field in
the compiled class whose name is the mangling of the Scheme
definition.  This is a large step towards Kawa's module system.
More later; the curious may want to try to dis-assamble the
class files.

Note I have not made a new snapshot, because things are still
too unstable.

Here are the relevant snippets from the NEWS file:

When a source file is compiled, the top-level definitions (procedures,
variables, and macros) are compiled to final fields on the resulting class.
This are not automatically entered into the current environment;  instead
that is the responsibility of whoever loads the compiled class.  This
is a major step towards a module system for Kawa.

There is a new form define-private which is like define, except that
the defined name is not exported from the current module.

A procedure that has optional arguments is now typically compiled into
multiple methods.  If it's a top-level procedure, these will be methods
in the modules "ModuleBody" class, with the same (mangled) name.
The compiler can in many cases call the appropriate method directly.
Usually, each method takes a fixed number of arguments, which means
we save the overhead of creating an array for the arguments.
[FIXME - for now this only done when the default value if constant.]

A top-level procedure declared using the form
	(define (NAME ARS ...) BODY ..)
is assumed to be "constant" if it isn't assigned to in the current
compilation unit.  A call in the same compilation unit will now be
implemented as a direct method call.  This is not done if the
prcedure is declared with the form:
	(define NAME (lambda (ARGS ,,,) BODY ...)
[FUTURE: This inlining is also not done when --no-inline is specified.]

gnu.expr.Declaration no longer inherits from gnu.bytecode.Variable.

A gnu.mapping.Environment now resolves hash index collisions using
"double hashing" and "open addressing" instead of "chaining" through
Binding.  This allows a Binding to appear in multiple Environments.

-- 
	--Per Bothner
per@bothner.com   http://www.bothner.com/~per/

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]