xtra
A tiny (<1k LOC) actor framework. It is modelled around Actix (copyright and license here). It's probably best to not use this production.
Features
- Small and lightweight: it only depends on
futuresby default. - Asynchronous and synchronous responders
- Simple asynchronous message handling interface which allows
async/awaitsyntax (no moreActorFuture- asynchronous responders just returnimpl Future) - Does not depend on its own runtime and can be run with any futures executor (Tokio and
async-std have the
Actor::spawnconvenience method implemented out of the box). - Quite fast (<200ns time from sending a message to it being processed for sending without waiting for a result)
Okay, sounds great! How do I use it?
Check out the docs and the examples
to get started! Enabling the with-tokio-0_2 or with-async_std-1 features are recommended in order to enable some
convenience methods (such as Actor::spawn). Which you enable will depend on which executor you want to use (check out
their docs to learn more about each). If you have any questions, feel free to open an issue
or message me on the Rust discord.
To do
- Thread-local actors that are
!Send - Examples in documentation
- Actor notifications (sending messages to self) and creating an address from the actor's context
- Scheduling of repeated-at-interval and time-delayed messages for actors
Limitations
The main limitation of this crate is that it extensively uses unstable features. For example, to get rid of
ActorFuture, Generic Associated Types (GATs)
must be used. This is an incomplete and unstable feature, which appears to be a way off from stabilisation.
It also uses impl Trait Type Aliases to avoid Boxing the futures
returned from the AsyncHandler trait (the library, however, is not alloc-free). This means that it requires nightly to
use, and may be unstable.