ixid:

As a beginner with D I came across the advice that enum was the correct way to specify global constants but this makes it feel safer to use const when you want type checking and perhaps enum isn't the right choice.

It's a safe and quite feature of D. Unfortunately for implementation simplicity (and maybe compilation performance) this kind of static analysis is limited to single expressions. This limits its usefulness (and sometimes forces you to write larger single expressions to avoid casts, instead of assigning parts of an expression to intermediate variables).

Don and Hara have discussed a bit the possibility of extending this D feature (value range propagation) to include simple cases like this, that currently don't compile:

void main() {
    ubyte[10] array;
    foreach (i, ref x; array)
        x = i;
}


Even for a simple compiler it's not hard to see that this 'i' will not go past the max value of an ubyte. There are C lints that toady are able to do far more than this, and they run very fast.

Bye,
bearophile

Reply via email to