Thread overview | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
January 23, 2015 Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Mandatory reddit link: http://www.reddit.com/r/programming/comments/2tdy5z/interfacing_d_to_legacy_c_code_by_walter_bright/ There's been a lot of interest in this topic. |
January 23, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | On Friday, 23 January 2015 at 11:04:12 UTC, Walter Bright wrote:
>
> Mandatory reddit link: http://www.reddit.com/r/programming/comments/2tdy5z/interfacing_d_to_legacy_c_code_by_walter_bright/
>
>
> There's been a lot of interest in this topic.
Great!
|
January 25, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to FrankLike | Is it common for a C++ library you want to interface to, to use std library types in its interface? Things like iterators or maybe containers. Do those hit any of the "hard" cases, so that you'd need to change the std library to resolve the issue? |
January 29, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | Walter how far did you get to integrate with the STL ? I started writing std::vector and std::string (linux gcc libstdc++) but maybe someone already made progress on this. It's harder than I thought and will probably require a lot of work to maintain all implementations. |
January 29, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Guillaume Chatelet | On 1/29/15 4:30 AM, Guillaume Chatelet wrote:
> Walter how far did you get to integrate with the STL ?
>
> I started writing std::vector and std::string (linux gcc libstdc++) but
> maybe someone already made progress on this. It's harder than I thought
> and will probably require a lot of work to maintain all implementations.
Go for it, what we have only proof of concept for now. I know it's difficult, at a point I'll get on to it as well. Maintenance is parallelizable and I trust the community can take care of it. -- Andrei
|
January 29, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | I pushed some code for string here (nothing fancy yet) https://github.com/gchatelet/dlang_cpp_std/blob/master/cpp_std.d The linker complains about missing std::basic_string<char, std::char_traits<char>, std::allocator<char> >::__ctor() where it should be std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string() So constructors and destructors are mangled 'a la D' instead of the C++ way. |
January 29, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Guillaume Chatelet | On 1/29/2015 1:58 PM, Guillaume Chatelet wrote:
> I pushed some code for string here (nothing fancy yet)
> https://github.com/gchatelet/dlang_cpp_std/blob/master/cpp_std.d
>
> The linker complains about missing
> std::basic_string<char, std::char_traits<char>, std::allocator<char> >::__ctor()
> where it should be
> std::basic_string<char, std::char_traits<char>, std::allocator<char>
> >::basic_string()
>
> So constructors and destructors are mangled 'a la D' instead of the C++ way.
Please post this to bugzilla.
|
January 30, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Walter Bright | "Walter Bright" wrote in message news:maed4o$2da6$1@digitalmars.com... > > > > So constructors and destructors are mangled 'a la D' instead of the C++ way. > > Please post this to bugzilla. The problems with constructors go beyond mangling, so the current forced D mangling is intentional to prevent wrong-code bugs. An approach that currently works is porting the code to D, being careful to exactly match the layout and functionality. When done right, this allows templated types to be constructed with any type in either language and passed back and forth without problems. This is what I've done for dmd's Array<T> in ddmd. |
January 30, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Daniel Murphy | On Friday, 30 January 2015 at 04:08:56 UTC, Daniel Murphy wrote:
> "Walter Bright" wrote in message news:maed4o$2da6$1@digitalmars.com...
>
>> >
>> > So constructors and destructors are mangled 'a la D' instead of the C++ way.
>>
>> Please post this to bugzilla.
>
> The problems with constructors go beyond mangling, so the current forced D mangling is intentional to prevent wrong-code bugs.
>
> An approach that currently works is porting the code to D, being careful to exactly match the layout and functionality. When done right, this allows templated types to be constructed with any type in either language and passed back and forth without problems.
>
> This is what I've done for dmd's Array<T> in ddmd.
I've done the same for some matrix ctor of opencv: it's a pain but works...
The main problem I've found right now it's that sometime I'm forced to choose a struct in D mapping a class in C++ just to have the right mangling for const ref methods...
|
January 30, 2015 Re: Interfacing D to existing C++ code | ||||
---|---|---|---|---|
| ||||
Posted in reply to Paolo Invernizzi | Thx for the feedback ! bug : https://issues.dlang.org/show_bug.cgi?id=14086 I worked around the name mangling issue with pragmas for now, a new version is available here : https://github.com/gchatelet/dlang_cpp_std/blob/5d52957372f7055b95d4f62ee6d9633bd620a61d/cpp_std.d |
Copyright © 1999-2021 by the D Language Foundation