Hi Gabriele,
Thanks very much. This stuff is quite helpful.
Regards,
Bernie Schneider
The individual has always had to struggle to keep from being
overwhelmed
by the tribe. To be your own man is a hard business. If you try
it, you will
be lonely often and sometimes frightened. But no price is too
high to pay
for the privilege of owning yourself.
-- Friedrich Nietzsche --
----- Original Message -----
From: "Gabriele Santilli" <[EMAIL PROTECTED]>
To: "Bernie Schneider" <[EMAIL PROTECTED]>
Sent: Thursday, April 14, 2005 6:29 AM
Subject: [REBOL] Re: The truth about scope
>
> Hi Bernie,
>
> On Wednesday, April 13, 2005, 5:40:36 PM, you wrote:
>
> BS> Yes, it's much clearer now. You did a great job. Please
continue
> BS> with contexts and bindings.
>
> Ok, so to summarize:
>
> The is no scope. Everything is data, and the relation
between
> words and values is data too. You can manipulate this
relation
> in the same way you can manipulate the rest of the data.
>
> So, the "connection" (binding) between words and their
referred
> values is not a "rule" in the language, like "scope" is, but
it is
> a property of words.
>
> Now... what is a context? And what does binding mean?
>
> You can think of a context as a table of words and values.
Nothing
> special here - you have words and their "meaning" listed in
some
> kind of table.
>
> But, if words directly refer to values, why do we need
contexts?
>
> The reason we need them, is that words actually refer to
values
> with an additional layer of indirection. A "double pointer" if
you
> want to call it this way. Why? Because otherwise each
word
> "instance" would have a different reference. Changing one
word
> would not change all the other words with the same spelling.
>
> So we have something like:
>
> some-word -----------\
> ()---------> value
> some-word -----------/
>
>
> some-other-word ----->()---------> value
>
> The () in the above picture are contained in the second
column of
> contexts.
>
> When you write:
>
> some-word: 3
>
> you are not changing the leftmost arrow in the above picture,
you
> are changing the rightmost arrow. Basically you are not
changing
> the word, you are changing the context.
>
> Setting the value of a word is an operation on contexts,
not an
> operation on words. Words stay unchanged.
>
> Now, the scoop: the leftmost arrow is what is called
"binding".
> The operation of binding is the operation of changing that
arrow
> to make it point to some other ().
>
> So: everything is data. Words and their relation to other
values
> are data too.
>
> What BIND does is take every word in a block and change it so
that
> it refers to a different context's value slot.
>
> What gives the illusion of scope? As Ladislav said, when words
are
> loaded (LOAD), they are bound to the global context. Each
time a
> word is created, a value slot for that word is created in
the
> global context (SYSTEM/WORDS), and this value slot is
initialized
> to the UNSET! value.
>
> So, every word starts out being bound there. When
code is
> evaluated, some functions may change the binding of
words.
> Actually, many functions do that. What you get in the end is
the
> illusion of scope, because usually those function are
applied on
> blocks that are nested inside each other. However, this is
not a
> requirement, and this usually confuses people, because they
are
> fooled by the illusion of scope.
>
> The "lookup" in the context table is only done at binding
time.
> Once the word has been bound, it "directly" (actually,
with a
> "double pointer") refers to the value, so that when you GET
the
> value of a word no lookup is necessary. This has the nice
side
> effect of making REBOL faster, too.
>
> This is why we usually call it "static binding". The
connection
> between words and value is a "static" data structure, not
the
> result of a dynamic computation at runtime. Of course, you
can
> change this structure dynamically, like you can change
the
> contents of a block dynamically.
>
> Regards,
> Gabriele.
> --
> Gabriele Santilli <[EMAIL PROTECTED]> -- REBOL
Programmer
> Amiga Group Italia sez. L'Aquila --- SOON:
http://www.rebol.it/
>
> --
> To unsubscribe from the list, just send an email to
> lists at rebol.com with unsubscribe as the subject.
>
>
>
> --
> No virus found in this incoming message.
> Checked by AVG Anti-Virus.
> Version: 7.0.308 / Virus Database: 266.9.10 - Release Date:
4/14/2005
>
>
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.9.10 - Release Date: 4/14/2005
--
To unsubscribe from the list, just send an email to
lists at rebol.com with unsubscribe as the subject.