[D-runtime] Why does druntime us .di files instead of .d?
Jonathan M Davis
jmdavisProg at gmx.com
Sun Jul 24 22:48:15 PDT 2011
On Sunday 24 July 2011 22:02:08 Sean Kelly wrote:
> On Jul 22, 2011, at 2:53 AM, Jonathan M Davis wrote:
> > On Saturday 16 July 2011 05:01:53 Sean Kelly wrote:
> >> On Jul 13, 2011, at 4:01 PM, Jonathan M Davis wrote:
> >>> 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
> >>
> >> This function is in src/rt, which isn't publicly visible code (much
> >> like the GC). Is there a similar example involving a module in
> >> core.*?
> >
> > There may be, but I'd have to play around to find one. I only know about
> > the one example, because it was brought up on the newsgroup. But
> > regardless of whether there's another example, the fact that that one
> > doesn't work is definitely a problem.
>
> I disagree, but mostly because this is an issue of how the runtime is
> designed than whether .d or .di files are generated. Even if druntime were
> shipped with all .d files the issue would remain because the rt/* modules
> are imported by user code. This is actually kind of an interesting issue
> because the fix would be a fundamentally different approach to the runtime
> design, and one that may be a much better design (because the resulting
> code could be optimized much more heavily) but may also turn out to be a
> bear to deal with.
>
> In essence, the fix would be to have every function that is called by
> compiler-generated code be exposed by object.di. I suspect that this would
> expose a good part of the now hidden compiler runtime code to the user,
> which not every compiler writer may like doing. Which raises an
> interesting point. Should CTFE support be consistent across compilers?
> I'd be inclined to say so, but this appears to have interesting
> implications in terms of how code generation occurs regarding language
> features (array operations in particular).
>From the user's perspective, the fact that you can't iterate over a string
with CTFE is a big problem (
http://d.puremagic.com/issues/show_bug.cgi?id=3512 ) regardless of what the
reasons for it might be. It's hugely limiting.
Personally, I don't understand all of the issues involved, so I have no idea
what the correct fix is. But most programmers are going to want it to "just
work," and right now it doesn't. It may be that the problem is big enough that
it's going to take a while to come up with an appropriate fix, but I don't
think that it's really acceptable to disallow iteration over strings in CTFE
unless it just really can't be done in any sane way. It's just too limiting
(especially when you consider stuff like string mixins).
And yes, I think that CTFE should be consistent across compilers. It's going
to be a problem if it isn't. There seem to be a number of people who rely on
CTFE quite a bit on their code, and it's supposed to be one of D's selling
points, so it needs to be appropriately portable. That could be problematic
depending on what all of the implementation issues are, but it's also going to
be problematic if CTFE doesn't work the same way across compilers.
So, obviously, there are some issues which need to be sorted out here, and
that may take time, but the situation with regards to CTFE and strings
definitely needs to be improved.
- Jonathan M Davis
More information about the D-runtime
mailing list