On 05/15/2012 08:18 PM, Chris Cain wrote:
On Tuesday, 15 May 2012 at 23:36:38 UTC, Chad J wrote:
The idea /was/ to store the @instance variable with the object
specifically to avoid complex indirections. Still have to trust
programmers though :/

But you /can't/ store the @instance variable with the object. As per the
language reference, immutables may be stored in ROM. If the object is
immutable (and const objects might be immutable), then the @instance
variable would be stored in ROM, in which case it physically couldn't
change no matter how hard you tried (or it would vomit run-time errors
or some undefined behavior). The only "workable" solution would be an
immutable pointer to the mutable variable.

Link: http://dlang.org/const3.html


I guess this matters for toHash... so now we not only want pure/const/nothrow methods, but there is this implication that we are desiring to mutate immutable things. If we really wanted to overcome this, we could have things that behave as if immutable, but carry mutable state internally. These would not be eligible for placement in ROM.

The other thing that I'm wondering about is if there are use-cases /besides/ hashing. Are there any? If not, it might be worth special-casing somehow. It's a difficult route to travel though, because it's very difficult to know that there won't be any roadblocks besides caching in the future. Still, I suspect this is not well researched.

Reply via email to