On Mon, 02 Nov 2009 11:47:53 -0500, Don <nos...@nospam.com> wrote:

[I'm moving this from deep inside a TDPL thread, since I think it's important]

is(typeof(XXX)) is infamously ugly and unintuitive
__traits(compiles, XXX) is more comprehensible, but just as ugly.

They are giving metaprogramming in D a bad name. I think we need to get rid of both of them.

A very easy way of doing this is to replace them with a 'magic namespace' -- so that they _look_ as though they're functions in a normal module. Names which have been suggested include 'meta', 'traits', 'scope', 'compiler'. Personally I think 'meta' is the nicest (and I suggested two of the others <g>). This would give us:

meta.compiles(XXX)
meta.isArithmetic; // note, property syntax OK if no arguments
meta.isArithmetic(int*);

Benefits:
* Fewer keywords: __traits -> meta, typeid() -> meta.typeid()
* Get rid of is() expressions, which are the most complicated thing in the language.
* Some meta.XXX functions could be defined in runtime library code.
* The existing __traits functions could have more useful return values.
* Retain the flexibility of __traits.


According to Andrei's reply, __traits is not a keyword (or at least does not have the downside of using a likely variable name) since __ symbols are reserved, so your assertion that less keywords isn't technically correct. But IMO, something this important deserves a keyword, and I *hate* the less keywords is unequivocally better POV. Also, I was under the impression that __traits was a placeholder until both 1) __traits proved to be a useful feature (and it has) and 2) a good name could be found, is this not the case?

I'm not sure you need to get ride of typeid. The benefits to deprecating a keyword don't seem very apparent to me, you still most likely need to keep the keyword for backwards compatibility.

I agree with you on is() expressions, but you need to replace them all, not just the is(typeof(XXX)) form.

And I agree with you on the whole. I'd say the best thing to do is implement the feature (it seems you have a good grasp on what needs to be done) and take a particularly nasty __traits-using module, and show how it looks with the new style :) Hell, even doing the second part may be enough to convince Andrei/Walter.

vote++

-Steve

Reply via email to