digitalmars.D.learn - Why isn't there more if(__ctfe) in std.math ?
- Juraj Mojzis (10/10) Sep 23 2017 Hi,
Hi, browsing trough phobos bugzilla I found a couple of open issues regarding CTFE and basic math functions ( Issue 4177, 5227). It looks to me that at least floor/ceil could by fixed by a simple: if (__ctfe) return simple_floor_impl(x); But that looks too easy and would surely be implemented already. So I would like to ask what the real problems are. Thanks, Juraj
Sep 23 2017
On Saturday, 23 September 2017 at 18:23:12 UTC, Juraj Mojzis wrote:Hi, browsing trough phobos bugzilla I found a couple of open issues regarding CTFE and basic math functions ( Issue 4177, 5227). It looks to me that at least floor/ceil could by fixed by a simple: if (__ctfe) return simple_floor_impl(x); But that looks too easy and would surely be implemented already. So I would like to ask what the real problems are. Thanks, Juraj"if (__ctfe) {}" is a test happening at runtime. Both the if and the else branches got compiled, this implies: - more code to cache - slower code just to allow CTFE. CTFE rounding can be more simply done using cast(int), although for negative numbers the behavior is not the same.
Sep 23 2017
user1234 wrote:"if (__ctfe) {}" is a test happening at runtime. Both the if and the else branches got compilednope. compiler knows about this special pseudovariable, and will not generate code neither for condition, nor for ctfe branch.
Sep 23 2017
On 09/23/2017 11:46 PM, user1234 wrote:"if (__ctfe) {}" is a test happening at runtime. Both the if and the else branches got compiled, this implies: - more code to cache - slower code just to allow CTFE.__ctfe is a constant, though. Any half-decent optimizer will throw away the path that's not taken. dmd does it even without the optimization flag -O.
Sep 23 2017