dropping parentheses on template instantiation
Ary Borenszweig
ary at esperanto.org.ar
Mon Oct 6 12:39:50 PDT 2008
KennyTM~ wrote:
> KennyTM~ wrote:
>> Ary Borenszweig wrote:
>>> Andrei Alexandrescu escribió:
>>>> Denis Koroskin wrote:
>>>>> On Sun, 05 Oct 2008 22:18:26 +0400, 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.
>>>>>
>>>>> Just to clarify things: Do you propose moving the first template
>>>>> argument outside of the parentheses *or* ditching them iff there is
>>>>> only one parameter? I mean, what does the original code look like,
>>>>> because there is ambiguaty in your statement (to me):
>>>>
>>>> Ditch parens if there's only one argument. In that case the extra
>>>> character becomes an enabling asset, not a liability.
>>>>
>>>>> const int n = 42;
>>>>> auto covariance = Matrix!(real, n, n); <-> auto covariance =
>>>>> Matrix#real(n,n);
>>>>>
>>>>> *or*
>>>>>
>>>>> auto covariance = Matrix!(real)(n, n); <-> auto covariance =
>>>>> Matrix#real(n,n);
>>>>
>>>> The latter.
>>>>
>>>>> Other than that Vector at real or Vector#real both sound good!
>>>>
>>>> I agree. In fact "Vector at real" sounds like a good way of talking
>>>> about templates instead of "Vector instantiated with real". One
>>>> reason for which I think "this" is a poor choice (as opposed to e.g.
>>>> "self") is that it's very hard to talk about it.
>>>
>>> I like Vector at real. Also: HashMap@(Key, Value) looks nice to me. The
>>> only thing is that in spanish keboards, I have to do alt-gr + Q to
>>> get one @ :-P
>>
>> It seems that
>>
>> Stack!int
>> Stack at int
>> Stack#int
>>
>> are the only choices we're left with. All others are either binary
>> operators, delimiters or some kind of parenthesis. But frankly
>> speaking all of these characters are not very pretty :/
>
> I suddenly realized you could use digraphs too.
>
> Vector::Stack::Tuple::(Positive::real, Matrix::real::(3,3))
>
> Vector->Stack->Tuple->(Positive->real, Matrix->real->(3,3))
>
> Vector<>Stack<>Tuple<>(Positive<>real, Matrix<>real<>(3,3))
>
> Vector.~Stack.~Tuple.~(Positive.~real, Matrix.~real.~(3,3))
>
> Vector\\Stack\\Tuple\\(Positive\\real, Matrix\\real\\(3,3))
>
> Vector^^Stack^^Tuple^^(Positive^^real, Matrix^^real^^(3,3))
>
> whatever. (These examples should not be taken seriously, but please
> don't restrict to only one character.)
If you take off the restriction of one character, I'd suggest two ways
of doing it:
Vector:-)int:-)
for those who really like templates, and:
Vector:'(int:'(
for those who are scared of them, don't understand them, don't like
them, etc.
... like me
More information about the Digitalmars-d
mailing list