On Friday, 22 January 2016 at 16:37:31 UTC, Jacob Carlborg wrote:
On 2016-01-21 05:21, Anon wrote:
Seeing the recent extern(C++) threads, and much concern
therein, I'd
like to propose DIP87: http://wiki.dlang.org/DIP87
Destroy to your heart's content.
* How do you plan to differentiate specifying the namespace
compared with specifying the mangled name for an extern(C++)
symbol?
Ideally, by whether the `extern()` forms a block or it is
attached directly to the symbol. I understand that wouldn't work
with existing implementation in the compiler, but hopefully it
wouldn't be too difficult to do. But I know nothing of compiler
internals so am probably wrong.
* For Objective-C bindings one needs to be able to specify the
mangled name for a class or interface without affecting the
names of the methods. It's required because in Objective-C it's
possible to have the same name for a class and a protocol
(interface). In the Foundation framework (standard library)
there are a class "Object" and a protocol "Object"
I'll have to look into this more. My cursory reading told me of
"instance" methods and "class" methods, that get mangled as
"_i_<Something>_<method>..." and "_c_<Something>_<method>..."
respectively. Is this what you are talking about?
* When creating Objective-C bindings it's basically required to
specify the selector for every method
I know, because of the parameter names being part of the API (and
mangled name). I still think the approach described in the DIP
should be workable.
* In Objective-C the mangled name and the selector is not the
same. The mangled name is for the linker to find the correct
symbol. The selector is for finding the correct method
implementation at runtime
Sure, but when using ObjC code from D:
extern(Objective-C) class Something {
void moveTo(float x, float y) @selector("x:y:");
}
// Elsewhere
something.moveTo(1,2);
I don't see how the selector is doing anything more than mangling
here. Even if you have multiple methods in D that mangle to the
method name in ObjC (minus parameters), that selection is done by
D, which then mangles the name according to the selector, right?
If not, do you have an example handy to illustrate?