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