Safe and performant actor model in D

Atila Neves atila.neves at gmail.com
Thu Jun 14 13:24:06 UTC 2018


On Wednesday, 13 June 2018 at 09:45:04 UTC, Per Nordlöw wrote:
> I've read up on Pony [1] and realized that it currently has a 
> superior implementation of the actor model when it comes to 
> combining safety, efficiency and memory management determinism 
> (thread-local reference-counting GC with consensus guarantees)
>
> What libraries do we have at our disposal in D (including 
> code.dlang.org) for implementing task-based parallelism that is 
> close to Pony's solution with regards to
>
> 1. @safely sending isolated (transitively unique reference to) 
> messages between actors (tasks) without the need for copying. 
> Vibe.d has, for instance, `makeIsolated` [2] that serves this 
> purpose.
>
> 2. a task-scheduler that can move blocked tasks between 
> threads. Yes, I know, this has been discussed many times 
> before...I'm checking to see if there are any updates.
>
> 3. could we make such a solution GC-free by requiring immutable 
> data inside isolated messages to be unique references (not 
> currently implicitly shared) aswell using, for instance, 
> https://dlang.org/library/std/typecons/unique.html. I'm 
> thinking of a trait named something like `makeIsolatedUnshared` 
> that checks these restrictions.
>
> [1] https://www.ponylang.org/
> [2] http://vibed.org/api/vibe.core.concurrency/makeIsolated
>
> What assistance can/could we currently/in-the-future get from 
> D's type-system to verify correctness of these paradigms?

I'm working on a library to allow @safe sharing between threads. 
Originally I was just trying to write a D version of Rust's 
std::sync::Mutex. It's so alpha it's not even in the dub registry 
yet:

https://github.com/atilaneves/fearless

The idea is to have a @safe wrapper so the user doesn't have to 
work with `shared` directly (which I call "Bring Your Own 
Mutex"). I've been giving some thought to isolated data - it 
really annoys in me in D that I can't send mutable data to 
another threads unless I make it `shared`, even though I just 
created it and will never see it again from this or any other 
thread!

I need to think about how to do isolated properly. I'll look at 
vibe.d for inspiration.

Atila


More information about the Digitalmars-d mailing list