[REBOL] Re: Fun with literal blocks!
From: joel:neely:fedex at: 29-Oct-2000 14:01
Hi, Ladislav,
[rebol-bounce--rebol--com] wrote:
> Hi Joel,
>
> thank you for choosing the Monsters subject. I would like to
> present a somewhat surprising/questionable point of view.
>
Debatable, perhaps, but an interesting analysis! (And surprises
can be good...)
> 1) A safe statement: the Monsters are undocumented.
>
Yep.
> 2) A questionable statement: the Monsters are *undocumentable*.
>
In theory, I might argue with you; in practice -- given the current
state of things -- I'd agree that the only adequage model would be
the actual source code of the interpreter (as you stated further on).
> I know that it is wrong, if I don't add an explanation,
> what that means. Let's go:
>
> Let me define the Monsters first.
>
> a) I call a Rebol value a Self Modifying (Rebol Code), if its
> evaluation (with a help of Do e.g.) causes its change (to be
> precise, I should define what is a Change, but let's leave that
> for a future discussion). (This definition differs from a "usual"
> definition of a Self Modifying Code!)
> b) I call a Rebol value a WYSIWYG (Rebol Code), if its evaluation
> (using Do e.g.) doesn't cause an evaluation of a Self Modifying
> Rebol Code.
> c) There are some Rebol values, like functions/natives If, Either,
> For, While, Make, ..., for whose the latter depends on the
> argument(s) they receive or on some other unknowns. Such values I
> call (relatively) WYSIWYG.
>
I understood your point (c) to cover such cases as:
twiddle: func ['a [word!]] [
append second get a true
]
>> so-called-data: [[1 2 3] ["a" "b" "c"]]
== [[1 2 3] ["a" "b" "c"]]
>> twiddle so-called-data
== ["a" "b" "c" true]
>> so-called-data
== [[1 2 3] ["a" "b" "c" true]]
given that someone could always do
>> second get 'twiddle
== [
append second get a true
]
>> twiddle twiddle
== [
append second get a true true
]
>> twiddle so-called-data
== true
>> so-called-data
== [[1 2 3] ["a" "b" "c" true true]]
So, I take your point (a) to mean
if its evaluation NECESSARILY causes its change
-----------
Did I interpret correctly?
> d) Any Rebol Value, that is not (at least relatively) WYSIWYG
> I call non-WYSIWYG.
>
> I would call a Monster any non-WYSIWYG Rebol Value.
> Now back to the questionable statement. I think, that:
>
> i) The behaviour of Monsters is irregular and heavily
> implementation-dependent (see the example Monster below, or
> any other Monster I supplied in the WYSIWYG programming thread).
>
I agree with your general statement, although it would be possible
to specify high-level (e.g. non-implementation-dependent) semantics
for some cases. There would probably always be some monstors which
would slip through the specificational net, no matter how tightly
it was woven...
> ii) Nobody can list all Monsters.
> iii) The one thing that could describe the behaviour of all
> Monsters is the interpreter source code.
>
> In the above sense are the Monsters undocumentable, which means,
> that their evalualuation shall be avoided as much as possible.
>
I think we agree on goal, but I think your "guard rail" is just a
bit more conservative than mine. I see a distinction between
Monsters such as
>> a: [append a [+ 1] 1]
== [append a [+ 1] 1]
and (to invent a bit of terminology) Safely Self-Referential Code
such as
count: func [/reset val [integer!] /local state] [
state: [0]
either reset [
change state val
][
state/1: 1 + state/1
]
first state
]
>> count == 1
>> count == 2
>> count == 3
>> count == 4
>> count == 5
>> count/reset 0 == 0
>> count == 1
>> count == 2
I think it is possible to specify the semantics of a vNL such that
one can write Safely Self-Referential Code without too much risk.
Of course, I think we're in agreement that such code will always
remain mysterious to those who are not yet familiar with REBOL's
use of definitional scope and the way in which literal blocks are
handled. Whether that level of mystery is unacceptable or not is
(to me) more of a matter of opinion than the belief (which I think
we share) that general-purpose industrial-strength Monsters should
not be allowed to roam the streets, but should be kept in biohazard-
equipped zoos.
-jn-