__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