D's treatment of values versus side-effect free nullary functions
Don
nospam at nospam.com
Wed Jul 21 04:18:34 PDT 2010
Fawzi Mohamed wrote:
>
> On 21-lug-10, at 11:37, Don wrote:
>
>> Walter Bright wrote:
>>> Don wrote:
>>>> While running the semantic on each function body, the compiler could
>>>> fairly easily check to see if the function is CTFEable. (The main
>>>> complication is that it has to guess about how many iterations are
>>>> performed in loops). Then, when a CTFEable function is called with
>>>> compile-time constants as arguments, it could run CTFE on it, even
>>>> if it is not mandatory.
>>> I think this is the halting problem, and is insoluble.
>>
>> In general, yes. But some quite useful instances are trivial.
>>> This is why the language does CTFE in well-defined circumstances and
>>> the CTFE must succeed else a compilation time error.
>>
>>> I'm not seeing CTFE as a credible optimization tool, either, as none
>>> of my programs would benefit at all from it. For example, what's a
>>> text editor going to precompute?
>>
>> All it would be, would be moving parts of the optimization step from
>> the back-end into the front-end. In theory, it wouldn't gain you
>> anything. In practice, there may be some optimisations which are
>> easier to do in the front-end than the back-end.
>> An existing example of this is with:
>>
>> if(false) { xxx; }
>>
>> where the entire xxx clause is dropped immediately, and not sent to
>> the backend at all.
>>
>> It don't think this has any practical consequences, it's merely an
>> extra bit of freedom for compiler writers to implement optimisation.
>
> Yes, but normally I dislike too much *unpredictable* magic.
> yes you can try to evaluate some functions at compile time, but which ones?
> You try for like 1s and if the calculation does not complete postpone it
> to the runtime?
> This then becomes Haskell like in the sense that some small changes to
> the source give large changes to the runtime, in a way that is not
> clearly seen from the source code.
There is absolutely no difference between this and the optimiser.
>
> I am with Walter on this, one thing should be either compile time or
> runtime, and a programmer should be able to tell which is which.
>
More information about the Digitalmars-d
mailing list