dropping parentheses on template instantiation

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sun Oct 5 13:05:14 PDT 2008


Jarrett Billingsley wrote:
> On Sun, Oct 5, 2008 at 2:18 PM, Andrei Alexandrescu
> <SeeWebsiteForEmail at erdani.org> wrote:
>> I just realized something different. After making an informal review of some
>> code, I saw that a large percentage of template instantiations only need ONE
>> argument.
>>
>> This makes me think, with the old "!" notation, parentheses could be dropped
>> entirely without prejudice:
>>
>> auto covariance = Matrix!real(n, n);
>> auto normalized = SparseVector!double(n);
>>
>> and so on.
>>
>> To the unbridled joy of the enemies of the Sad Pirate, the dot won't work
>> for template instantiation because without the parentheses it DOES engender
>> ambiguity.
>>
>> Now say we take the following route:
>>
>> 1) We find something different from shouting
>>
>> 2) We drop the parentheses for 1 argument
>>
>> That sounds like a possible winner. In this case the "#" becomes
>> considerably more attractive, in fact very attractive exactly because it
>> looks unlike any letter:
>>
>> auto covariance = Matrix#real(n, n);
>> auto normalized = SparseVector#double(n);
>>
>> Ideas?
>>
>>
>> Andrei
>>
>> P.S. The Sad Pirate is the emoticon
>>
>> .(
>>
>> It doesn't have an eye and is sad, too.
>>
> 
> Hmm.
> 
> I'm trying to think -- is there anywhere in the grammar where something like
> 
> Matrix int
> 
> would be legal as something else?
> 
> That is, I'm suggesting that we take a page from i.e. Haskell's book,
> and simply allow the first argument to a template to be separated from
> the template name with a space.
> 
> auto covariance = Matrix real(n, n);
> auto normalized = SparseVector double(n);
> 
> Positive real x = 3.4;
> Positive real y = 6.8;
> Positive real z = y - x; // error
> 
> "Identifier Identifier" does not occur anywhere in the grammar either,
> as far as I can tell.
> 
> Matrix Positive real(n, n);
> 
> Please comment!(int);

Boy this is going somewhere.

Andrei



More information about the Digitalmars-d mailing list