Revised RFC on range design for D2

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Sep 27 07:13:54 PDT 2008


Sergey Gromov wrote:
> In article <gbjihf$2803$1 at digitalmars.com>, 
> frank at youknow.what.todo.interNETz says...
>> Andrei Alexandrescu wrote:
>>> Steven Schveighoffer wrote:
>>>> You are assuming that the C language decision to require parentheses 
>>>> for all functions was a design mistake.  I would argue that the design 
>>>> was on purpose and correctly served that purpose.  The purpose was to 
>>>> remove ambiguity when faced with understanding code without all the 
>>>> context.
>>> I have stated my assumption and its basis. What is the basis of yours?
>> Yum. I think the problem is that when C was designed, K&R didn't consider
>> the use of classes with properties using getter and setter methods.
>> Therefore, it made sense to have the naked function name denote the
>> function pointer, and make braces following an identifier the mark of a
>> function call. I initially had some trouble accepting the explicit & in D
>> to get the function pointer myself.
>> I wouldn't go so far as to call that property of C a design mistake in
>> light of the actual intensions of K&R. But I definitely would defend
>> the choice of a language designer to change that feature in light of
>> more modern programming paradigms.
> 
> Functions in D are first-class values.  It's awkward that a first-class 
> value cannot be accessed by its identifier.

I agree. But then use of functions for invocation dwarfs use of
functions as first-class values, so I think requiring & for the latter
is a sensible engineering decision.

Besides, it's more efficient to use them as alias parameters, so why not
encourage that too. And aliases do not need a "&" :o).

If you want to discuss language design mistakes, why don't you discuss a 
real mistake - the infamous "lazy"? Having a storage class change the 
way a type is used - now that's the perfect example of the tail wagging 
the dog. Ambiguity, confusion, non-scalability, and sheer nonsense - you 
can have it all with lazy. Lazy should be either fixed or honorably 
discharged pronto.


Andrei



More information about the Digitalmars-d-announce mailing list