The CAPI Manifesto

Walter Bright newshound2 at digitalmars.com
Sun Oct 16 23:04:06 PDT 2011


On 10/16/2011 10:24 PM, Gor Gyolchanyan wrote:
> I think there might be a few tricks to improve the C API without
> adding any new code.
> For example, replace by-pointer parameter declarations with _out_
> parameters when applicable (the underlying function signature is the
> same), replace const parameters with in parameters, etc.
> This won't change the C API a single bit (won't even add new code),
> but will vastly improve readability and sometimes safety of the API.
> In other cases, some minor additions could be made, for example:
> libjpeg provides API to register error handlers, instead of setting
> errno and such. Those kind of situations could be used to throw
> exceptions. It only takes a static this() and a few lines of code.
> In case those kind of modifications/additions are made, there could be
> a standard way to disable them and use the original version.

If you want to add a layer on top of the C API, that would be fine. std.zlib is 
an example of that.

But the idea of CAPI is NOT to add a layer. Not fix, extend, refactor, improve, etc.

Just the thinnest possible direct calls to the C API. Any improvements, fixes, 
whatever, should be a separate project.

I know the urge to do these fixes can be overpowering, but they end badly every 
time. It's like trying to mix the language's lexer up with the semantic analysis :-)

They really are better off being separate and distinct.

For one thing, it makes the inevitable maintenance *FAR* easier, as those C APIs 
will change. Updating the corresponding D module becomes simple then - just a 
line by line comparison and tweaking. There would be no tearing of hair and 
rending of garments.

For another it means you'll have to regenerate the C documentation, but with all 
the changes you made. Then, as the C guys improve their documentation, your 
layer falls behind, gets neglected, and finally sucks in comparison.


More information about the Digitalmars-d mailing list