I'm pretty much in agreement with Andrei and BCS here, so I'll just comment on this bit:

hasen wrote:
When the coder marks a function as "pure", the compiler must check that it actually is pure. I think the compiler can do this, in a way similar to how it can detect which functions can have compile time function execution (CTFE)

The DMD[1] doesn't actually check whether it can execute a function at compile time, it just tries to do it and errors out if it comes across something it can't handle.

For example, this compiles and prints '100':
-----
module test;

uint y = 100;
uint* x = &y;

uint foo(bool readptr) {
    if (readptr)
        return *x;
    return 100;
}

// Doesn't compile if changed to foo(true):
// test.d(14): Error: cannot evaluate foo(true) at compile time
auto bar = foo(false);

void main() {
    printf("%d\n", bar);
}
-----
But as the comment states, changing the parameter to true makes it error out because it can't do CTFE on foo(true), even though it managed fine with foo(false).


[1]: and LDC/GDC, which use the same frontend.

Reply via email to