Unification and extension of compile-time reflection
Jarrett Billingsley
jarrett.billingsley at gmail.com
Tue Nov 25 07:13:42 PST 2008
On Tue, Nov 25, 2008 at 8:42 AM, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> Jarrett,
>
> I agree with most of what you are saying, except for this:
>
> "Jarrett Billingsley" wrote
>> Secondly - the type properties are cute but they're not very flexible.
>> They can interfere with fields and methods, and so the compiler has
>> to explicitly check that aggregate member names don't step on the
>> built-in property names. I think that "T.prop" could just be replaced
>> with "traits(prop, T)". traits(min, int), and so on. Yes, it's
>> longer - but that's what templates are for, if you really want it
>> shorter: Min!(int).
>
> Ugh! Can we just change traits to not use the functional style?
>
> I like as others have suggested:
>
> C.traits.isVirtualMethod(foo);
>
> substitute traits for your favorite reflection keyword (how about traitsof?)
>
> There is also one other benefit to min and max (and others) being first
> class properties. You can mimic their behavior in user-defined types. For
> example, if int.min is changed to traits(min, int) or even int.traits.min,
> then how do I define a similar 'minimum' for say, a time type, which would
> be totally arbitrary.
>
> According to the spec, the only builtin properties that user defined types
> have are init, sizeof, alignof, mangleof, stringof. With the exception of
> init, most of these are pretty uncommon member names.
>
> I wouldn't mind moving init into traits (with the above syntax):
>
> C.traits.init
>
> The other properties are specific to the builtin types, and therefore cannot
> conflict with members.
Fair enough.
Also, I don't necessarily care about the syntax, just as long as it's unified ;)
More information about the Digitalmars-d
mailing list