equivariant functions

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Oct 13 05:56:17 PDT 2008


Jason House wrote:
> Andrei Alexandrescu Wrote:
> 
>> ore-sama wrote:
>>> Andrei Alexandrescu Wrote:
>>> 
>>>> typeof(s) stripl(const(char)[] s);
>>>> 
>>>> This signature states that it returns the same type as an
>>>> argument. I propose that that pattern means stripl can accept
>>>> _any_ subtype of const(char)[] and return that exact type.
>>>> Inside the function, however, the type of s is the type
>>>> declared, thus restricting its use.
>>> this conflicts with current definition of typeof. Currently 
>>> typeof(s) stripl(const(char)[] s); should be interpreted exactly
>>> as const(char)[] stripl(const(char)[] s); it's unclear that
>>> typeof here gets type of actual argument rather than parameter.
>>> Currently typeof applies to parameter.
>> That is correct.
>> 
>> Andrei
> 
> I've never understood the reuse of keywords for new meanings. I much
> prefer new keywords for new concepts.

Even in natural language identical words are reused for various 
different meanings. This suggests that people would not feel comfortable 
with a very large vocabulary. The size of vocabularies varies 
dramatically, but if you look closer you'll see that languages with 
large vocabularies tend to have simpler grammars, suggesting that a 
language's overall complexity is a constant-sum game.

In programming languages growing the vocabulary indiscriminately is 
worse because it chews into the vocabulary available to user-defined 
symbols.

Also, whenever a feature is to be integrated into the language, it is 
preferable if possible to integrate it under an existing concept instead 
of "allocating" a new concept to it.


Andrei



More information about the Digitalmars-d mailing list