[Vm-dev] [Pharo-project] Plan/discussion/communication around new object format

Andreas Raab Andreas.Raab at gmx.de
Wed Jun 13 13:16:55 UTC 2012


> On 13 June 2012 09:41, Bert Freudenberg <bert at freudenbergs.de> wrote:
> >
> > On 2012-06-13, at 05:27, Igor Stasenko wrote:
> >
> >> Another (open) question, is how to deal with immutability in presence
> >> of  become, i.e.:
> >>
> >> mutableCopy := immutableObject shallowCopy.
> >> immutableObject becomeForward: mutableCopy.
> >>
> >> such kind of things making immutability useless for protecting some
> >> critical parts of object memory,
> >> like preventing modification of compiled method literals:
> >>  yes you cannot change the immutable object, but you can replace all
> >> pointers to it with it's own mutable copy, which is equivalent to
> >> making it mutable again.
> >
> >
> > Why should the VM allow become of an immutable object?
> >
> 
> You can disallow this. But you can only make it harder: i can do it
> manually - take all objects pointing to immutable one and replace the
> pointer to it with it's mutable copy. And it is completely legal,
> except that it will be a bit harder, since done not by primitive.

You are confusing something here. Become is just a "fancier form" of  
assignment that you could in fact write without a primitive by  enumerating 
all the references to an object. If you keep that in mind it  is obvious 
that since assigning an immutable *to* a variable is never a  problem using 
become *with* an immutable as argument is neither since  in both cases the 
immutable remains immutable.
 
 The real question that arises is whether become should be allowed to  
change the *contents* of an immutable object. Personally, I think it  
should not, but this has some side effects that require fixing such as  
class migration which really should have a separate primitive to update  
its instances after reshape - the rules for this *should* include  changing 
immutables unless you want to change the system to deal with  multiple 
concurrent class versions (much pain down that path).
 

> Disallowing #become on immutables raising many additional questions:
> 
> what is your action when you need to migrate instances of a class due
> to it's reshaping, while some of them are immutable?

Class migration should really have its own primitive. If it had, much pain 
could be avoided in migrating classes (see comments in 
ClassBuilder>>update:to:). And then one could decide on the proper policy 
to use for immutables.

Cheers,
  - Andreas


> 
> (I bet there is be many other examples, when this will break existing
> traditional schemes, like working
> with proxies etc).
> 
> I don't wanna spread FUD.. just want to make sure that we ready to
> answer for every such question.
> 
> 
> > - Bert -
> 
> -- 
> Best regards,
> Igor Stasenko.
> 
        
-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20120613/261cf435/attachment-0001.htm


More information about the Vm-dev mailing list