Revised RFC on range design for D2

Don nospam at nospam.com.au
Mon Sep 29 07:41:44 PDT 2008


Andrei Alexandrescu wrote:
> 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.


By the way, D supports declarations of function type (not function 
pointer), though it's not documented in the spec. They always struck me 
as a really odd feature in C, and they're pretty confusing for newbies:

typedef void Func(int);

Then you get oddities

Func * f = &foo; // OK.

Func f = foo; // You might expect this to work, but it makes no sense.

This is a case where you do not intuitively expect "foo" (with no &) to 
be a function pointer. You might as well make it a function invocation.

It's pretty interesting to fool around with these fellas in an is() 
expression.

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

Indeed.


More information about the Digitalmars-d-announce mailing list