catchy phrase for this idiom?

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Mar 12 13:26:10 PDT 2009


Jarrett Billingsley wrote:
> On Thu, Mar 12, 2009 at 9:33 AM, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>> Hello,
>>
>>
>> I'm looking for a catchy phrase denoting this D idiom:
>>
>> template Blah(Stuff)
>> {
>>   alias ... Blah;
>> }
>>
>> i.e., defining inside a template a symbol of the same name as the template
>> itself. Then you can use Blah!(X, Y) to mean Blah!(X, Y).Blah.
>>
>> What would be a catchy, descriptive, and memorable phrase for this?
> 
> ...Unnecessary?
> 
> You know i have to be contrary :P but I have never found a use for
> multiple declarations inside a template _except_ when it's used as a
> mixin.  Most of the time, I declare exactly one symbol inside the
> template, and it's always the same name as the template.  Having to
> specify the name of the template over and over inside it is a blatant
> violation of DRY, easy to mess up (typos, changing the template name
> etc.) and is hard to diagnose when you do it wrong, since the compiler
> just has no idea what you're trying to do and you end up with all
> sorts of confusing errors about voids having no value.
> 
> Allowing multiple declarations inside templates looks good in the
> spec, but honestly, I only ever use it for mixins.  My mixin templates
> are also never used as anything other than mixin templates, creating
> this sort of split between templates and mixins, even though they're
> represented by the same language structure.  Mixins are really more
> like a limited form of semihygenic AST macro, one which can only
> expand to declarations and not arbitrary code structures.
> 
> If templates were limited to a single declaration - and mixins were
> either changed to a different "type" or replaced outright by macros -
> I'd be perfectly happy, and there'd be no need for Implicit Template
> Name Forwarding (do you see what I just did there ;) ).

Nice. The problem however is that very, very often I need to store 
intermediate results, otherwise the code becomes quickly unreadable or 
spread across too many different non-reusable templates. What I now do 
is e.g. create a short template Blah(X, Y, Z) that aliases itself to 
BlahImpl!(X, Y, Z).Result. Hardly elegant.

I suggested Walter to allow templates using the eponymous trick to be 
able to define private symbols.


Andrei



More information about the Digitalmars-d mailing list