3个不稳定版本

0.2.1 2020年8月30日
0.2.0 2020年7月19日
0.1.0 2020年7月11日

#44 in #actor-system

MIT/Apache

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