[REBOL] Re: WYSIWYG programming (was: Block Creation)
From: holger:rebol at: 30-Oct-2000 9:32
On Wed, Oct 25, 2000 at 03:05:21AM +0200, Ladislav Mecir wrote:
> Another example showing what is wrong with the Self Modifying Code:
> a: [append a [+ 1] 1]
The above expression modifies a block while it is being evaluated. AFAICT at
this time the result of such an operation should be considered "undefined" and
. In other words: don't do that ! I don't think the
behavior can be called a bug as long as no specs have been defined for how
the language should behave in this case.
Most languages have expressions which are well-formed within the language, yet
have unspecified semantics. An example is something like
in C. Here it is undefined whether the second access to "p" occurs before or
after incrementing it for the first time (assuming I remember the C specs
A "legal" way to rewrite the above REBOL expression would, e.g., be:
a: [append last a [+ 1] do ]
This way the main block does not get changed during evaluation. Only the
block referenced from the main block (the one initialized to be ) gets
changed. That is completely legal.
I hope you can see now why I dislike the term "self-modifying code". There is
conceptually a huge difference between the first and second example, and
the term "self-modifying code" tries to be a catch-all phrase that encompasses
(and discourages) within the same category both legal (and potentially useful)
and illegal practices.