Looks good overall.

Should RubyContext.CallSiteCreated be ThreadLocal? If not, its use by 
CallSiteTracer looks not-entirely-safe.

The variable name "parantScope" in RubyOps.CreateMethodScope is typoed.

-----Original Message-----
From: Tomas Matousek 
Sent: Thursday, June 04, 2009 3:32 PM
To: IronRuby External Code Reviewers; Rowan Code Reviewers
Cc: ironruby-core@rubyforge.org
Subject: Code Review: LazyMethods

  tfpt review "/shelveset:LazyMethods;REDMOND\tomat"

A simple change in DLR.

Ruby:
  Implements lazy method transformation. Previously a method was transformed to 
DLR AST as soon as it was defined (def foo; ...; end). We can postpone the 
transformation until the method is called for the first time. This 
significantly improves startup time. For example (not NGEN'd):
  
  require 'benchmark'
  
  Benchmark.bm { |x|   x.report {  require 'rubygems'  }  }
  
        user     system      total        real
  eager transformation
    1.622410   0.031200   1.653611 (  1.581316)
  lazy transformation
    1.170008   0.031200   1.201208 (  1.099220)
  
  Although Ruby methods (unlike block) don't close over variables we still need 
2 closure variables: the parent lexical runtime scope and the module that the 
method is declared in (for implementation of super). These were previously DLR 
closure variables. They are live constants now. Ruby method pre-compilation 
would require additional work, so we don't support it for now. 

Tomas
_______________________________________________
Ironruby-core mailing list
Ironruby-core@rubyforge.org
http://rubyforge.org/mailman/listinfo/ironruby-core

Reply via email to