Just pitching in as somebody that has worked on a few C bindings, some small some big (current one is XCB, which has the lovely xproto.h file coming to over 15000 lines). Doing automatic conversion of C headers, properly, is difficult, if not impossible. There are all sorts of gotchas and strange things that make trying to write bindings difficult to automate.

A lot of APIs rely on the CPP, as part of the API itself. This is an issue because you generally need to replicate those parts of the API in some D way, without completely mangling the original API, generally you want to be able to copy-and-paste C code and have it work as D code.

Not all defines can, or should, be converted to enums, even if you distinguish macros and constants. Not all typedefs can be converted to aliases. Different libraries use different ways of typedef'ing their structs and the like. Each library needs a specific touch to make the D bindings as true to the original as possible, and a tool cannot do that well.

Manually writing bindings is boring, but also quite medatitive. It is simple enough that you can just shut off, or you can make it a challenge to find the best macro for converting a certain construct in this library. But it is generally not that difficult.

The difference between using bindings and FFI is that bindings are compile time and you get all the advantages from that, such as type checking and the like. FFI is all runtime, so you don't get that, unless you do some crazy CTFE magic.

--
James Miller

Reply via email to