#actor-model #tokio #macro #boilerplate #own #built #block

actify

一个具有最小样板代码的直观actor模型

14 个不稳定版本 (3 个破坏性版本)

0.4.2 2024 年 5 月 17 日
0.3.3 2024 年 3 月 14 日
0.3.0 2023 年 12 月 28 日
0.2.1 2023 年 8 月 14 日
0.2.0 2023 年 7 月 31 日

#251并发

Download history 2/week @ 2024-04-25 323/week @ 2024-05-09 173/week @ 2024-05-16 24/week @ 2024-05-23 14/week @ 2024-05-30 59/week @ 2024-06-06 54/week @ 2024-06-13 3/week @ 2024-06-20 9/week @ 2024-07-04 10/week @ 2024-07-11 13/week @ 2024-07-18 38/week @ 2024-07-25 28/week @ 2024-08-01 10/week @ 2024-08-08

每月 89 次下载

MIT 许可证

59KB
1K SLoC

Actify

注意,这个 crate 正在建设中。虽然已用于生产,但仍在进行直观 API、文档和剩余功能的工作。目前,它不遵循语义版本控制!

Actify 是一个基于 actor 模型Tokio,允许您使用 actify! 宏注解任何您自己的类型的常规实现块。

Crates.io License Docs

优点

通过为您生成样板代码,提供了以下关键优势

  • 基于 Tokio 和通道的异步 actor 模型,可以保留任意所有者数据类型。
  • 通过可克隆的句柄对底层数据的原子访问和修改。
  • 方法上的类型化参数和返回值,通过每个句柄公开。
  • 无需手动定义消息结构体或枚举!
  • 即使不使用宏,也具有泛型方法如 get() 和 set()。

示例

考虑以下示例,其中您希望将您的自定义 Greeter 转换为 actor

use actify::{Handle, actify};

#[derive(Clone, std::fmt::Debug)]
struct Greeter {}

#[actify]
impl Greeter {
    fn say_hi(&self, name: String) -> String {
        format!("hi {}", name)
    }
}

#[tokio::main]
async fn main() {
// An actify handle is created and initialized with the Greeter struct
let handle = Handle::new(Greeter {});

// The say_hi method is made available on its handle through the actify! macro
let greeting = handle.say_hi("Alfred".to_string()).await.unwrap();

// The method is executed remotely on the initialized Greeter and returned through the handle
assert_eq!(greeting, "hi Alfred".to_string())
}

依赖关系

~3–10MB
~91K SLoC