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