Ohhh :-O ... where is the STON booklet. I would love to read it. Thanks,
Offray On 4/12/20 3:24 p. m., Stéphane Ducasse wrote: > Done :) > > >> On 4 Dec 2020, at 21:20, Stéphane Ducasse <stephane.duca...@inria.fr >> <mailto: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 >>> <mailto: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 <mailto: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/ >>>> <https://mutabit.com/repos.fossil/brea/> >>>> [2] https://mutabit.com/repos.fossil/indieweb/ >>>> <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://stephane.ducasse.free.fr/> / >> http://www.pharo.org <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://stephane.ducasse.free.fr> / > http://www.pharo.org <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 >