On Fri, Dec 2, 2011 at 10:20 AM, Nicolas Cellier <nicolas.cellier.aka.nice@gmail.com> wrote:
2011/12/2 Martin Dias <tinchodias@gmail.com>:
> Hi folks
>
> In Fuel, we serialize a block closure with its state, including its
> outerContext. This enables to serialize a sorted collection with its
> sortBlock:
>
> | bytes result |
> bytes := FLSerializer serializeToByteArray: (SortedCollection sortBlock: [:a
> :b | a > b ]).
> result := FLMaterializer materializeFromByteArray: bytes.
> result
> addAll: #(1 2 3);
> yourself.
> ---> a SortedCollection(3 2 1)
>
> Here the problem: the�byte array is huge! (800kb) because we are serializing
> unneeded context for the sort block.
>
> We wonder how to prune it and save time and space.
>
> Thanks in advance
> Mart�n

In the case of such clean block, there is no need of outer context
during block execution.
However I don't know if implementation makes it possible to ignore the
context...
That's more a question directed to Eliot ;)

Arguably there is a bug in my closure implementation, which is that both the receiver and the method are fetched from the outerContext. �That's not a bug which can be fixed without a new VM/image combination and may be something I'll look at long-term, but is something we have to live with at the moment. �This means that you *do* have to serialize the outerContext. �But the outerContext is used only for the receiver and method. �So you don't need to full serialize the outerContext. �In particular you don't need to serialize any of the outerContext's stack contents or its sender. �This needs special handling, I guess in BlockClosure, to substitute a suitably reduced outerContext, but it shouldn't be hard to do. �e.g.

BlockClosure methods for: '*Fuel-serialization'
outerContextForSerialization
^MethodContext
sender: nil
receiver outerContext receiver
method: outerContext method
args: #()


BlockClosure methods for: '*Fuel-serialization'
outerContextForSerialization
^MethodContext
sender: nil
receiver self receiver
method: self method
args: #()



Nicolas




--
best,
Eliot