[REBOL] Re: Rebol pickling recipes ?
From: g:santilli:tiscalinet:it at: 6-Oct-2002 12:05
Hi Laurent,
On Saturday, October 5, 2002, 10:13:48 PM, you wrote:
LG> Each answer seem to bring up new questions again ;)
That's good, isn't it? :-)
LG> What exactly do you mean by "loading" words without using 'load ?
This is somewhat a long story; I'll try to make it short.
>> find first system/words 'a-word
== [a-word]
>> find first system/words 'another-word
== [another-word]
>> find first system/words 'a-word-never-defined-before
== [a-word-never-defined-before]
You see, it looks like REBOL's SYSTEM/WORDS already contains all
possible words. But actually, it doesn't. They just get added by
LOAD, at the time the text you write at the console is LOADed into
REBOL, just before it is evaluated.
So:
>> load "a-different-word"
== a-different-word
>> 'a-different-word2
== a-different-word2
>> find first system/words 'a-different-word
== [a-different-word a-different-word2]
LOAD adds 'A-DIFFERENT-WORD to SYSTEM/WORDS (you see, it gets
added before 'A-DIFFERENT-WORD2). However, LOAD is not the only
function that can "create" a word.
>> to-block "a block of words"
== [a block of words]
It doesn't add the words to SYSTEM/WORDS:
>> find first system/words first to-block "different-again"
== none
So no track remains about the fact that that word has been
created. One could think of creating a context made of words that
are not added to SYSTEM/WORDS; this means that if you don't have
access to that context in some way (i.e. if it isn't an object, or
the context of a function, etc.) it is not possible to say which
words are part of that context. As a result, you cannot reproduce
that context by simply looking at the SYSTEM.
BTW, I just found out this curious behavior:
>> find first system/words to-word "never-defined-this"
== none
>> find first system/words to-word "never-defined-this"
== [never-defined-this]
which shows that using TO-WORD the word gets added AFTER the
evaluation of that expression. I cannot give an explanation of
this; it might be some kind of side effect of the current
implementation (this is REBOL/View 1.2.8.3.1 3-Aug-2002);
Ladislav, Romano, do you have any ideas?
LG> I guess that by "partially" you mean "only for the context that your script(s)
LG> have knowledge of" ?
Yup, something like that. :)
LG> Would that mean that, for example, one would have to store all code and data
LG> within a single object to make sure everything he needs is correctly restored
LG> (puting aside the need to handle circular references properly) ?
That could help. However, as long as you are in control of what it
is needed to restore your system, you can easily do it. (I.e. if
you know what state your script needs, you just save it and then
restore it.)
Regards,
Gabriele.
--
Gabriele Santilli <[g--santilli--tiscalinet--it]> -- REBOL Programmer
Amigan -- AGI L'Aquila -- REB: http://web.tiscali.it/rebol/index.r