Moritz Maxeiner moritz at ucworks.org
Thu Apr 4 16:36:43 PDT 2013

On Thursday, 4 April 2013 at 18:31:59 UTC, deadalnix wrote:
> On Tuesday, 2 April 2013 at 15:30:53 UTC, Moritz Maxeiner wrote:
>> I've not seen any mention about that under the "Documentation" 
>> category and I've only found posts about that after explicitly 
>> searching for that problem right now. I'm sorry for not 
>> knowing about that, but if that is such a critical problem, it 
>> may be sensible to document it in an article, e.g. "Compile 
>> time function evaluation", under dlang.org's "Documentation" 
>> category - I expected dmd to not use more memory for CTFE 
>> operations than D would for runtime operations.
> I'd prefers see the problem fixed than documented. Anyway it is 
> real, and should be considered now.

For the internal C bindings I'll stick with the CTFE (although 
I'll try to minimize/optimize its use). For the deimos-llvm pull 
request I used CTFE as well, but Jens already said that he thinks 
it's more natural to use multiple branches for supporting 
different LLVM versions (See here: 
https://github.com/jkm/deimos-llvm/pull/2) and llvm-d now 
supports using deimos-llvm as a replacement for its internal C 
bindings, so if the CTFE is a serious problem for someone, using 
deimos-llvm once he has integrated the split the CTFE into the 
branches would be the best option, I think.

>> Regardless of that, the llvm-d's D API will need to include 
>> all of the C API bindings anyway (however they may be done) 
>> and llvm-d's internal C bindings exist primarily for the use 
>> of the D API. If you only want the C bindings anyway, consider 
>> using deimos-llvm. I've forked it and am going to update it to 
>> 3.2 and 3.3svn: https://github.com/Calrama/deimos-llvm
> I don't think all modules need to, but you know better than me.

At present not yet, but since all LLVM C API functions wrap 
around LLVM's C++ class functions (except a few globals, which 
wrap around C++ globals) afaik to mimic as much of the LLVM 
hierarchy as possible, all these wrapper functions will be 
needed. I'll only be able to tell for sure once I'm finished, 
though and judging be the amount of work left that's going to 
take a while.

>> I don't use C header -> D module in llvm-d's internal C 
>> bindings, llvm-d's D API, however, can use either llvm-d's 
>> internal C bindings or (soon) deimos-llvm. I do not consider 
>> it pointless to raise the point that if you (the user, not you 
>> specifically) want to have a C header -> D module translation 
>> you can use deimos-llvm together with llvm-d's D API without 
>> llvm'd internal C bindings, that's all.
> The thing is that any automated tool will suffer from the 
> translated module name as it cannot transform #include 
> directives.

I'm not quite sure where you'd use an automated tool here that 
needs to be aware of any translation from C to D but if you do 
why not change the tool to make it aware of the 
constant/type/functions approach - It's not something I invented 
or actually new, see Derelict for example...

In any case, if you really need that, go with the deimos-llvm 
bindings. All you have to do is use "-version=DEIMOS_LLVM" and 
the internal C bindings won't even be imported by the D API and 
subsequently don't have to be compiled.

More information about the Digitalmars-d-announce mailing list