Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.forth > #135548

Re: coroutines (was Re: dynamic scoping in Forth in one line of code)

Date 2026-09-04 15:24 +1000
Subject Re: coroutines (was Re: dynamic scoping in Forth in one line of code)
Newsgroups comp.lang.forth
References (2 earlier) <874igd9fjt.fsf@debian> <nnd$5e90e337$543815e0@6eeb63a0693c71c3> <875x0oa6fy.fsf@debian> <87ecfcld9r.fsf@nightsong.com> <87mrtxzz0p.fsf_-_@debian>
From dxf <dxforth@gmail.com>
Message-ID <6a9a560f$1@news.ausics.net> (permalink)
Organization Ausics - https://newsgroups.ausics.net

Show all headers | View raw


On 4/09/2026 9:38 am, Kragen Javier Sitaker wrote:
> Paul Rubin <no.email@nospam.invalid> writes:
>> Kragen Javier Sitaker <kragen@canonical.org> writes:
>>> I think you’ve internalized it sufficiently that it’s not surprising to
>>> you, but it was surprising to me when I encountered it a year and a half
>>> ago, at which point I’d been programming for 43 years and occasionally
>>> programming in Forth for 27 years.  Maybe I'm just a slow learner.
>>
>> The idea has been in the literature for a long time (it's discussed at
>> length in Knuth vol. 1 from 1968),
> 
> No, no, I know what coroutines are; I learned about them last millennium
> when I read Knuth vol. 1.  My copy has pencil annotations in the margin
> expressing my skepticism; but, since then I’ve used Icon generators,
> Python generators, Python asyncio, Prolog backtracking, and Lua
> “coroutines,” which might more precisely be called “threads”.
> 
> What surprised me was the extremely parsimonious mechanism of Van der
> Horst’s `co`.

I'm more pragmatist, so if it solves an existing problem then I'm interested.
For years I knew how to 'localize' variables.  But it was all done manually.
When Albert and Hans showed me how to implement it simply and with auto-restore,
it made my day.

  : ;:  >r ;

  : LOCAL ( x adr -- )  r> -rot dup @ over 2>r ! ;: 2r> ! ;

  \\ Example
  variable A  variable B  8 a !  7 b !

  : divide ( a b -- )
    b local  a local  a @  b @  /  . cr  ;

  15 3 divide  a ? b ?

I use it where re-entrancy is required.  While I have loadable 'real' locals,
I hardy bother as this is simpler.

Back to comp.lang.forth | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

dynamic scoping in Forth in one line of code Kragen Javier Sitaker <kragen@canonical.org> - 2026-08-28 18:04 -0300
  Re: dynamic scoping in Forth in one line of code Paul Rubin <no.email@nospam.invalid> - 2026-08-28 18:12 -0700
    Re: dynamic scoping in Forth in one line of code Kragen Javier Sitaker <kragen@canonical.org> - 2026-08-29 10:50 -0300
  Re: dynamic scoping in Forth in one line of code albert@spenarnc.xs4all.nl - 2026-08-29 12:10 +0200
    Re: dynamic scoping in Forth in one line of code Kragen Javier Sitaker <kragen@canonical.org> - 2026-08-29 11:17 -0300
      Re: dynamic scoping in Forth in one line of code albert@spenarnc.xs4all.nl - 2026-08-30 12:49 +0200
        Re: dynamic scoping in Forth in one line of code Kragen Javier Sitaker <kragen@canonical.org> - 2026-09-01 20:38 -0300
          Re: dynamic scoping in Forth in one line of code Paul Rubin <no.email@nospam.invalid> - 2026-09-01 17:15 -0700
            coroutines (was Re: dynamic scoping in Forth in one line of code) Kragen Javier Sitaker <kragen@canonical.org> - 2026-09-03 20:38 -0300
              Re: coroutines (was Re: dynamic scoping in Forth in one line of code) dxf <dxforth@gmail.com> - 2026-09-04 15:24 +1000
                dynamic scoping in Forth in one line of code (was Re: coroutines) Kragen Javier Sitaker <kragen@canonical.org> - 2026-09-04 13:04 -0300
                Re: dynamic scoping in Forth in one line of code (was Re: coroutines) dxf <dxforth@gmail.com> - 2026-09-05 02:59 +1000

csiph-web