Thx!

> On 4 Dec 2020, at 21:24, Stéphane Ducasse <stephane.duca...@inria.fr> wrote:
> 
> Done :)
> 
> 
>> On 4 Dec 2020, at 21:20, Stéphane Ducasse <stephane.duca...@inria.fr> wrote:
>> 
>> It looks like it is recurring  enough to be part of the Ston booklet :)
>> 
>> I will add it. 
>> 
>> S. 
>> 
>>> On 1 Dec 2020, at 10:54, Sven Van Caekenberghe <s...@stfx.eu> wrote:
>>> 
>>> Hi Offray,
>>> 
>>> This is a recurring question. BlockClosures are way too general and 
>>> powerful to be serialised. That is why serialising BlockClosures is not 
>>> supported in STON.
>>> 
>>> The code inside a block can refer to and even affect state outside the 
>>> block. Furthermore the return operator is quite special as it returns from 
>>> some outer context.
>>> 
>>> A subset of BlockClosures are those that are clean. These do not close over 
>>> other variables, nor do they contain a return. By using their source code 
>>> representation, it is possible to serialise/materialise them.
>>> 
>>> You can try this by adding the following methods:
>>> 
>>> BlockClosure>>#stonOn: stonWriter
>>>  self isClean
>>>    ifTrue: [ stonWriter writeObject: self listSingleton: self printString ]
>>>    ifFalse: [ stonWriter error: 'Only clean blocks can be serialized' ]
>>> 
>>> BlockClosure>>#stonContainSubObjects
>>>  ^ false
>>> 
>>> BlockClosure class>>#fromSton: stonReader
>>>  ^ self compilerClass new 
>>>      source: stonReader parseListSingleton; 
>>>      evaluate
>>> 
>>> With these additions you can do the following:
>>> 
>>>  STON fromString: (STON toString: [ :x :y | x + y ]).
>>> 
>>> Note that the actual class name depends on the Pharo version (BlockClosure 
>>> in Pharo 7, FullBlockClosure in Pharo 9 and maybe soon CleanBlockClosure - 
>>> Marcus is working on that last one and that would be very cool because it 
>>> would say exactly what it it).
>>> 
>>> I am still not 100% convinced to add this as a standard feature to STON. 
>>> Using source code fully exposes the implementation, while using the 
>>> compiler can be dangerous. It also adds a dependency on source code and the 
>>> compiler. But it would be good if people can experiment with this feature.
>>> 
>>> Does this help you ?
>>> 
>>> Regards,
>>> 
>>> Sven
>>> 
>>> PS: I would not modify an object just to serialise it.
>>> 
>>>> On 30 Nov 2020, at 18:19, Offray Vladimir Luna Cárdenas 
>>>> <offray.l...@mutabit.com> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> I'm using STON for all my light storage serialization needs, like the
>>>> Grafoscopio notebooks, and I also love it, as Russ stated in their mail
>>>> question, and I share with him a similar request: for my Brea[1] static
>>>> site generator I would like to store some BreaQuery objects as external
>>>> STON files, and recover them, so I can run the queries that
>>>> recreate/update the website easily. I could store them as Grafoscopio
>>>> notebooks, but I don't want to make Grafoscopio a prerequisite for Brea
>>>> or I could use Fuel, but I would like to store queries as a diff
>>>> friendly text based format. I have considered Metacello/Iceberg packages
>>>> to export code in a diff friendly format, but It maybe overkill. So I
>>>> would like to see if STON can serve me here too.
>>>> 
>>>> [1] https://mutabit.com/repos.fossil/brea/
>>>> [2] https://mutabit.com/repos.fossil/indieweb/
>>>> 
>>>> So far, I'm able to serialize a code block as a string using:
>>>> 
>>>> BreaQuery>>asStonModified
>>>>    self codeBlock: self codeBlock asString
>>>>    ^ STON toStringPretty: self
>>>> 
>>>> But I'm unable to populate a block from a string. There is any way to
>>>> make a string, lets say 'a + b', to become the code contents of a block,
>>>> ie: [a + b ] ?
>>>> 
>>>> Thanks,
>>>> 
>>>> Offray
>>>> 
>> 
>> --------------------------------------------
>> Stéphane Ducasse
>> http://stephane.ducasse.free.fr / http://www.pharo.org 
>> 03 59 35 87 52
>> Assistant: Aurore Dalle 
>> FAX 03 59 57 78 50
>> TEL 03 59 35 86 16
>> S. Ducasse - Inria
>> 40, avenue Halley, 
>> Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
>> Villeneuve d'Ascq 59650
>> France
>> 
> 
> --------------------------------------------
> Stéphane Ducasse
> http://stephane.ducasse.free.fr / http://www.pharo.org 
> 03 59 35 87 52
> Assistant: Aurore Dalle 
> FAX 03 59 57 78 50
> TEL 03 59 35 86 16
> S. Ducasse - Inria
> 40, avenue Halley, 
> Parc Scientifique de la Haute Borne, Bât.A, Park Plaza
> Villeneuve d'Ascq 59650
> France
> 

Reply via email to