More automated interfacing of D with C codebases

CapitalLetterC zarathustra.zoroaster at gmail.com
Mon Oct 15 10:20:49 PDT 2012


On Monday, 15 October 2012 at 12:54:51 UTC, Jacob Carlborg wrote:
> On 2012-10-15 13:51, CapitalLetterC wrote:
>> This will be my first posting here, but I've been obsessed 
>> with D since
>> before there was a D2 standard. Despite that rather long 
>> period of
>> obsession, it's only just now that I've started seriously 
>> using D as I
>> attempt to code-up some POC projects to demonstrate that the 
>> language is
>> mature enough for serious development, or at least the kind of
>> development we're doing, anyway.
>>
>> So, that out of the way, I suppose I should apologize in 
>> advance for
>> what must amount to a pretty dumb question, since I truly 
>> couldn't have
>> been the first to think of this: with regard to interfacing D 
>> with C
>> libraries, why would we require a project like Deimos which 
>> ensures that
>> each codebase is ported, almost entirely, by hand? 
>> Theoretically,
>> shouldn't there be some kind of autotools-like method to 
>> establish
>> something like, config.d.in which is then used via 
>> abstractions to
>> properly configure the rest of the D wrapper? Obviously, D 
>> doesn't have
>> a preprocessor, but couldn't one synthesize that with a series 
>> of
>> judicious version() blocks? Then, whenever someone goes to 
>> build the
>> application on their system, you'd have something to a series 
>> of
>> autoconf-like tests to fill in the proper sections of of 
>> config.d.in and
>> get out a config.d suitable for their system.
>>
>> I'm really sorry if there's some stupidly obvious reason this 
>> couldn't
>> work and I'm just not seeing it, or if this is some n00b 
>> question you
>> get all the time.
>
> The header files need to be ported so D can find the 
> declarations of the functions and types. There are a couple of 
> tools that can do most of the work, but not completely. Macros 
> are specially hard to port automatically.
>
> https://github.com/jacob-carlborg/dstep

Actually, I understand perfectly well why the headers need to be 
ported to D code, what I was more wondering is if anybody knew of 
or had ever tried to use some kind of build system to automate 
the process to the greatest extent possible. So, for example, as 
a result of the configuration process certain features may be 
implicitly or explicitly enabled/disabled, without probing the 
individual user's configuration, you wouldn't know that, so how 
does one maximize portability, in that case? If you simply go to 
support the maximal set of features, you may wind up with a bunch 
of codepaths that go nowhere, likewise, if you choose only to 
support the minimal set of functionality, you may not wind up 
with code that's not useful to anyone, yourself included. 
Granted, I hadn't thought of the difficulty in porting things 
like macros, but I'd imagine that, in the absolute worst case, 
you could synthesize their behavior with templates.

But there are all sorts of issues in that same vein, like how 
certain structs get put together, what types are aliased with 
what, etc. That's why I was wondering if you could handle this 
analogously to how C does, with a config file that gets setup by 
a kind of configuration system.


More information about the Digitalmars-d-learn mailing list