On Wed, 11 Nov 2009 20:03:37 -0500, Bill Baxter <wbax...@gmail.com> wrote:

On Wed, Nov 11, 2009 at 4:56 PM, Walter Bright
<newshou...@digitalmars.com> wrote:
hasenj wrote:

Walter Bright wrote:

Message passing for concurrency is a solid solution for many types of
concurrency problems, but it isn't a panacea.

Do you think D would benefit if you add this (or similar) feature to it?


Sean is working on a message passing (CSP) package for D. I'm not convinced
it needs to be a core language feature, though.


Is it possible to do the kind of "goroutine" scheduling they do purely
as a library?

That wasn't really clear to me how their "segmented stacks" thing
works.  Sounds like it would need low-level runtime system support,
though.

--bb

Yes and no. At heart, they're basically co-routines or fibers, but with a grow-able stack. So the basic model can be done in a library (and is already in druntime, sans the CSP style message passing), but the compactness of a segmented stack are missing. And when you're creating 100_000 fibers, memory compactness is key. I'm extrapolating, because I didn't see anything obvious on the website, but basically a segmented stack allows ESP (the stack pointer) to vary independently of EBP (the current stack frame pointer). This requires the stack frame to contain a 'done' flag, it's size, etc, to allow memory reclamation (i.e. so the ESP can shrink), among other things.

However, a Cilk style task library is both possible and already available in D (see Dave Simcha's parallel foreach), and covers most of the examples in the videos; using fibers for simple tasks is overkill.

BTW, D currently requires: EBX, ESI, EDI, EBP must be preserved across function calls.

P.S. You might want to take a look at C++ CSP: http://www.cs.kent.ac.uk/projects/ofa/c++csp/

Reply via email to