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

Cecil Ward cecil at cecilward.com
Wed May 31 15:33:10 UTC 2023


On Wednesday, 31 May 2023 at 09:14:49 UTC, Dom DiSc wrote:
> 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.

Dom, you explain it well. I’m just too stupid. Literally, as I’m 
on strong pain drugs all the time, so things are a bit fuzzy. As 
a professional C programmer for some years, I understood the word 
const and used it all the time, as much as possible at every 
opportunity, so I had some expectations. But the errors I’m 
getting don’t fit in with the previous understanding I had with 
the familiar ‘const’ keyword and make me think there must be 
something else going on. So I will need to capture an example in 
the wild, cage it and bring it in for scientific examination.

I can’t ask for an explanation of things going on that you can’t 
inspect for yourself, obviously. And I don’t understand what the 
problem is with using in as much as possible yet having to remove 
it sometimes when something immutable is in use.


More information about the Digitalmars-d-learn mailing list