[prev in list] [next in list] [prev in thread] [next in thread] 

List:       e-lang
Subject:    [E-Lang] Announcing E 0.8.10gamma2: Integrating Dean's Transformer
From:       "Mark S. Miller" <markm () caplet ! com>
Date:       2001-11-17 4:11:32
[Download RAW message or body]

One small step for actual performance.  Two giant leaps for possible 
performance.

With the 0.8.10gamma2 release of E, Dean's Transformer is now integrated 
into our main development path.  This transformer 
1) Does scope analysis over an E program,
2) transforms name-based variable access into access based on indexing into 
    arrays, and 
3) causes an object to only retain its actual instance variable (those 
    lexically enclosing variable that it actually uses freely), instead of 
    holding on to its entire creation time scope.

Although few methodical timing tests have yet been performed, measurements 
to date indicate that this version should perform between 2x and 5x of 
previous releases.  This is the small step for actual time performance. 
(This release also gives us the giant leap on space performance, in that E's 
garbage collection should now be as accurate as Java's, due to #3 above.)

The first giant leap for possible performance is that any actual compiler 
must perform such a transformation.  Hopefully, this will accelerate Darius' 
efforts to build an actual E compiler.

The second leap is that the new (transformer-based) E language interpreter 
per se is now a much smaller fraction of total execution (although we have 
yet to carefully quantify this).  The remaining reason for poor performance 
is poor performance engineering (by me) in various places in ELib, and these 
places should now be more visible to those (such as Dean) with access to 
good Java profiling tools.  At least no one can accuse me of premature 
optimization! ;)

Using these profiling tools, Dean already identified E's sameness comparison 
("==" in the E language) as a bottleneck, and this release also incorporates 
a speedup contributed by Dean.  (Our current collection classes also seem to 
be a problem, but we'll avoid investing too much effort into speeding them 
up until we figure out what their life expectancy is, and how Hydro's 
classes compare.)

Once we do have a true compiler, there will probably continue to be a role 
for the current transformation-based interpreter.  Compilers are great for 
code that's run over and over, like code in a *.e, *.emaker, or *.caplet 
file.  (MarcS will be explaining *.caplet files soon.)  However, because of 
the up-front latency of a compiler (especially in the JVM context, where 
compiled code must be class-loaded), it will probably be unsuitable for a 
command line.  We expect to continue to use the current scheme -- 
interpreting the output of Dean's transformer -- where low latency is more 
important than marginal performance, as on the command line.



With this step, the E implementation is starting to feel less like an 
executable specification and more like a conventional language 
implementation.  Thank you Dean!


        Cheers,
        --MarkM

_______________________________________________
e-lang mailing list
e-lang@mail.eros-os.org
http://www.eros-os.org/mailman/listinfo/e-lang

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic