[Issue 6094] && doesn't shortcut properly with CTFE
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Jun 29 23:24:30 PDT 2011
http://d.puremagic.com/issues/show_bug.cgi?id=6094
Don <clugdbug at yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|regression |enhancement
--- Comment #9 from Don <clugdbug at yahoo.com.au> 2011-06-29 23:19:32 PDT ---
(In reply to comment #8)
> I'm pretty sure this is a regression between DMD 2.052 and DMD 2.053. I found
> this 'regression' in template constraints:
>
> if( isPointer!T && isPointer!(pointerTarget!T) )
>
> the problem is that if T is a string, then pointerTarget!T can not compile.
> This wouldn't be an issue if that meant the template constraint failed
> gracefully, but instead it halts compilation.
No, that's not a regression. && was never defined to work in that way.
It's a Phobos bug which has been exposed.
> Anyways, there is the question of whether or not shortcutting is the correct
> behavior.
>
> From a performance point of view, as someone who has spent time optimizing
> templates for compile times, anything that can reduce DMD's memory-usage or
> compile times is a good thing.
>
> From a practical point of view, being able to guard statements without using a
> static if is great for template constraints and other short templates.
>
> From a consistently point of view CTFE is already shortcutting everything
> inside a if(!__ctfe){} block. (and probably other if(false){} blocks as well).
> And we will never be able give up shortcutting if(!__ctfe){} blocks.
That is COMPLETELY irrelevant. It has nothing in common. To repeat what I said
earlier: the constant folding behaviour of && does *not* involve CTFE. In fact,
it's not even a change to the constant folding; it's a change to the semantic
pass of &&.
What this request is: Given X && Y, if X always evaluates to false, do not
perform _any_ semantic analysis on Y. No matter what garbage it is.
Likewise for X || Y; if X is true, don't semantically analyse Y.
So, instead of
1. semantic analysis X and Y;
2. constant fold X&&Y;
it would become:
1. semantic X;
2. constfold X;
3. if (X is true) return true;
4. semantic Y;
5. constfold X&&Y.
This is clearly a major enhancement request and not a regression.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list