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 >> <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://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