Dependency management in D
Scott Wilson via Digitalmars-d
digitalmars-d at puremagic.com
Fri Sep 19 10:38:20 PDT 2014
On Friday, 19 September 2014 at 02:05:43 UTC, ketmar via
Digitalmars-d wrote:
> On Fri, 19 Sep 2014 01:42:58 +0000
> Scott Wilson via Digitalmars-d <digitalmars-d at puremagic.com>
> wrote:
>
>> Do .di files contain only templates (no comments and plain
>> functions? How well do they work? thanx
> as for 'how .di files work' question: '.di' is just a plain D
> source,
> just with stripped function bodies. nothing very special about
> that.
>
>
> so yes, .di files contains only templates and function
> declarations
> (without function bodies). this *can* work, but when it comes
> to CTFE...
>
> look at the following:
>
> === z00.d ===
> module z00;
> string foo(string name) { return `int `~name~`() {return
> 42;}`; }
>
> === z01.d ===
> import z00;
> mixin(foo(`bar`));
> void main () {
> import std.stdio;
> writeln(bar());
> }
>
> and .di file generated with `dmd -H -c -o- z00.d`:
> === z00.di ===
> // D import file generated from 'z00.d'
> module z00;
> string foo(string name);
>
>
> do you see any gotchas? heh:
> # dmd z01.d
> z01.d(2): Error: foo cannot be interpreted at compile time,
> because it
> has no available source code
> z01.d(2): Error: argument to mixin must be a string, not
> (foo("bar"))
> of type string
>
> the compiler has no source for foo() anymore, so it can't do
> CTFE.
>
> you can avoid this by turning foo() into template:
> string foo()(string name) { return `int `~name~`() {return
> 42;}`; }
>
> but then you should turn all your functions that can be used in
> CTFE
> into templates, and there will be no much sense in .di file
> anyway.
>
>
> to make a long story short: don't use .di files unless you
> *REALLY*
> *KNOW* what you're doing. and even then think twice.
That CTFE is used randomly everywhere? Otherwise I dont grok
whats so complicated. If I want visible code aka templates and
CTFE I put that in the .di. For separation I put declaration in
.di and impl in .d.
What subtleties Im missing?
Scott
More information about the Digitalmars-d
mailing list