Real World usage of D, Today (was Re: challenge #2: implement the varargs_reduce metafunction)
Andrei Alexandrescu (See Website For Email)
SeeWebsiteForEmail at erdani.org
Fri Jan 26 02:23:17 PST 2007
Kevin Bealer wrote:
> I would prefer for the types passed to a template to carry a lot more
> info across, and let the user decide which parts to throw away. You
> could call this a "strict" template, if you want backward compatibility
> (but it's early in D's template design so maybe we don't care).
>
> I'm thinking that this (current) syntax:
>
> template foo(T) {
> T plus(T x, T y) { return x + y; }
> }
>
> would be equivalent to:
>
> strict template foo(T) {
> T.value plus(T.value x, T.value y) { return x + y; }
> }
>
> In a 'strict' template the type "T" would carry a lot of baggage. It
> would know if T was constant (as in a local "const int x = 10"), or a
> constant view (maybe) whether it is an lvalue, rvalue, literal,
> known-at-compile-time, static array, result of arithmetic, etc.
>
> I couldn't tell you the actual names and definitions of all of these
> attributes -- I imagine they could be added one at a time as the need
> arose, starting with an equivalent for "storageof".
[snip]
These are great points. The direction I hope to steer things in would be
to (backward-compatibly) continue matching types "lossily", but to also
give you the ability to pattern-match the extra info when you want.
The syntax that I am proposing does away with storageof and is very much
in spirit with the current D:
S int foo(S, T)(S T t) { }
It does exactly what it says it does, in a clear and terse manner, and
is 100% within the spirit of existing D:
* It's customized on symbols S and T
* It's matching (by sheer position of S and T) the storage (i.e., all of
the gooey fuzzy nice information about the argument passed) and the type
of the incoming argument
* In this example it uses the storage in the result type (e.g. const
goes to const)
* Inside the function can easily use either T separately or S T as a
group that transports the storage around. You have total flexibility
(and don't forget that juxtaposition is always easier than extraction).
So far we're only thinking of storage-like attributes, but a good deal
of information can be encoded under the loose declaration of "storage".
Andrei
More information about the Digitalmars-d
mailing list