On Mar 28, 2009, at 10:38 PM, Charles Oliver Nutter wrote:
Laurent Sansonetti wrote:
It's possible by modifying the source code and comment the call to
createInstructionCombiningPass() and createCFGSimplificationPass(),
but I do not recommend to remove these because I think it would
break the way we compile Dwarf exception handlers in blocks.
# In my personal benchmark suite I try to make sure these
optimizations do not provide false positive numbers when comparing
against YARV.
Ok, it would be nice if there were a simpler way to turn those off;
I don't want to break 'experimental' completely, but it would be
nice to get real benchmark results in these cases.
I don't think it's a good idea to provide a way to turn off
optimizations and I do not see the point in benchmarking dead code in
general (I would never do this).
Yes, currently calling eval with a literal string will call the
JIT, so doing this in a loop will most likely eat all your memory :-)
I plan to address that later by fallbacking to the LLVM interpreter
in some cases, but I doubt this will affect real-world
applications. Also, there are ways to improve the JIT (nothing has
been done yet).
In Rails, as recently as 2.2 (I haven't checked 2.3) there's a small
bit of eval'ed code used to look up constants. Before we fixed our
parser performance, we found it was a bottleneck. So that's at least
one real-world case.
Good to know, I just hope they are not doing this 30 million times in
a loop or something :-)
Yes as you noticed Binding has not been implemented yet :-( This is
on the very top of my TODO list (needed for IRB) and I already know
how to implement it without disabling our current "local variables
into CPU registers" optimization.
How will you do that? Given that a block can be used as a binding,
you can't statically inspect contained blocks to determine which
variables are used and which aren't. For example, this code:
def foo
a = 1
bar { }
puts a
end
def bar(&b)
eval "a = 2", b.binding
end
foo
This should print out "2" but prints out "1" in 'experimental' right
now.
Yes, Binding is not implemented yet. Do not worry I have read the MRI
source code and know how Binding works and how to provide a compliant
implementation. Please stay tuned.
Laurent
_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel