[REBOL] RIP ifs-for-whomever Re:
From: vhirsch:metrohealth at: 13-Oct-2000 11:00
Thank you for another interesting essay. For a self-described
Bear of Small Brain
you write well in both English and in REBOL..
I've enjoyed almost all of your thoughtful postings even when I wasn't
able to follow the REBOLish details.
Thanks also for mentioning Richard Gabriel. His "Patterns of Software"
sat unread on my shelf for two years until you mentioned him earlier
this week. Now I wish I'd picked it up sooner.
Can you explain what you mean by "a von Neumann language"?
Do you have a reference? I'm familiar with the notion of a von Neumann machine
(von Neumann architecture, von Neumann model) but a google search for
von Neumann language
wasn't helpful. I assume you mean something
more than a programming language which runs on a von Neumann machine
since COBOL satisfies this description.
Finally, what's EWD?
>>> <[joel--neely--fedex--com]> 10/13/00 09:52AM >>>
As an avid reader of EWD, I assure you that I consider termination
to be a crucial part of algorithm correctness. (I toyed with adding
an additional argument to UNRAVEL as a bound on the number of
iterations before UNRAVEL would give up on an argument as being too
knotted to unravel. I chose, perhaps unwisely, not to include that
in the open discussion, thinking that it would complicate things
However, your concern will apply WHENEVER we attempt to define new
control structures or higher-order functions! DO, REDUCE, WHILE,
and even the lowly IF all have the property that I can hand them
arguments whose evaluations fail to terminate. If, for example,
a function such as MAP (per earlier discussion on this list) gives
me the privelege of handing it an arbitrary chunk of code to be
executed under its control, then it simultaneously imposes on me
the responsibility of dealing with the termination of that code.
I know no way around this.
And (if I may have your ear just a moment longer...) there is a
negative historical precedent which is quite fascinating (to me,
The publication of Benoit Mandelbrot's _The_Fractal_Geometry_of_
_Nature_ (copyright 1977) was a great shock to many people
(including, unfortunately, some mathematicians) who perceived
the ideas (and pictures!) of that book to be an entirely new way
of looking at the world. Subsequently there has been a flurry of
excitement and activity regarding how fractal formulae and
thinking can give us powerful new models with which to work.
HOWEVER... in the introduction, Mandelbrot himself dates the
roots of fractal geometry to 1875, over a century earlier!
Why then did so many (including scientists and mathematicians)
perceive fractal geometry to be so startlingly new?
Because the mathematical establishment had dismissed earlier
investigations into "monstrousities" (such as the continuous,
non-differentiable function reported in 1875) as frivolous or
wrong-headed. My point here is not about the individuals
involved (then or now, including members of this list!), but
about how ideas become mainstreamed or marginalized.
Fractal geometry "took off" only after some really hard work to
show interesting and useful applications. Since then, a number
of powerful techniques for mastering the apparent complexity
(and detecting it in otherwise simple-looking formulae) have
been developed and put to use.
REBOL (as a von Neumann language in the company of Lisp, PROLOG,
etc.) gives us the ability to indulge in what I'll call "logical
fractals" whose behavior is *SEVERELY* unobvious if we aren't
aware of what we're getting into. Now, please hold that thought
for a moment, while I draw in one other connection...
In an essay (the ninth chapter of his book _Patterns_of_Software_,
Rich Gabriel suggests four characteristics which a programming
language must have to survive:
* Languages are accepted and evolve by a social process,
not a technical or technological one.
* Successful languages must have modest or minimal
computer resource requirements.
* Successful languages must have a simple performance
* Successful languages must not require users [to] have
REBOL succeeds admirably on #2, and we're all working on #1 via
this mailing list.
#3 is more problematic. I've never seen an "official" model of
REBOL semantics, but throughout my involvement with it I've
been trying to come up with pieces of one (e.g., my earlier
essays on SERIES! values). I still believe that there are many
parts of REBOL that could be explained precisely and simply,
but others that are not so clear. (Either in my poor head or
in fact -- witness the differences in behavior when mutations
are applied to BLOCK! versus LIST! values.)
#4 is the most "dangerous" to REBOL, in that *EVERY* vNL of
which I'm aware -- REBOL included -- requires at some point a
fair bit of sophistication to understand, or at least to
recognize when one is getting into deep waters.
TYING IT ALL TOGETHER (at last!)
I suspect that what we (computing folk in general) need before
vNL languages in general -- and REBOL in particular -- will be
widely accepted is the beginnings of a real grasp on "logical
fractals" that let us use their power effectively and (mostly)
safely. Of course, one approach is to say "Don't do that at
all!" If I take that approach, I begin to wonder why I don't
just stick to COBOL!
OTOH, if I can begin to get a grip on when and how to use such
* mezzanine-level control constructs,
* higher-order functions,
* self-modifying, stateful values,
I may be able to take advantage of REBOL's power -- using it
more effectively -- and be able to explain/communicate its
benefits more persuasively -- promoting its success more
To that end, I'm profoundly grateful to the members of this
list for their challenges, discussions, and inspiration!