Re: Back & Forth - Co-routines

Liste des GroupesRevenir à cl forth 
Sujet : Re: Back & Forth - Co-routines
De : anton (at) *nospam* mips.complang.tuwien.ac.at (Anton Ertl)
Groupes : comp.lang.forth
Date : 06. Feb 2025, 13:57:12
Autres entêtes
Organisation : Institut fuer Computersprachen, Technische Universitaet Wien
Message-ID : <2025Feb6.135712@mips.complang.tuwien.ac.at>
References : 1 2 3 4 5 6
User-Agent : xrn 10.11
minforth@gmx.net (minforth) writes:
On Tue, 4 Feb 2025 12:26:26 +0000, albert@spenarnc.xs4all.nl wrote:
Remark that is doesn't introduce any unfamiliar syntax,
only does away with "Forth shall not nested definitions"
(Says who?)
>
Given that a Forth system supports quotations and xt-locals,
nested definitions are easy to implement.

You mean:

: foo [: ." xyz" ;] {: xt: bar :} bar ;

Sure, you then get a local that behaves similar to a nested
definition, but I don't think anyone would want to do that.

And it uses proper locals as part of the mechanism, whereas many
contributions in the thread seem to have the goal of doing something
that may require less implementation effort, but also does not do
everything proper locals do (e.g., work with exceptions), and then try
to Jedi away the cases that do not work.

BTW xt-locals exist
f.ex. in gforth. They hold xt's and when called execute the xt
instead of pushing it to the stack as normal locals would do.

We call them defer-flavoured, and the more usual locals
value-flavoured.  In the example above the "xt:" means that the next
name is that of a defer-flavoured local.

When Bernd Paysan introduced defer-flavoured locals, I was sceptical,
especially given the experience with variable-flavoured locals which
have been in Gforth since 1994 and are barely used.  But it turns out
that when a local contains an xt, using a defer-flavoured local is
often more appropriate than a value-flavoured local.  This is: you can
use either (use l EXECUTE when l is value-flavoured and you want to
execute it, or use ACTION-OF l when l is defer-flavoured and you want
its value), but in many cases you want to execute an xt you pass,
sometimes multiple times.

An example is the generation of code for 2-stage division by
constants:

