Newbie initial comments on D language - RTTI and run-time reflection
Christopher Wright
dhasenan at gmail.com
Mon Jan 28 18:49:56 PST 2008
Edward Diener wrote:
> Xinok wrote:
>> Edward Diener wrote:
>>> I have searched through the pdf documentation bit did not find a full
>>> explanation of RTTI facilities in D. The reason I ask about this is that
>>> it appears there is a 3rd party reflection facility but I do not see the
>>> documentation in D that explains if and how reflection works in D. Does
>>> it exist in D ? Is there documentation for it ?
>>>
>> D 2.0 is an experimental branch which supports compile time
>> reflection. It's documented here:
>> http://digitalmars.com/d/2.0/traits.html
>
> That is compile-time reflection, which is useful for creating code but
> not for instantiating objects at run-time and finding out about them. It
> is also very limiting in the form presented as one can not instantiate
> objects in the compile time constructs based on the information
> returned, but just react in a way to the information found. I am not
> putting down the effort as it more than duplicates and is more effective
> than the Boost traits library, since it is based on compiler knowledge.
>
> Is there any run-time reflection in D ? If not I would like to make a
> strong argument for it on this NG and then let others comment on it or
> at least have Walter see it. I realize implementing run-time reflection
> in any language is exceedingly difficult, but my argument would make a
> case for its importance in D if it could be done.
Runtime reflection is quite weak in D. I was considering providing some
facility for it for one of my projects, but that turned out not to be
necessary, so I decided against it.
The main problem is getting all types. You can easily register a type
for RTTI with a mixin, but I'm not sure how else to do it. I thought I
saw a trait to do it (__traits(derivedTypes, Object)), but I was
mistaken, and such a thing would be pretty much impossible. In my
situation, I didn't need nearly so much information; the trouble was
passing type information to arbitrary entities.
I browsed the Flectioned source once to see how it acquired runtime type
information, but it scared me, and I haven't looked at it since.
More information about the Digitalmars-d
mailing list