coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 05 May 2021 18:30 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 06 May 2021 10:28 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Feeley 06 May 2021 14:26 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 06 May 2021 14:49 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Alexey Abramov 06 May 2021 15:32 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 06 May 2021 15:41 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 06 May 2021 16:28 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 06 May 2021 16:37 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 06 May 2021 16:48 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 06 May 2021 17:22 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Wolfgang Corcoran-Mathe 06 May 2021 19:12 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 06 May 2021 19:37 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Wolfgang Corcoran-Mathe 06 May 2021 21:54 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 07 May 2021 07:01 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Alex Shinn 07 May 2021 07:41 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 07 May 2021 08:35 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Alex Shinn 07 May 2021 08:41 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Nieper-Wißkirchen 07 May 2021 08:58 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Alex Shinn 07 May 2021 13:47 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 06 May 2021 19:36 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Lassi Kortela 06 May 2021 19:40 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche Boubekki 06 May 2021 21:25 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Marc Feeley 06 May 2021 17:07 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 06 May 2021 21:01 UTC
Re: coop - a concurrent ml-like wanna be (pre-SRFI) John Cowan 06 May 2021 21:25 UTC

coop - a concurrent ml-like wanna be (pre-SRFI) Amirouche 05 May 2021 18:30 UTC

I started to implement a Concurrent ML (CML) and read about the actor
model
as part of Gambit termite library.

I feel like the termite will force me into a certain way to handle
errors:
exceptions will be "propagated" to linked termite's process, if the
program
does not rely on exceptions, you still have room for programming errors.

It seems to me coop is more like Scheme. Scheme offers several tools to
handle errors (raise, maybe, values) but does not force a particular
style.

I used to think it gives room to experiment, and because I was locked in
world
where exceptions are not cheap, I used to prefer to rely on exception
only
when the error need to propagate such as the caller does not necessarily
need
to handle it, and pass it up around or up the stack manually. One case
where
I do not use exceptions is input validation: I consider the user to be
wise to
check the return value if they call the validation procedure (in other
words,
the user does not call validation needlessly!).

Anyway, at the moment it seems to me CML is more like Scheme where it
provides
the tool but does not lock into a given style of programming.

I have no proof yet, it seems possible to implement SRFI-18 [0] and the
actor model
with CML on top of coop. Here is clue where make-thread and thread-join
are implemented
with coop:

   (define (make-thread thunk)
     (define channel (make-coop-channel))
     (coop-spawn (lambda () (thunk) (coop-apply (coop-produce channel
#t))))
     channel)

   (define (thread-join channel)
     (coop-apply (coop-consume channel)))

   (define channel (make-thread (lambda () 42)))

   (thread-join channel)

[0] https://srfi.schemers.org/srfi-18/

coop is general enough to work for inter-process and intra-process
communication.

async / await syntax or procedure are not necessary, and non-blocking
ports, generator,
or accumulator can rely on an event-loop. In other words, coop is not
necessarily
bound to a particular implementation of non-blocking procedures.

In coop, coop-spawn may start inside the current process, then when
coop-priority is
set to +inf.0, it may move parallel computation (that is my
understanding of the
behavior of gochans).

Still, coop-priority might be completely ignored by the host, and a flow
would need
to be started in parallel thread explicitly.

Coop is supposed to work in the following situation:

   (define channel (make-coop-channel))

   (make-thread (lambda () (coop-apply (coop-produce channel 42)))

   (coop-apply (coop-consume channel))  ;; => 42

In other words, coop may be implemented in many thread models relying on
POSIX threads or multiple POSIX processus, multiple interpreters, etc...

The specification does specify what objects can be passed in a channel,
it is expected that at least readable types can go through.

The behavior  of parameters are not necessarily changed, since the
only seemingly parameter looking procedure is coop-priority that is only
a hint.

Checkout the short preliminary SRFI at
https://github.com/pre-srfi/coop#specification