Chances of D getting proper runtime reflection?

Jacob Carlborg doob at me.com
Sun Aug 21 08:20:14 PDT 2011


On 2011-08-21 15:20, Robert Jacques wrote:
> On Sun, 21 Aug 2011 06:55:52 -0400, Jacob Carlborg <doob at me.com> wrote:
>
>> What are the chances of D getting proper runtime reflection? Something
>> like this:
>>
>> class Foo
>> {
>> private int a;
>>
>> private void bar (int i)
>> {
>> a = i;
>> }
>> }
>>
>> auto foo = new Foo;
>> Object o = foo;
>> o.setInstanceVariable("a", 3);
>> assert(foo.a == 3);
>>
>> This would be useful as well:
>>
>> o.send("bar", 5);
>> assert(foo.a == 5);
>> assert(foo.a == o.getInstanceVariable("a"));
>>
>> Currently I have most use of the first example. These example should
>> work regardless if the fields/methods are private, protected or public.
>>
>> As far as I know this wouldn't require any changes to the language, only
>> the compiler and runtime would need to be modified. To me, it doesn't
>> look that complicated to implement, the runtime just needs to store an
>> associative arrays that maps names of instance variables and methods to
>> their addresses. This could probably be stored in the ClassInfo.
>> Something like this:
>>
>> Foo.classinfo.setInstanceVariable(foo, "a", 3);
>>
>> And this could be shorted to:
>>
>> o.setInstanceVariable("a", 3);
>>
>> "setInstanceVariable" could just forward the call to the class info.
>>
>
> I've basically done this entirely in library code: see
> https://jshare.johnshopkins.edu/rjacque2/public_html/variant.mht

The whole point was to have direct support in the language/runtime so 
these library solution were not needed. Does your solution work when the 
static type is Object and the runtime type is a subclass?

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list