Opt-in for including argument names in ABI

Seb seb at wilzba.ch
Thu Sep 17 14:12:13 UTC 2020

tl;dr: `pragma(mangle, withArgumentNames:true)` would be a way to 
tell the compiler to include the argument names in the ABI, s.t. 
overloads with different names can be resolved.


1) Provide implementations for different input formats

sin(deg: 90);
sin(rad: 0.5);

2) Allow for a smooth deprecation

deprecated pragma(mangle, withArgumentNames:true) void snoopy(int 
dummy); // A
void snoopy(int width); // B

snoopy(dummy: 10); // A (-> deprecation message)
snoopy(width: 10); // B
snoopy(10); // B

Mangling would be roughly sth. like:

_D9app3fooFiQdummyZv // includes argument names
_D9app3fooFiZv // regular

This could potentially result in really names with many 
parameters, but I doubt it would be as bad as a few templated 
ranges (see e.g. 
However, if long names are a concern, solutions could be:

1) Let the user specify mangling himself, e.g.

deprecated pragma(mangle, withArgumentNames:{"dummy": "d"}) void 
snoopy(int dummy); // A

2) Let the user define a custom mangling postfix:

deprecated pragma(mangle, postfix:"dummy") void snoopy(int 
dummy); // A

3) Or build a hash of all arguments names.

What are your though on optionally allowing to include argument 
names into the ABI?

More information about the Digitalmars-d mailing list