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