On Wed, 01 Dec 2010 12:43:38 -0500, Jesse Phillips <jessekphillip...@gmail.com> wrote:

Jordi Wrote:

On the other side, in D, it is a hint to the compiler but it will only
use it if is verifiable. If that is the case, why do we need the "const"
keyword in the first place? The compiler can already verify that the
code is const and do the proper opimizations.

It can, unless the source is not available. Though it could probably output the information when creating .di files.

This isn't practical. .di files are not object files, so they can be altered too easily.

Note also that the compiler cannot do any optimizations for *const* functions, it can only restrict access (useful for programmer).

Steve's solution would be on the side of "useful for the programmer,
enforced by the compiler, uselss for the compiler".

But it isn't enforced by the compiler. It can enforce that you only modify things you claimed could be modified. But it can't enforce that it is logically const. It could prevent the modifiable parts from influencing the result, but then the requested caching isn't possible.

The current const regime cannot enforce that you cannot modify the logical state of the object, because it does not know if any global variables are part of the state.

Logically const cannot be enforced, and it cannot be prevented by const alone.

A pure function enforces that you are not modifying external state. If storage for non-state data is allowed inside the object (thereby enabling logically const data), then special rules would need to be followed for pure and immutable functions.

-Steve

Reply via email to