Thread overview
Creating D bindings for a C library
Nov 24, 2015
cym13
Nov 25, 2015
ponce
Nov 25, 2015
Andy Smith
Nov 25, 2015
Andy Smith
November 24, 2015
Hello all,

I'm considering creating some D bindings for a C library.  Before I start, I was wondering if anyone could advise me on the current state-of-the-art in automatically converting C headers to .d or .di files; it's a long time since I've looked at anything to do with this and the interfacing-with-C page in the D reference doesn't mention any tools.

Thanks in advance for any advice,

Best wishes,

    -- Joe
November 24, 2015
On Tuesday, 24 November 2015 at 23:14:14 UTC, Joseph Rushton Wakeling wrote:
> I'm considering creating some D bindings for a C library.

I should probably clarify that I know what to do assuming I have to write all the bindings manually.  However, as the library has quite a lot of header files, I'd really much rather auto-convert as much as possible, hence the questions above :-)
November 24, 2015
On Tuesday, 24 November 2015 at 23:22:24 UTC, Joseph Rushton Wakeling wrote:
> On Tuesday, 24 November 2015 at 23:14:14 UTC, Joseph Rushton Wakeling wrote:
>> I'm considering creating some D bindings for a C library.
>
> I should probably clarify that I know what to do assuming I have to write all the bindings manually.  However, as the library has quite a lot of header files, I'd really much rather auto-convert as much as possible, hence the questions above :-)

There are some binding generator the most two famous being htod and dstep: http://wiki.dlang.org/List_of_Bindings#Binding_generators
November 25, 2015
On Tuesday, 24 November 2015 at 23:22:24 UTC, Joseph Rushton Wakeling wrote:
> On Tuesday, 24 November 2015 at 23:14:14 UTC, Joseph Rushton Wakeling wrote:
>> I'm considering creating some D bindings for a C library.
>
> I should probably clarify that I know what to do assuming I have to write all the bindings manually.  However, as the library has quite a lot of header files, I'd really much rather auto-convert as much as possible, hence the questions above :-)

If doing it by hand, some tips here: http://p0nce.github.io/d-idioms/#Porting-from-C-gotchas
November 25, 2015
On Tuesday, 24 November 2015 at 23:49:26 UTC, cym13 wrote:
> There are some binding generator the most two famous being htod and dstep: http://wiki.dlang.org/List_of_Bindings#Binding_generators

Is htod maintained any more?  I had the impression it had kind of fallen by the wayside.

I'll give dstep a go, though. Thanks!
November 25, 2015
On Wednesday, 25 November 2015 at 17:45:48 UTC, ponce wrote:
> If doing it by hand, some tips here: http://p0nce.github.io/d-idioms/#Porting-from-C-gotchas

Cool, thanks.  The stuff about using c_long and c_ulong is particularly useful/relevant to my use-case, so it's good to be reminded of that.
November 25, 2015
On Wednesday, 25 November 2015 at 19:40:28 UTC, Joseph Rushton Wakeling wrote:
> On Wednesday, 25 November 2015 at 17:45:48 UTC, ponce wrote:
>> If doing it by hand, some tips here: http://p0nce.github.io/d-idioms/#Porting-from-C-gotchas
>
> Cool, thanks.  The stuff about using c_long and c_ulong is particularly useful/relevant to my use-case, so it's good to be reminded of that.

Hi Joseph,

How's things in Berlin? :-) I'm not sure how complex the C-Api you're wrapping is, but I have to say I found that writing a minimal (but complete) subset of an existing C-API to be quite straightforward and enjoyable. A plus point was that selecting only the useful minimal subset meant the D wrapper ended up being a lot cleaner and meant that unused (or undesirable) features simply weren't there in the wrapped API.

YMMV but it's one to bear in mind...

Cheers,

A.










November 25, 2015
On Wednesday, 25 November 2015 at 21:19:51 UTC, Andy Smith wrote:
> On Wednesday, 25 November 2015 at 19:40:28 UTC, Joseph Rushton Wakeling wrote:
>> On Wednesday, 25 November 2015 at 17:45:48 UTC, ponce wrote:
>>> If doing it by hand, some tips here: http://p0nce.github.io/d-idioms/#Porting-from-C-gotchas
>>
>> Cool, thanks.  The stuff about using c_long and c_ulong is particularly useful/relevant to my use-case, so it's good to be reminded of that.
>
> Hi Joseph,
>
> How's things in Berlin? :-) I'm not sure how complex the C-Api you're wrapping is, but I have to say I found that writing a minimal (but complete) subset of an existing C-API to be quite straightforward and enjoyable. A plus point was that selecting only the useful minimal subset meant the D wrapper ended up being a lot cleaner and meant that unused (or undesirable) features simply weren't there in the wrapped API.
>
> YMMV but it's one to bear in mind...
>
> Cheers,
>
> A.

PS - I forgot to insert the words 'by hand' in there somewhere. Also for additional guidance aldacron has some good blog posts on the wrapping process on the web somewhere. I pretty much used his guidance when I started my experiments with wrapping and have to say I was pretty satisfied with the end results :-)