[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
|