[Ironruby-core] Couple of Questions

Joe Chung lists at ruby-forum.com
Mon Feb 25 07:10:51 EST 2008


Shared DynamicSites don't get initialized for each specific class/object 
and method combination.  A shared DynamicSite applies to all invocations 
of a method like to_int.  The DLR validates the context in which the 
invocation occurred and then invokes the dynamic site's target (a 
delegate) for the object.

Rather than have tons of permutations of varying types baked into the 
DLR, they chose to use rule sets (as described in Martin Maly's blog) to 
determine which operation(s) should be performed on objects to achieve 
desired results and cache these rule applications so that it doesn't 
have to evaluate these rules over and over again (like, for instance, in 
a loop where the same operation is being iterated many times).

Keep reading the code -- RubyBinder.cs in the Ruby project and 
DynamicSite.cs in the Microsoft.Scripting project -- to see how this 
happens for IronRuby.  RubyBinder.cs should answer your question about 
why the behavior is different between InvokeMember and ConvertTo. 
Briefly, the Ruby action binder applied different rules to these 
invocations.

Maybe one day someone with more acumen and expertise than myself will 
write a book about how the DLR works internally like what Don Box, Jeff 
Richter, and others did for the CLR.  It'll be easier to comprehend 
then.  In the meantime, you'll just have to rough it on the bleeding 
edge. ;)
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ironruby-core mailing list