#include C headers in D code

Atila Neves atila.neves at gmail.com
Mon Apr 16 11:20:51 UTC 2018


On Saturday, 14 April 2018 at 04:07:12 UTC, Petar Kirov 
[ZombineDev] wrote:
> On Friday, 13 April 2018 at 10:31:43 UTC, Atila Neves wrote:
>> On Wednesday, 11 April 2018 at 14:33:26 UTC, Jacob Carlborg 
>> wrote:
>>> On Monday, 9 April 2018 at 11:03:48 UTC, Atila Neves wrote:
>>>> Here's my blog post about my project that allows directly 
>>>> #including C headers in D*
>>>
>>> I don't know the exact details of your project but can't you 
>>> just:
>>>
>>> 1. Copy the includes
>>> 2. Paste them into a C file
>>> 3. Run DStep on the C file
>>> 4. Replace the includes in the first file with the result 
>>> from DStep
>>>
>>> This would require changing DStep to always return `false` 
>>> here [1]. Or perhaps run the preprocessor to expand the 
>>> includes and then run DStep.
>>>
>>> [1] 
>>> https://github.com/jacob-carlborg/dstep/blob/master/dstep/translator/Translator.d#L326
>>>
>>> --
>>> /Jacob Carlborg
>>
>> That wouldn't have the same semantics as I want.
>>
>> I tried using dstep as a library. It didn't work.
>
> You also mentioned this in the reddit thread, though I'm still 
> curious to understand what's difference in the semantics 
> between the approach you have taken and the approach Jacob 
> proposed.

You can use the C macros in the headers that you #include in your 
dpp file.

dstep has a lot of code for translating macros. I don't want to 
translate macros at all, but it's deeply intertwined with 
translating everything else. This bug just can't happen with the 
dpp approach:

https://github.com/jacob-carlborg/dstep/issues/166

In the idea above it assumes that all #include directives are 
together at the top of the file. They probably are, but they 
might not be for some reason. I can't remember the specifics, but 
dstep by default ignores declarations from other headers because 
the idea is to translate this one particular header. I don't want 
that either. I also don't want D code generated that has an 
`import` to a D file that's actually a translation of another C 
header.

I want it to work like it does in C++. dstep doesn't set out to 
do that, which is fine, but contorting it to make it do what I 
wanted it to was more trouble than it was worth.

Believe me, if I can avoid writing code, I do. Writing 
translations from scratch was not a decision I made lightly. In 
the end it turned out to be a lot less work than I thought though 
(just over 500 SLOC).


Atila


More information about the Digitalmars-d-announce mailing list