Jump to page: 1 2
Thread overview
Interfacing D to existing C++ code
Jan 23, 2015
Walter Bright
Jan 23, 2015
FrankLike
Jan 25, 2015
Andrew Godfrey
Jan 29, 2015
Guillaume Chatelet
Jan 29, 2015
Guillaume Chatelet
Jan 29, 2015
Walter Bright
Jan 30, 2015
Daniel Murphy
Jan 30, 2015
Paolo Invernizzi
Jan 30, 2015
Guillaume Chatelet
Feb 01, 2015
Sativa
Feb 02, 2015
Ben Boeckel
Feb 02, 2015
deadalnix
January 23, 2015
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
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
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
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
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
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
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
"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
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
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
« First   ‹ Prev
1 2