Combining Delegate and Functions

Eric Poggel dnewsgroup at yage3d.net
Tue Jun 30 18:21:27 PDT 2009


bearophile wrote:
> Jesse Phillips:
>> I seem to recall the distinction was going to be going away or minimized. Is this already done? Will it be going into D2?<
> 
> D2 docs say:
> http://www.digitalmars.com/d/2.0/function.html
>> Future directions: Function pointers and delegates may merge into a common syntax and be interchangeable with each other.<
> 
> I think the situation isn't changed. It's one of the *many* details that look forgotten. There's usually time to fix them later once the big things are in place.
> 
> Bye,
> bearophile

Perhaps "functions" should be eliminated except for being accessed via a 
   delegate's .funcptr property (which could also be used for c 
compatibility).  In addition,

int foo(int a) {};

would be the same as:

const int delegate(int) foo = delegate int(int a) {};

I don't have D2 installed, but the above fails to compile in d1 
(non-constant expression __dgliteral1).  I've also always found the 
above syntax confusing, on the left we have "int delegate" and on the 
right, "delegate int".  Perhaps it should always be "int delegate", and 
whether a function body is present determines whether the expression is 
a type or an anonymous function.  "int delegate" is also similar to how 
other functions are defined, since "delegate" simply replaces the 
function name, and it's similar to other languages, such as ECMA script 
v4 (ActionScript 3)

Perhaps also, functions should have available an arguments property that 
would be a struct of the functions arguments, of type 
ParamTypeTuple!(func), e.g.

void foo(int a)
{	bar(foo.arguments);
}
void bar(int a)
{	writefln(bar.arguments.a); // writes 3
	writefln(a); // writes 3
}
foo(3);

To me, this is much more straightforward than using std.stdarg when 
varargs come into play.  Perhaps foo.closure could reference any 
variables captured in a closure.

Finally, in D2, was a way ever figured out to differentiate between 
delegates and closures, so that delegates can be used w/o heap allocation?

Hopefully I didn't come across as dictating policy.  These are just my 
ideas for simplifying functions/delegates in D2 or beyond.



More information about the Digitalmars-d mailing list