[squeak-dev] Re: [Pharo-project] Prune stack serialization

Juan Vuletich juan at jvuletich.org
Fri Dec 2 19:59:07 UTC 2011


Mariano Martinez Peck wrote:
>
>
> On Fri, Dec 2, 2011 at 9:46 PM, Eliot Miranda <eliot.miranda at gmail.com 
> <mailto:eliot.miranda at gmail.com>> wrote:
>
>
>
>     On Fri, Dec 2, 2011 at 12:40 PM, Mariano Martinez Peck
>     <marianopeck at gmail.com <mailto:marianopeck at gmail.com>> wrote:
>
>
>
>         On Fri, Dec 2, 2011 at 8:30 PM, Juan Vuletich
>         <juan at jvuletich.org <mailto:juan at jvuletich.org>> wrote:
>
>             Eliot Miranda wrote:
>
>
>
>                 On Fri, Dec 2, 2011 at 10:55 AM, Mariano Martinez Peck
>                 <marianopeck at gmail.com <mailto:marianopeck at gmail.com>
>                 <mailto:marianopeck at gmail.com
>                 <mailto:marianopeck at gmail.com>>> wrote:
>
>                    Thanks both. I am right to assume that if the block
>                 refers to temp
>                    vars, parameters, or whatever in another scope,
>                 then such solution
>                    won't work. I mean, if I have this example for example:
>
>                    | bytes result blah |
>                    blah := 42.
>                    bytes := FLSerializer serializeToByteArray:
>                 (SortedCollection
>                    sortBlock: [:a :b | (a + blah) > b ]).
>
>                    Then the 'blah' is in a different context. So the
>                 mentioned
>                    solution works for "clean" closures, which are
>                 "self contained".
>                    In the other cases (such as this example), we
>                 should serialize the
>                    whole stack. Is this correct?
>
>
>                 No.  The closure implementation arranges that any and
>                 all temporary variables accessed by the closure are
>                 directly accessible from the closure without accessing
>                 the outer contexts.
>                  ...
>
>
>             WRT clean closures, check what I did in Cuis to serialize
>             SortedCollections. See implementors and senders of #isClean.
>
>
>         Nice. Thanks Juan. I was checking your code, and that's
>         exactly why I asked Eliot. In your method you say:
>
>         isClean
>             "A clean closure is one that doesn't really need the home
>         context because:
>                 - It doesn't send messages to self or super
>                 - It doesn't access any instance variable
>                 - It doesn't access any outer temp
>                 - It doesn't do ^ return"
>         .....
>
>         So... my question is, WHAT do I need to serialize if I want to
>         be able to serialize also "non clean".
>
>
>     IMO, dy default, everything reachable from the closure, including
>     the outerContext chain and their senders.  But that's only a
>     default.  What makes sense in any given context is up to the
>     application, e.g. see Seaside.  One size won't fit all.  You
>     should handle the common cases (e.g. clean blocks and everything
>     else) and leave it up to the user to figure out what they need to
>     do in complex situations, making sure you provide them with the
>     hooks they'll need, such as the ability to substitute objects when
>     serializing etc, and perhaps some useful examples.
>
>
> +1   Then we will do the following: we will check whether the closure 
> is clean. If it is, then we serialize just the closure plus its 
> outerContext but only with receiver and method. If it is not clean, 
> then we serialize the whole stack. That's all by default. If then 
> someone needs something different, then to use the hooks :)
> So the final question is whether what Juan is using in Cuis is up to 
> date. If it is, then I have all I need :)
> Thank you guys.

I can say that it does indeed work. But I'd be really grateful if Eliot 
took a good look at that code!

Cheers,
Juan Vuletich

>
>  
>
>
>         I mean, for each item on that list, what do I need apart from
>         the closure instance and the receiver and method from the
>         outerContext ?  the whole stack of contexts ?
>
>
>         Thanks a lot in advance!
>
>
>
>         -- 
>         Mariano
>         http://marianopeck.wordpress.com
>
>
>
>
>
>
>
>     -- 
>     best,
>     Eliot
>
>
>
>
>
>
>
> -- 
> Mariano
> http://marianopeck.wordpress.com
>
> ------------------------------------------------------------------------
>
>
>   
>
> ------------------------------------------------------------------------
>
> No virus found in this message.
> Checked by AVG - www.avg.com <http://www.avg.com>
> Version: 10.0.1411 / Virus Database: 2102/4052 - Release Date: 12/02/11
>




More information about the Squeak-dev mailing list