3个不稳定版本
0.2.1 | 2020年8月30日 |
---|---|
0.2.0 | 2020年7月19日 |
0.1.0 | 2020年7月11日 |
#44 in #actor-system
54KB
1.5K SLoC
act-zero
一个旨在实现多个目标的Rust actor系统
- 无样板代码。
- 人体工程学。
- 支持基于特质的静态和动态多态。
- 拥抱async/await。
- 无执行器限制。
还有一些基本的构建块来支持远程通信,但实际的消息传输机制留给用户。
开始只需要很少的代码
use std::error::Error;
use futures::executor::LocalPool;
use act_zero::*;
struct SimpleGreeter {
number_of_greets: i32,
}
impl Actor for SimpleGreeter {
type Error = ();
}
#[act_zero]
trait Greeter {
fn greet(&self, name: String, res: Sender<String>);
}
#[act_zero]
impl Greeter for SimpleGreeter {
async fn greet(&mut self, name: String, res: Sender<String>) {
self.number_of_greets += 1;
res.send(format!(
"Hello, {}. You are number {}!",
name, self.number_of_greets
))
.ok();
}
}
fn main() -> Result<(), Box<dyn Error>> {
let mut pool = LocalPool::new();
let spawner = pool.spawner();
pool.run_until(async move {
let actor_ref = spawn(
&spawner,
SimpleGreeter {
number_of_greets: 0,
},
)?;
let greeting = actor_ref.call_greet("John".into()).await?;
println!("{}", greeting);
let greeting = actor_ref.call_greet("Emma".into()).await?;
println!("{}", greeting);
Ok(())
})
}
依赖项
~2MB
~42K SLoC