Liste des Groupes |
In article <nnd$032b844d$734ee136@776df242e330d1d2>,
Hans Bezemer <the.beez.speaks@gmail.com> wrote:On 08-01-2025 17:27, albert@spenarnc.xs4all.nl wrote:
>I was impressed with the Behringer solution.>
(I didn't care about the politically correct solution.)
>
====================================
: local{ R> SWAP DUP >R @ >R >R ;
: }global R> R> R> ! >R ;
=================
>
But I can do you one better.
Remember the word ;: from colorforth. That is actually a coroutine call.
I call it CO. (Present in ciforth since the year 00)
<snipped>
>>>
With CO the example become
---------------------------------------
: LOCAL R> SWAP DUP >R @ >R >R CO R> R> ! ;
>
VARIABLE A
VARIABLE B
>
: divide
A LOCAL
B LOCAL
B ! A ! A @ B @ /
. CR
;
>
15 3 divide
---------------------------------------
>
This saves a definition and a word-of-code, and a line for every
LOCAL used. Now that is closer to what Chuck Moore would have used.
Remember for Moore CO aka ;: is a standard word.
>
CO is not standard but it should be, and it is elementary as hell.
Couldn't find the source for either CO or ;: but I got some primitive,
high level form of co-routine in 4tH:
>
====================================
: yield r> r> swap >r >r ; \ remember that ; compiles EXIT!
aka rdrop grab \ so add a [FORCE] when needed.
====================================
That is the equivalent in high level code.
In assembler, assuming ESI is the interpreter pointer and EBP is the return
stack pointer:
CODE CO
XCHG ESI,[EBP]
NEXT,
END-CODE
In assembler the return stack is uncluttered.
...
>
Can't say how they measure up. But I guess co-routines is something
Chuck would like - since it's something you can implement quite easily.
So yes, I agree Chuck wouldn't waste that line ;-)
>
Hans Bezemer
Les messages affichés proviennent d'usenet.