[D-runtime] Why does druntime us .di files instead of .d?

Jonathan M Davis jmdavisProg at gmx.com
Wed Jul 13 16:01:46 PDT 2011


On 2011-07-13 15:41, Walter Bright wrote:
> On 7/13/2011 3:19 PM, Jonathan M Davis wrote:
> > Given its heavy use of templates, I'm not sure how much that'll buy us in
> > terms of compilation speed, and since it's all open source, I don't know
> > why it would matter about hiding implementation details.
> 
> Consider the garbage collector. Should every compilation have to recompile
> that, too?

Since it doesn't take very long to compile, I really don't care much 
personally, and I think that it's just simpler to only deal with .d files. 
However, I'm not against the use of .di files if it speeds up compilation and 
doesn't have any major drawbacks. My primary concern at the moment (and why I 
brought it up in the first place) is that it seems to be affecting CTFE. For 
instance, this program

====
import std.stdio;
import std.string;

enum a = strip(" hello world");

void main() {}
====

currently fails to compile, giving these errors:

====
/home/jmdavis/dmd2/linux/bin/../../src/phobos/std/string.d(1468): Error: 
_aApplycd2 cannot be interpreted at compile time, because it has no available 
source code
/home/jmdavis/dmd2/linux/bin/../../src/phobos/std/string.d(1521): Error: 
cannot evaluate stripLeft(s) at compile time
/home/jmdavis/dmd2/linux/bin/../../src/phobos/std/string.d(1521): Error: 
cannot evaluate stripRight(stripLeft(s)) at compile time
q.d(4): Error: cannot evaluate strip(" hello world") at compile time
====

It used to compile prior to 2.054. I don't know whether it's really a CTFE bug 
or if the lack of actual source is really the cause of the problem. But if the 
lack of source _is_ the problem, then that would mean that using .di files 
would tend to make CTFE not work, in which case, I'd argue that we shouldn't 
be using .di files. However, if it's really just a CTFE bug, and .di files 
don't cause any problems for CTFE, then it's fine with me if we use .di files. 
I doubt that I'll ever choose to use .di files in one of my projects, but 
stuff like compilation speed matters that much more when you're dealing with 
the standard library, particularly since it affects everyone using the 
language.

- Jonathan M Davis


More information about the D-runtime mailing list