On Monday, 27 January 2014 at 18:30:43 UTC, Pierre Talbot wrote:
On Monday, 27 January 2014 at 04:07:04 UTC, Andrei Alexandrescu wrote:
On 1/26/14 3:22 AM, Pierre Talbot wrote:
Hi,

I was wondering why CTFE is context sensitive, why don't we check
every expressions and run the CTFE if it applies?

Compilation would get awfully slow (and sometimes won't terminate).

Andrei

So it is theoretically possible? I mean if the compilation doesn't terminate, the execution won't either for at least one program input, so we can detect an infinite loop at compile-time. Moreover, isn't the same problem with context-sensitive CTFE?

Pierre

Just because code runs for a long time doesn't mean that it will run forever. This is known as the Halting problem [1]. We could have configurable switches to halt CTFE if it runs for more than N seconds or allocates more than N MiB.

However, this still doesn't take away from the point that it would make compilation awfully slow with presumably little benefit. There are further issues in that CTFE isn't exactly stable yet (I've had it produce incorrect results in a few cases), so relying on it to produce correct, optimized code is a bad idea.

I would be in favor of some "lite-CTFE" for the sake of optimization. Simply halting if the interpreter encounters a loop or function recursion should make it pretty snappy. But I think many compilers / optimizers already do this to some extent.

[1] https://en.wikipedia.org/wiki/Halting_problem

Reply via email to