[REBOL] Re: Block Creation Re:
From: joel:neely:fedex at: 22-Oct-2000 21:30
Hi, Brett,
[rebol-bounce--rebol--com] wrote:
> Just wanted to give some feedback.
>
Thanks for the feedback!
> I liked point 7. () are not something I used much - other than
> for making code more readable, or using the compose function.
> But your point, makes me think again.
>
To be honest, I don't use PAREN! values as often as I could. I'm
getting ready to do a rewrite of a couple of substantial pieces of
code, so I'm going to keep my eyes open for places where PAREN!s
might be appropriate.
> I initially expected something else from point 12. At first I
> thought "Chain of references" to mean some sort of data structure
> held together with pointers, when actually it appears you were
> showing how a series reference can get passed around.
>
That's a good point. I was really thinking of something like
chain of assignments
but couldn't say that, as we don't have
an "assignment" operator in REBOL! ;-)
Perhaps I should have said "This behavior does not depend on how
or when the reference to the block was obtained." Do you think
that works as well or better?
> Point 13 say "a shared series reference is being modified".
> Your point is well made, but I would have expected the phrase
> "the same series is being modified" was more accurate.
>
My first attempt could stand some rewording here as well!
I avoid saying "the same series" because I consider it misleading.
What is the relationship between A and B in each of the following?
>> a: [1 2 3] == [1 2 3]
>> b: a == [1 2 3]
>> same? a b == true
>> b: next a == [2 3]
>> same? a b == false
>> append a 4 == [1 2 3 4]
>> b == [2 3 4]
To my mind a "series" requires both a sequence of data values and
a position within that sequence. In the second set of expressions
above, I would contend that A and B *are not* the "same series",
both because REBOL says they're not, and because the position of
each is different. Unfortunately, the term "sequence" is not
politically correct REBOL terminology, so it's awkward to describe
the relationship!
If I try to use more precise language, I end up talking about
two series values that refer to the same data sequence (whether
at the same position or not), and my sentences start sounding
too convoluted for my taste. I'm still working on this one.
> I want to give my little story of how I reconciled Rebol's
> behaviour in my mind.
>
[...interesting discussion reluctantly snipped...]
> the Rebol words "a" and "b" both became
> signifiers with the same signified (a block).
> Rebol cannot show this relationship to me visually
> >> source a
> a: ["hi"]
> >> source b
> b: ["hi"]
>
> But I can ask it if this is the case
> >> same? a b
> == true
>
> So while I realise that this may not be the best description
> for someone learning the language, I believe this model
> (signifiers/signified) has value in highlighting "the big picture"
> when using Rebol. Rebol is a messaging language.
>
> A language that does not require you to have to think in "bits",
> "byte boundaries", etc.
>
First of all, let me give that last sentence a wholehearted three
cheers, and then go further and say that having to think in bits,
bytes, etc. is precisely the characteristic that segregates low-
level languages from high level languages (in which one does NOT
have to think in such implementation details).
That said, I'd be interested in how to use the "signifier/signified"
model to describe this:
>> a:[] == []
>> b: reduce [1 a 2] == [1 [] 2]
>> c: reduce [3 a 4] == [3 [] 4]
>> a: reduce [b c] == [[1 [] 2] [3 [] 4]]
>> append b/2 "Hi!" == ["Hi!"]
>> a == [[1 ["Hi!"] 2] [3 ["Hi!"] 4]]
The point being that there doesn't have to be a "name" or "word"
to act as a signifier! It is entirely possible to have data
structures with shared references (or "with references to series
values that refer to the same sequence") which exhibit the
sharing surprise
without there being any names for the
shared parts.
-jn-