Just so you know, those of us who believe in structured concurrency often have slightly different meanings (which I believe will converge over time). My definition is at [0].
Beyond libdill, a rough version has now been implemented in C. (By me, sorry for shilling.)
An example of it in code is at [1].
Combine it with something I call a stackpool (basically a heap-allocated replacement for `alloca()`), and you can worry very little about managing memory manually, even in C.
In fact, both together can even serve the same purpose as Rust's borrow checker in C, if you are willing to write your code with a certain style.
Once I implement it as a first-class construct in a language (which I'm doing right now), it will look like this:
threadset
{
// This starts a thread.
go run_thread(arg1, arg2, etc);
// The current thread does not leave
// this block until all threads finish.
}
I'm happy to answer questions.
[0]: https://gavinhoward.com/2019/12/structured-concurrency-defin...
[1]: https://git.yzena.com/Yzena/Yc/src/commit/30f4ae4e471cb5a500...
Beyond libdill, a rough version has now been implemented in C. (By me, sorry for shilling.)
An example of it in code is at [1].
Combine it with something I call a stackpool (basically a heap-allocated replacement for `alloca()`), and you can worry very little about managing memory manually, even in C.
In fact, both together can even serve the same purpose as Rust's borrow checker in C, if you are willing to write your code with a certain style.
Once I implement it as a first-class construct in a language (which I'm doing right now), it will look like this:
I'm happy to answer questions.[0]: https://gavinhoward.com/2019/12/structured-concurrency-defin...
[1]: https://git.yzena.com/Yzena/Yc/src/commit/30f4ae4e471cb5a500...