Function pointers/delegates default args were stealth removed?

foobar foo at bar.com
Mon Aug 27 07:03:19 PDT 2012


On Monday, 27 August 2012 at 13:44:43 UTC, Manu wrote:
> On 27 August 2012 15:48, Robert Clipsham 
> <robert at octarineparrot.com> wrote:
>
>> I seem to recall I looked at this issue myself at one point. 
>> It goes
>> something like:
>> ----
>>
>> auto foo = (int a = 1) { return a; };
>> auto bar = (int a) { return a; };
>> ----
>> int function(int) is mangled exactly the same as int 
>> function(int = 1) as
>> default args aren't used for mangling. dmd does semantic 
>> analysis on the
>> type of foo, which returns int function(int = 1), which is 
>> mangled as int
>> function(int) and stored in dmd's hashmap of types (default 
>> args aren't
>> mangled). When the semantic analysis of bar is done it checks 
>> the hashmap,
>> sees that the type is already there (has the same name 
>> mangling) and does
>> not repeat semantic analysis. If you switch the order of 
>> declarations then
>> the opposite happens - the default arg is ignored.
>>
>
> Cached in a hashmap! precisely what I suspected (without 
> knowing anything
> about it) ;)
> That explains why Walter keeps going on about the name 
> mangling. It's all
> clear.

This discussion is all sorts of wrong. Whoever said that defargs 
are metadata (Manu?) was right. Therefore it would make sense to 
implement a general metadata facility for D and use *that* for 
defargs. C++11 has annotations, so that's the place to start 
looking at. D has already enough of those pesky special case 
features, let's not add yet another one at the expense of a more 
general metadata/annotation mechanism which eventually would be 
added anyway due to popular demand.


More information about the Digitalmars-d mailing list