[REBOL] Re: link to background on Rebol language design?
From: nitsch-lists:netcologne at: 22-Aug-2003 22:11
Carl Read wrote:
>On 21-Aug-03, Gregg Irwin wrote:
>
>>Hi Bryan, et al
>>
>
>>>>I've seen those from RT say that REBOL words are not variables,
>>>>(as apposed to calling variables "words" just to be different
>>>>
>
>>>This is nice, but if I have to communicate with someone not
>>>with Rebol at all it seems most likely to me that they
>>>Rebol Word as a variable, in fact, I've recently had
>>>
>>that situation, in b> order not to complicate matters too much it
>>
>>>something like: Rebol calls variables words,
>>>
>>or something similar.
>>
>
>>From Core PDF:
>>
>
>>"Words are the symbols used by REBOL. A word may or may not be a
>>variable, depending on how it is used. Words are also used directly
>>as symbols."
>>
>
>>From REBOL in 10 Steps"
>>
>
>>"Words are the symbols of REBOL. They are used to represent
>>something directly as a word, or indirectly as a variable..."
>>
>
>Yes - but that's just what RT says in their guides. ;) Compare with
>this here...
>
>http://www.escribe.com/internet/rebol/m3532.html
>
>from Holgar Kruse...
>
>"I agree with Joel that, in order to become really adept at REBOL, you
>have
>to understand some of its concepts (values, references, NO variables
>!, blocks,
>contexts, words etc.), but then that is true for any language."
>
>Note the emphasized "NO" with regards to variables.
>
>Do those from other languages that have variables every expect this to
>happen...
>
>>>word1: "cat"
>>>
>== "cat"
>
>>>word2: word1
>>>
>== "cat"
>
>>>insert word2 "a "
>>>
>== "cat"
>
>>>word1
>>>
>== "a cat"
>
>? It's a common head-scratcher for those new to REBOL. Calling words
>pointers instead of variables gives a better indication of what they
>are (in the above case), I think. Though I think we should be
>thinking of them as just another value of a certain datatype, same as
>with "cat". Thinking of them as symbols may be nice when writing
>REBOL, but will it help you when debugging?
>
in this case "pointer" = "reference".
Both words mean the same, but due to C "pointer" means dangerous and
crash-prone.
I would say "references" are pointers which can never point to invalid
memory
(backed by a garbage-collector, no address-arithmetik)
In my rebol-terminology, the words are not references, but they contain
references.
for example,
a: []
b: reduce[a]
both the block and the word contain the same reference.
Also Holgers artikel seems to imply, if i put something in a variable,
it gets copied.
As a beginner, i was not so surprised about the reference-stuff.
no, i expected if i write [], i get a fresh copied block.
specially because it works this way when testing with console.
that's the hard part to understand.
its quick to explain with
f: func[a][append [] a]
source f
f 123
source f
and the same with
f: func[a][append copy [] a ]
(eventually noting there is copy/deep, just in case)
but that should be the first thing to show a newbie, and was not at my
starting time.
Are words variables? yes, absolutely. if they want.
they are also symbols. which means one can say
states: [on off broken to-hot ]
state: second states
if 'off = state [ noise: 'is-silent ]
here some words act variables, some as symbols.
finally i can do
a: 123
b: [a]
get first b
where i use them in a mix of variables and symbols. which can be
interesting when writing dialects.
-Volker