Compiler patch for runtime reflection

Alex Rønne Petersen xtzgzorex at gmail.com
Sat Oct 22 06:35:57 PDT 2011


On 22-10-2011 15:20, Andrej Mitrovic wrote:
> On 10/22/11, Vladimir Panteleev<vladimir at thecybershadow.net>  wrote:
>> On Sat, 22 Oct 2011 13:50:32 +0300, Alex Rønne Petersen
>> <xtzgzorex at gmail.com>  wrote:
>>
>>> You could just introduce a -reflection switch to include reflection
>>> information.
>>
>> As I mentioned in the previous thread on the subject, I think that ideally
>> we should improve compile-time reflection so it's possible to generate
>> runtime reflection information at compilation time. Something like this:
>>
>> import reflection;
>>
>> enum reflectionForStdStdio = generateReflectionForModule("std.stdio");
>>
>> void main()
>> {
>>       reflectionForStdStdio.callFunction("writeln", "Hello, world!");
>> }
>>
>> --
>> Best regards,
>>    Vladimir                            mailto:vladimir at thecybershadow.net
>>
>
> I think user properties would be a perfect fit for this. :)
>
> @reflected
> struct Foo {}

The only downside with either approach is that people need to explicitly 
mark their types as "reflectable", which can be a slight hindrance in 
the way of discoverability (and probably also complicates actual 
reflection - what if you try to get the return type of a reflected 
method and that type is not available? This would make for an *awful* 
lot of null checks).

In any case, if we need to mark stuff as reflectable in-source, I'd 
vouch for @reflected, though I would really prefer application-global 
reflection info.

- Alex


More information about the Digitalmars-d mailing list