__FUNCTION__
Edward Diener
eddielee_no_spam_here at tropicsoft.com
Sun Mar 1 06:46:34 PST 2009
Andrei Alexandrescu wrote:
> Edward Diener wrote:
>> Andrei Alexandrescu wrote:
>>> Edward Diener wrote:
>>>> I argued for this in the past on this NG but still no one seems to
>>>> have picked up the idea that a full reflection library for D,
>>>> supported fully by the compiler, would be a great thing. It would
>>>> also allow RAD programming with D outside of the functionality one
>>>> could use in 3rd party tools designed around full run-time
>>>> reflection capabilities.
>>>
>>> D2 will have reflection. (Walter doesn't know yet. He thinks D3 will
>>> have reflection.) It will be compile-time reflection because only
>>> run-time reflection only is missing the point.
>>
>> The whole debate about "compile-time" and "run-time" reflection is
>> irrelevant as long as one can invoke it without having to inject code
>> into an already existing construct.
>>
>> It must work through run-time code which can ask such reflection
>> questions as: enumerate for me all of the classes in a particular
>> module etc., or enumerate for me all the functions in a class etc. .
>> It must work by allowing code from outside of a construct to query
>> that construct and get its accessible constructs. How that run-time
>> code is written, whether using "compile-time" reflection using
>> templates, or run-time classes accessible from a library whose
>> reflection data is produced by the D compiler, is not important from
>> the user's point of view as long as the user has the access he wants
>> and can write relatively clean and clear code to get it.
>>
>> Of course from within any given construct one should also be able to
>> write code in a clear manner which accesses the inner constructs.
>>
>> Access to constructs via reflection should follow the same protection
>> features as any other code, so that public constructs are always
>> accessible but private constructs are only accessible following their
>> normal rules.
>>
>> So I do not know what you mean by "only run-time reflection only is
>> missing the point" but certainly the ability to use reflection at
>> run-time is vitally important from outside of a construct to any 3rd
>> party tool which wants to introspect already existing constructs and
>> create objects from those constructs based on the information run-time
>> reflection can return.
>
> This is a long discussion, but in brief any runtime reflection engine
> needs some sort of compile-time metadata infrastructure. Some languages
> don't make that accessible within the language itself. Runtime
> reflection has been explored extensively, its possibilities and
> limitations are pretty well understood, I hardly smothered a yawn
> reading all you wrote.
It was written because I have inevitably seen discussions about language
reflection mechanisms end with talk about really neat new compile-time
facilities which bring one no closer to real run-time reflection than
before.
>Compile-time reflection is much less understood
> and hides many more exciting possibilities. With the advances in
> compiler technology implemented by Walter, we have a chance to tackle
> reflection in a systematic manner.
Good ! I look forward to seeing it and using it in D.
More information about the Digitalmars-d
mailing list