: lit/, {: divisor xt: stage1 xt: stage2 -- :}
    next-section staged/-size small-allot previous-section {: addr :}
    divisor addr stage1 ]] addr stage2 [[ ;

The first line allocates memory for storing the inverse of the divisor
in ADDR.  The second line first converts from the divisor to the
inverse in stage 1 of the division when the division is compiled, and
compiles code for performing stage 2 of the division (multiplying the
dividend (available only at run-time) with the inverse).  It also
demonstrates that when using a defer-flavoured local inside ]]...[[,
the xt in the local is COMPILE,d, not EXECUTEd.

With value-flavoured locals that would have been:

: lit/, {: divisor stage1 stage2 -- :}
    next-section staged/-size small-allot previous-section {: addr :}
    divisor addr stage1 execute ]] addr [[ stage2 compile, ;

While the mechanism is more obvious here, the intent is more obvious
in the version with defer-flavoured locals (at least if you understand
the code).  And of course the orthodox traditional Forther would have
written this without locals at all:

: lit/, ( divisor stage1 stage2 -- )
    >r >r >r next-section staged/-size small-allot previous-section ( addr )
    r> dup r> execute ( addr )
    postpone literal r> compile, ;

- anton
--
M. Anton Ertl  http://www.complang.tuwien.ac.at/anton/home.html
comp.lang.forth FAQs: http://www.complang.tuwien.ac.at/forth/faq/toc.html
     New standard: https://forth-standard.org/
EuroForth 2023 proceedings: http://www.euroforth.org/ef23/papers/
EuroForth 2024 proceedings: http://www.euroforth.org/ef24/papers/

Date Sujet#  Auteur
31 Jan 25 * Re: Back & Forth - Co-routines91dxf
31 Jan 25 +- Re: Back & Forth - Co-routines1Anton Ertl
31 Jan 25 +- Re: Back & Forth - Co-routines1albert
31 Jan 25 +* Re: Back & Forth - Co-routines14Hans Bezemer
1 Feb 25 i`* Re: Back & Forth - Co-routines13dxf
1 Feb 25 i `* Re: Back & Forth - Co-routines12Anton Ertl
1 Feb 25 i  +* Re: Back & Forth - Co-routines4dxf
1 Feb 25 i  i+- Re: Back & Forth - Co-routines1albert
1 Feb 25 i  i`* Re: Back & Forth - Co-routines2Anton Ertl
2 Feb 25 i  i `- Re: Back & Forth - Co-routines1dxf
2 Feb 25 i  `* Re: Use of { and } was Re: Back & Forth - Co-routines7dxf
2 Feb 25 i   `* Re: Use of { and } was Re: Back & Forth - Co-routines6Anton Ertl
2 Feb 25 i    +- Re: Use of { and } was Re: Back & Forth - Co-routines1dxf
2 Feb 25 i    +* Re: Use of { and } was Re: Back & Forth - Co-routines2Anton Ertl
2 Feb 25 i    i`- Re: Use of { and } was Re: Back & Forth - Co-routines1Bernd Linsel
6 Feb 25 i    `* Re: Use of { and } was Re: Back & Forth - Co-routines2Waldek Hebisch
6 Feb 25 i     `- Re: Use of { and } was Re: Back & Forth - Co-routines1dxf
1 Feb 25 +* Re: Back & Forth - Co-routines70Ruvim
2 Feb 25 i+- Re: Back & Forth - Co-routines1dxf
2 Feb 25 i+* Re: Back & Forth - Co-routines2Paul Rubin
3 Feb 25 ii`- Re: Back & Forth - Co-routines1dxf
3 Feb 25 i`* Re: Back & Forth - Co-routines66Ruvim
3 Feb 25 i +* Re: Back & Forth - Co-routines57albert
3 Feb 25 i i`* Re: Back & Forth - Co-routines56Paul Rubin
4 Feb 25 i i `* Re: Back & Forth - Co-routines55albert
6 Feb 25 i i  +* Re: Back & Forth - Co-routines2HenryHH
6 Feb 25 i i  i`- Re: Back & Forth - Co-routines1albert
6 Feb 25 i i  `* Re: Back & Forth - Co-routines52minforth
6 Feb 25 i i   +* Re: Back & Forth - Co-routines2albert
6 Feb 25 i i   i`- Re: Back & Forth - Co-routines1minforth
6 Feb 25 i i   `* Re: Back & Forth - Co-routines49Anton Ertl
6 Feb 25 i i    `* Re: Back & Forth - Co-routines48minforth
6 Feb 25 i i     +* Re: Back & Forth - Co-routines19dxf
6 Feb 25 i i     i+* Re: Back & Forth - Co-routines2minforth
7 Feb 25 i i     ii`- Re: Back & Forth - Co-routines1sjack
6 Feb 25 i i     i`* Re: Back & Forth - Co-routines16Anton Ertl
6 Feb 25 i i     i +- Re: Back & Forth - Co-routines1minforth
7 Feb 25 i i     i `* Re: Back & Forth - Co-routines14dxf
7 Feb 25 i i     i  +* Re: Back & Forth - Co-routines2minforth
7 Feb 25 i i     i  i`- Re: Back & Forth - Co-routines1dxf
8 Feb 25 i i     i  `* quotations (was: Back & Forth - Co-routines)11Anton Ertl
9 Feb 25 i i     i   +* Re: quotations9dxf
9 Feb 25 i i     i   i+* Re: quotations4Paul Rubin
9 Feb 25 i i     i   ii`* Re: quotations3dxf
9 Feb 25 i i     i   ii `* Re: quotations2Paul Rubin
9 Feb 25 i i     i   ii  `- Re: quotations1minforth
9 Feb 25 i i     i   i`* Re: quotations4Anton Ertl
9 Feb 25 i i     i   i +- Re: quotations1albert
10 Feb 25 i i     i   i `* Re: quotations2dxf
10 Feb 25 i i     i   i  `- Re: quotations1albert
9 Feb 25 i i     i   `- Re: quotations (was: Back & Forth - Co-routines)1albert
6 Feb 25 i i     +* Re: Back & Forth - Co-routines27Anton Ertl
6 Feb 25 i i     i+- Re: Back & Forth - Co-routines1minforth
7 Feb 25 i i     i`* Re: Back & Forth - Co-routines25minforth
8 Feb 25 i i     i `* Re: Back & Forth - Co-routines24Anton Ertl
8 Feb 25 i i     i  +* Re: Back & Forth - Co-routines4minforth
9 Feb 25 i i     i  i`* Re: Back & Forth - Co-routines3Paul Rubin
9 Feb 25 i i     i  i +- Re: Back & Forth - Co-routines1minforth
9 Feb 25 i i     i  i `- Re: Back & Forth - Co-routines1Anton Ertl
9 Feb 25 i i     i  `* Re: Back & Forth - Co-routines19Paul Rubin
9 Feb 25 i i     i   +* Re: Back & Forth - Co-routines3minforth
9 Feb 25 i i     i   i`* Re: Back & Forth - Co-routines2Paul Rubin
10 Feb 25 i i     i   i `- Re: Back & Forth - Co-routines1minforth
10 Feb 25 i i     i   `* Re: Back & Forth - Co-routines15Anton Ertl
10 Feb 25 i i     i    +* Re: Back & Forth - Co-routines8ahmed
10 Feb 25 i i     i    i`* Re: Back & Forth - Co-routines7Anton Ertl
10 Feb 25 i i     i    i +- Re: Back & Forth - Co-routines1ahmed
10 Feb 25 i i     i    i +- Re: Back & Forth - Co-routines1minforth
10 Feb 25 i i     i    i +* Re: Back & Forth - Co-routines3mhx
10 Feb 25 i i     i    i i+- Re: Back & Forth - Co-routines1albert
10 Feb 25 i i     i    i i`- Re: Back & Forth - Co-routines1Paul Rubin
10 Feb 25 i i     i    i `- Re: Back & Forth - Co-routines1albert
10 Feb 25 i i     i    `* Re: Back & Forth - Co-routines6Paul Rubin
11 Feb 25 i i     i     `* Re: Back & Forth - Co-routines5minforth
11 Feb 25 i i     i      `* Re: Back & Forth - Co-routines4Paul Rubin
12 Feb 25 i i     i       +- Re: Back & Forth - Co-routines1albert
12 Feb 25 i i     i       `* Re: Back & Forth - Co-routines2minforth
14 Feb 25 i i     i        `- Multi-Tasking (was: Back & Forth - Co-routines)1Anton Ertl
7 Feb 25 i i     `- Re: Back & Forth - Co-routines1minforth
22 Mar 25 i `* Re: Back & Forth - Co-routines8sjack
23 Mar 25 i  `* Re: Back & Forth - Co-routines7dxf
23 Mar 25 i   +* Re: Back & Forth - Co-routines2sjack
24 Mar 25 i   i`- Re: Back & Forth - Co-routines1sjack
24 Mar 25 i   +- Re: Back & Forth - Co-routines1sjack
24 Mar 25 i   `* Re: Back & Forth - Co-routines3dxf
24 Mar 25 i    `* Re: Back & Forth - Co-routines2dxf
24 Mar 25 i     `- Re: Back & Forth - Co-routines1dxf
11 Mar 25 `* Re: Back & Forth - Co-routines4dxf
21 Mar 25  `* Re: Back & Forth - Co-routines3dxf
21 Mar 25   `* Re: Back & Forth - Co-routines2dxf
22 Mar 25    `- Re: Back & Forth - Co-routines1dxf

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal