On 09/30/2011 07:08 AM, SASADA Koichi wrote:
> (2011/09/30 5:37), hemant wrote:
>> I think reference_from is a bit ambiguous as it stands. How about "contains" ?
> 
> ObjectSpace.contains(obj)  ?

#reachable_set or #transitive_closure seem to be the names that are used
in graph theory papers. Maybe we should try stick to what's already there.

> 
>> I am not sure, what values are in the output though. Are they Type or
>> output of inspect?
> 
> 
> As I wrote in first post:
> 
>> h = {'a' => [1, 2, 3], 'b' => Object.new}
>> p ObjectSpace.reference_from(h)
>> #=>
>> {76577650=>Hash, 76559320=>"a", 76559360=>[1, 2, 3], 76559310=>"b",
>> 76559340=>#<Object:0x92067d8>}
>>
>> Hash keys are object id and values are objects themselves.
> 
> Output is inspected string by "p".
> 

What are the opinions on adding an official mirror API to Ruby to
separate reflection from non-metalevel stuff and doing things like that
on mirrors in the future? Adding more functions to ObjectSpace et.al.
doesn't seem like good OO to me in the long run. How about having

ObjectMirror.reflect_on(h).transitive_closure?

or similar? There's a good paper by Gilad Bracha and David Ungar,

"Mirrors: Design Principles for Meta-level Facilities of Object-Oriented
Programming Languages"

that we could draw ideas from.