5个版本 (3个重大更新)

0.4.0 2021年1月13日
0.3.0 2020年10月13日
0.2.1 2020年8月30日
0.2.0 2020年7月19日
0.1.0 2020年7月11日

#1356异步

Download history 340/week @ 2024-04-08 166/week @ 2024-04-15 199/week @ 2024-04-22 128/week @ 2024-04-29 238/week @ 2024-05-06 167/week @ 2024-05-13 305/week @ 2024-05-20 281/week @ 2024-05-27 216/week @ 2024-06-03 285/week @ 2024-06-10 258/week @ 2024-06-17 253/week @ 2024-06-24 41/week @ 2024-07-01 58/week @ 2024-07-08 81/week @ 2024-07-15 130/week @ 2024-07-22

每月314次下载
3 crate 中使用

MIT/Apache

57KB
1K 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 {}

impl SimpleGreeter {
    async fn greet(&mut self, name: String) -> ActorResult<String> {
        self.number_of_greets += 1;
        Produces::ok(format!(
            "Hello, {}. You are number {}!",
            name, self.number_of_greets
        ))
    }
}

fn main() -> Result<(), Box<dyn Error>> {
    let mut pool = LocalPool::new();
    let spawner = pool.spawner();
    pool.run_until(async move {
        let actor_ref = Addr::new(
            &spawner,
            SimpleGreeter {
                number_of_greets: 0,
            },
        )?;

        let greeting = call!(actor_ref.greet("John".into())).await?;
        println!("{}", greeting);

        let greeting = call!(actor_ref.greet("Emma".into())).await?;
        println!("{}", greeting);
        Ok(())
    })
}

查看“examples”文件夹以获取更多使用示例。

依赖项

~1–12MB
~142K SLoC