D does not support logical const due to the weak guarantees that it provides.

So, without logical const, how are D users supposed to provide lazy evaluation and memoization in their interfaces, given that the interface should *seem* const, e.g.

class Matrix
{
  double getDeterminant() const { /* expensive calculation */ }
}

If it turns out that getDeterminant is called often with the raw matrix data remaining unchanged, how can we add caching to this class without rewriting the const-ness of all code that touches it?

And how do we write generic code when it's practically impossible to determine const-ness from a glance? e.g. getDeterminant looks like it should be const, but wouldn't be if it had caching, so writing generic code that uses getDeterminant would be very difficult.

Reply via email to