Code duplication where you wish to have a routine called with either immutable or mutable arguments

Dom DiSc dominikus at scherkl.de
Wed May 31 09:14:49 UTC 2023


On Wednesday, 31 May 2023 at 03:29:33 UTC, Cecil Ward wrote:
> I have to admit that I don’t really understand immutable. I 
> have an idea that it could mean that an object has an address 
> in ROM, so its value will never change. Maybe const doesn’t 
> give you such a strong guarantee, disallows ‘you’ from 
> modifying it but others might do so, but who knows.
There are two perspectives: that of the value handed to a 
function and that of the function taking the value.
"immutable" (or "mutable") is a property of the value, "const" is 
a property of the function.
If the function can work with mutable values, but in fact doesn't 
mutate them itself, it could also work with immutable values. The 
fact that others could modify your "const" value doesn't matter 
for immutable values, because they of course can't be modified by 
others. For the function it doesn't matter, because it only 
guarantees not to modify it itself, don't care about what other 
can or can't do.

> Without a guarantee as strong as the first idea I can’t really
> understand how const can work properly. "You treat it as const
> so do not modify it, but it might not be eternally fixed and
> unchanging" that doesn’t seem to have enough value to me.
Why? What guarantee are you missing?
Your function can work with mutable data, so you don't care if it 
can be modified also by others.
Now it happens that you doesn't modify the data. So why shouldn't 
you be able to work on data that guarantees that it also will not 
be changed by others? You don't care for such modification anyway.

The meaning of "immutable" is: I cannot be modified. Not by you 
and not by anybody else. It's a property of a value.
The meaning of "mutable" is: I can be modified by anybody. Work 
with me only if that is ok for you. It's a property of a value.
The meaning of "const" is: I don't care if others modify the data 
or not, I won't modify it myself. It's a property of a function.



More information about the Digitalmars-d-learn mailing list