#actor #macro #proc-macro

macro tractor-macros

tractor 的过程宏

3 个版本

0.0.6 2021 年 3 月 5 日
0.0.4 2021 年 3 月 4 日
0.0.1 2021 年 1 月 30 日

156#macros

每月 23 次下载
用于 tractor

MIT 许可证

14KB
289

tractor

基于 Pony 的 actors 设计的 Rust Actor 框架

  • Actor 不会发生死锁!

  • Actor 发送消息永远不会失败。

  • Actor 中没有 async。行为不能阻塞。

  • Actor 由垃圾回收器回收。

  • 与 Rust 中的其他 Actor 实现相比,tractor 的实现相当简单。

  • 它使用 tokio,但过去使用过 async_std

示例

Cargo.toml 中添加 tractor = "*"

use tractor::prelude::*;

pub struct Adder {
  sum: usize,
}

#[actor(derive_hooks)]
impl Adder {
  fn inc(&mut self) {
    self.sum += 1;
  }

  fn add(&mut self, num: usize) {
    self.sum += num;
  }
}

fn actor_main() {
  let adder: Addr<Adder> = Adder { sum: 0 }.start();

  /// This sends the `inc` message to the actor.
  adder.inc();

  /// This sends the `add` message to the actor.
  adder.add(42);
}

fn main() {
  ActorSystem::run_to_completion(actor_main);
}

更多信息

  • Actor 有无界邮箱,send 是非阻塞的。

  • Actor 不能手动停止。只要没有对它们的进一步引用并且邮箱为空,它们就会终止。这意味着向 Actor 发送消息永远不会失败,除非耗尽内存。为了避免过载 Actor,您可以检查它的邮箱当前长度。

  • Actor 的行为没有返回值!因此,Actor 不支持“等待”结果。要“模拟”请求/响应,请将 Actor 的地址放在消息中,并对其进行响应。

  • Actor 的行为不是 NOT async fnAsync 意味着执行可以“停止”。请使用异步 actor(《code>ActorBehaviorAsync / ActorHooksAsync)。

  • 注意:任何 Actor 循环都将破坏 Actor 的垃圾回收。

依赖项

~2MB
~43K SLoC