I’ve been following Pony for a couple of years, and fear they’ve lost momentum and drive, which doesn’t bode well for the future of the language. My major grief is no support for “locked” (or synchronous) patterns, ie. when actor#A needs to modify actor#B and have the change accessable in the same Actor#A::Behaviour. In my own Actor framework (C++), I’m forced to implement a LockToWorkThread() pattern where I prohibit Actor#B from being scheduled on other work threads while locked. This way 2 Actors can interact from an “atomic” Behaviour() function. However, C++ doesnt protect against sharing pointers so I’m always on eggshells.

It seems like your major grief is at serious odds with the design principles of the language itself.

It's very difficult to introduce any kind of synchronous behaviour that doesn't also allow deadlocks. "Locking" an actor to prevent it from processing messages would very trivially allow for deadlocks - and since Pony intends to avoid them by design, the language can't ever allow for it.

Why are promises not fit for your purpose?

Verona has been exploring the idea of "behavior-oriented programming" as compared to "actor-oriented" like we have in Pony.

Verona's model allows for something along the lines of what is being suggested. How that works out in the long run, we'll see. It's still very early days for Verona.

A number of folks working on Pony also are associated with Verona and vice-versa so there's a cross-polination of ideas going on.

https://github.com/microsoft/verona

In particular see:

https://github.com/microsoft/verona/blob/master/docs/explore...

and

https://github.com/microsoft/verona/blob/master/docs/explore...