D and C APIs
Atila Neves via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jan 13 00:55:18 PST 2016
On Tuesday, 12 January 2016 at 18:59:01 UTC, Walter Bright wrote:
> Many times I've considered simply incorporating a C compiler
> into the D compiler, and then:
>
> import "stdio.h";
>
> The perennial problem, however, is the C preprocessor and all
> the bizarre things people do with it in even the most mundane
> header files. The problem is NOT, however, implementing the
> preprocessor, as that's already done. The problem is C #include
> files do not exist in a vacuum; they derive their meaning based
> on the compiler used, the predefined macros, and the host file
> they were #include'd in.
>
> Well, and the inevitable C language extensions, different for
> every compiler, and the developers determined to use every last
> one of them :-(
>
> Then there's what type does 'char' map to?
>
> When the D compiler guesses wrong about all these issues,
> there's no way to see or correct what it did, and so we wind up
> with endless "bugs" and support issues.
>
> It's better to have a separate translator, and the user can
> tweak the results of it.
I understand the issues. But the reality remains that since any
C++ compiler is also a C compiler, the same one will get used to
parse the headers and the C++ code that includes it. The result
being that 99.9% of the time I can write C++ code that #includes
the C headers and not have to think about it (the other 0.1% are
the parts of C that are incompatible with C++ - people think this
is 0 but it isn't).
It's the _only_ reason I'd personally choose to call C from C++
instead of D. And, unfortunately, a decision I made weeks ago.
This discussion has made me want to try DStep again on the weird
headers that I have and file bugs if it doesn't work.
Atila
More information about the Digitalmars-d
mailing list