The CAPI Manifesto

Walter Bright newshound2 at digitalmars.com
Sun Oct 16 19:02:52 PDT 2011


Brad and I were talking about some D code that needed openssl support, when we 
ran into the same old problem:

No D files corresponding to the openssl C .h files.

It's not that these are a big problem to create, it's just that they are not 
done, and it tends to turn off people from using D. D is binary API compatible 
with C, but only with a corresponding D import file. This, out of the box, makes 
D *harder* to use than C.

Lots of people roll their own, but that work is hard to find and haphazard.

This problem keeps coming up again and again.

So I propose creating, on github.com/D-Programming-Language, a new repository 
called CAPI.

The CAPI Manifesto
------------------

CAPI is a collection of C header files to publicly available C libraries
and their translations to D. The idea is that if, in C, to interface to a library
one would write:

    #include "foo.h"

then the corresponding D code would look like:

    import foo;

Each C .h file would have a corresponding .d file. Each C directory would
have a corresponding D directory, for example:

    #include "bar/foo.h"   // C

    import bar.foo; // D

The top level directory of each library will have two subdirectories:

    C/
    D/

and there will be a one-to-one correspondence of files and directory structure
between them.

The D import files will be a rote translation of the corresponding C .h file.
No attempt will be made to fix, improve, or extend the C api. No attempt will
be made to duplicate the C documentation, or replace it in any way. There
will be no unittests. Every effort will be made to avoid needing any D specific
binary files.

When an updated version of the C header files becomes available, those will
get checked into the C subdirectory tree, and then the corresponding D files
will get updated.

Version tags used must match the version tags used by the C API files.

The license used for the D versions should match the C ones, as they are a
derived work.


More information about the Digitalmars-d mailing list