"Hugh Aguilar" <
hughag...@yahoo.com> wrote in message
news:2bb0e774-9b80-44ae...@t6g2000pba.googlegroups.com...
...
> I am getting rid of DO loops altogether in Straight Forth. I'm
> also getting rid of >R R@ R> etc., or at least deprecating them.
Sigh ... Hugh, Hugh, Hugh! How many _years_ have you been
saying this? Just do it already.
Years ago, a friend of a friend of mine always just happened to
come around at the same time that I'd be telling a story he'd
already heard to someone who hadn't already heard that story
before. Of course, this guy would interrupt and point out just
how many times he had heard the story previously. ... 2 ... 3 ...
8 ... He was really irritating. Of course, he probably thought I
was really irritating for telling the same story over and over.
He probably thought I was a bore too or perhaps forgetful. But, I
wasn't telling *him* the story over and over. I only told him the
story once. I was telling another person or people the story for
the first time. He consistently butted into or joined the telling
of the story to others. From my perspective, he had no tact or
was inconsiderate or rude. He wouldn't let me tell my stories to
someone new without aggravating me by pointing out that he'd heard
it already. Even though it was clear he was the only one present
uninterested hearing my story, he wouldn't leave the area. If he
had thought about who was present at the time each story was told,
he might've realized that *he* was the only person consistently
present.
So, from my perspective, you're the bore in this case ... I guess
that makes me the irritant. ;-) Of course, Mark or anyone else
here could be the irritant, since everyone here for more than a
year or two has heard you say you're going to eliminate >R R@ R>
from StraightForth over and over and over ... yet again. We're
waiting. We're hoping. Just do it already.
> I use BEGIN loops with local variables for iteration. DO loops
> were invented in the 1970s, prior to Forth having local
> variables --- I and J are just crude implementations of
> local variables.
I wouldn't know about that.
I and J do need to save and move around _two_ data items, at least
in my current implementation ...
> I think that DO loops are overly complicated.
I agree that the *implementation* of DO loops is overly
complicated. Their use seems simple enough, though.
> It is weird to have I and J available only in the loop
> and not outside.
Huh? Do you mean have I and J available only in the _inner_
loop of two loops, with the outer loop's I equivalent to the inner
loop's J, and not have either available outside both loops, or
somesuch ... ?
> Also, if you have nested loops, I means one
> thing in the outer loop and something else in the inner loop ---
> that's confusing.
That's simply because I and J are stacked and not in memory as
named variables. If you use variables, I will always be I and J
will always be J, yes? Then, Forth becomes more like the BASIC
that you desire in regards to I and J and likely K too. It's a
simple change. Do it, already. Of course, *NOT* using the a
stack for I and J, wouldn't be the "Forth way", i.e., "you can't
do that" ...
> Also, it is very confusing that >R R@ R> etc. can be
> used in a colon word, but they can't carry values into the DO
> loop --- so they can't really be used as local variables, which
> is their intended purpose.
Personally, I don't "see" use as "local variables" as the intended
purpose of >R R@ R> and/or RDROP etc. The purpose is to
effectively implement either 1) an "infinite" tape as it's known
for a Turing machine, or 2) the equivalent of stack frames for a
0-operand language. Basically, with >R R@ R> both the
data/parameter stack and the return/control stack, become a single
stack for manipulating data. >R R@ R> function similarly to a
stack pointer, e.g., ESP and EBP combination for 32-bit x86
assembly, allowing the coder to move up and down the stack to the
collection of data items they wish to manipulate. Each collection
of data items can be viewed as a stack frame.
(Recently, you said you finally learned something from me ... Did
you learn something from this last paragraph? If not, I have to
assume it's a fault on your part, not mine.)
> DO loops are also anti-intuitive and confusing when
> you are descending rather than ascending. All in all, DO
> loops are an ugly kludge from the 1970s that can be discarded.
Sigh, transparent, I'll feign that I'm not being baited ...
So, what type of looping construct do you recommend, Hugh? Have
you created a new one? Are you willing to share it with others
here or is it proprietary? I've not yet noticed you starting a
thread on a new loop method for Forth. If I have to, desire to,
or it results in better code, I can use a while(1) loop in C - the
simplest available for C - for any situation that requires a loop.
However, C provides a richer set of loop constructs, where less
coding is required. Are you stating that you'd like to eliminate
higher level loops in Forth?
> Also, I have separate stacks for single-precision and
> double-precision data (and a third stack for floats) ---
Massive overkill?
> I don't jumble different types of data together on the same
> stack as done in ANS-Forth, which is another 1970s kludge
> (jumbling everything together was originally done
> due to a shortage of registers and shortage of memory).
True, probably. Although, early Forths likely didn't have as many
different types of data either. I.e., they didn't need multiple
stacks, in the first place. So, why implement them? That begs
the question of what is the actually the cause and what is the
effect.
Rod Pemberton