Newbie initial comments on D language - RTTI and run-time reflection
Christopher Wright
dhasenan at gmail.com
Tue Jan 29 05:20:37 PST 2008
Jarrett Billingsley wrote:
> "Edward Diener" <eddielee_no_spam_here at tropicsoft.com> wrote in message
> news:fnmaec$2j4f$1 at digitalmars.com...
>> From the facilities mentioned at http://digitalmars.com/d/2.0/traits.html
>> it is hard to imagine how one can create runtime reflection on unknown
>> types at compile time.
>
> By using compile-time reflection primitives to build up metadata structures
> at compile time which are embedded in the app/library and which can then be
> used to query information about modules, the types and functions in them,
> etc.
The problem is locating the types that the RTTI clients might request
information about. I don't see a solution to this aside from requiring
that every RTTI-enabled type include a mixin to register itself with
some RTTI manager somewhere.
>> If it can indeed be done then it appears to be something that can not be
>> done from the outside by a 3rd party tool since that tool would have to be
>> able to be compiled and know about partcular types in advance in order to
>> gather the data it needs.
>
> No, it'd be done by using a tool that would parse D code into an AST, find
> the declarations in it, and similarly to above, generate the same kind of
> metadata.
Great! Now you just need the filenames that are going to be compiled
into the application. How do you get them?
>> I could go into the major usage of run-time reflection in modern IDE
>> environments but if I just say RAD programming, ala forms, components, and
>> design-time manipulation as in C++ Builder and later in Visual Studio
>> .Net, you can probably extrapolate where I am going with it. I will just
>> add that C++ as a a standard has been adamantly opposed to such ideas, but
>> from this programmer's point of view it will be the way of programming in
>> the future. Without real run-time reflection RAD programming is nearly
>> hopeless. That is the reason why implementing it in D and working toward a
>> RAD programming IDE using D would be a major advantage and selling to
>> using D over and above its additions and possible improvements to C++ IMO.
>> But I do realize how difficult adding run-time reflection may be from the
>> compiler's point of view.
>
> Runtime reflection is important, yes, but for a systems programming language
> like D, compile-time reflection is just as important.
>
> FWIW The compiler already outputs some RTTI info, such as the list of
> modules, the classes in them, and default constructors for classes (if they
> exist), as well as some typeinfo representing the offsets and types of data
> members of aggregate types, and "Typeinfo" classes which describe the
> built-in and user-created/derived types. You can see a limited form of RTTI
> happening in D's variadic functions -- these functions are passes an array
> of instances of TypeInfo classes, which correspond to the types of the
> arguments that were passed.
>
>
That's not available until link time, though, which is too late to use
them in compile-time reflection.
More information about the Digitalmars-d
mailing list