CTFE and DI: The Crossroads of D
Christopher Bergqvist
spambox0 at digitalpoetry.se
Thu May 10 10:57:37 PDT 2012
On Thursday, 10 May 2012 at 17:37:59 UTC, Adam Wilson wrote:
> On Thu, 10 May 2012 09:56:06 -0700, Steven Schveighoffer
> <schveiguy at yahoo.com> wrote:
>
>> On Thu, 10 May 2012 12:04:44 -0400, deadalnix
>> <deadalnix at gmail.com> wrote:
>>
>>> Le 10/05/2012 17:54, Steven Schveighoffer a écrit :
>>>> On Thu, 10 May 2012 10:47:59 -0400, Andrei Alexandrescu
>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>
>>>>> On 5/10/12 6:17 AM, Steven Schveighoffer wrote:
>>>>>> On Wed, 09 May 2012 23:00:07 -0400, Andrei Alexandrescu
>>>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>>>> Actually the point here is to still be able to benefit of
>>>>>>> di automated
>>>>>>> generation while opportunistically marking certain
>>>>>>> functions as "put
>>>>>>> the body in the .di file".
>>>>>>
>>>>>> If you aren't going to strip the files, I don't see the
>>>>>> point in it.
>>>>>
>>>>> Inlining.
>>>>
>>>> No, I mean if dmd -H isn't going to strip the files, what is
>>>> the point
>>>> of dmd -H? I can already copy the .d to .di and have
>>>> inlining/ctfe, or
>>>> simply use the .d directly.
>>>>
>>>> At this point, in order to get CTFE to work, you have to
>>>> keep just about
>>>> everything, including private imports. If we want to ensure
>>>> CTFE works,
>>>> dmd -H becomes a glorified cp. If we have some half-assed
>>>> guess at what
>>>> could be CTFE'd (which is growing by the day), then it's
>>>> likely to not
>>>> fit with the goals of the developer running dmd -H.
>>>>
>>>> -Steve
>>>
>>> If you can CTFE, you can know what is CTFEable. If it is
>>> currently half assed, then work on it and provide a better
>>> tool.
>>
>> There is already a better tool -- cp. I ask again, what is
>> the benefit of .di generation if it is mostly a glorified
>> (faulty?) copy operation?
>>
>> As Adam points out in his original post, ensuring CTFE
>> availability may not be (and is likely not) why you are
>> creating a .di file.
>>
>> Plus, what isn't CTFEable today may be CTFEable tomorrow.
>>
>> inlining is one thing, because that's an optimization that has
>> a valid fallback. CTFE does not.
>>
>> -Steve
>
> Exactly this. I am currently in the process of changing the
> DRuntime makefiles such that some of the files are not
> processed as DI's. This allows Phobos CTFE dependencies on the
> DRT to remain valid while still allowing DI's to be generated
> for parts where they matter, with the goal of making both a
> shared and static library build of the DRT. The tool I am using
> to accomplish this feat? cp. It works, it delivers exactly what
> we need and it's *is not* a broken operation like the current
> DI generation.
>
> Like Steve said, most people generating DI files are not really
> worried about CTFE working, in fact they almost undoubtedly
> *know* that they are breaking CTFE, yet they choose to do it
> anyways. They have their reasons, and frankly, it doesn't
> concern us as compiler writers if those reasons don't line up
> with our personal moral world-view. Our job is to provide a
> tool that DOES WHAT PEOPLE EXPECT. Otherwise they will move on
> to one that does. If people expected DI generation to be
> glorified (and not broken) copy operation, they would (and do)
> use cp.
How about:
dmd -H mySource.d --keepImplementation MyClass.fooMethod
?
It should be good enough for makefiles as in the case of
core.time/dur, but get's a bit hairy with overloads (append "[0]"
to select specific ones?). Maybe it requires semantic
information though.
More information about the Digitalmars-d
mailing list