请考虑以下代码(简化但可编译):
use std::sync::Arc;
pub trait ActorRef<Message> { /* ... */ }
pub trait Actor<Message> { /* ... */ }
pub trait ActorSpawner {
/// Spawns a new actor returning an actor ref
/// for passing messages to it.
fn spawn<Message,A,R>(actor: A) -> Arc<R>
where R: ActorRef<Message>, A: Actor<Message>;
}
Run Code Online (Sandbox Code Playgroud)
是否可以实现ActorSpawner::spawn或实现与其他签名类似的东西?
问题中的代码被简化以将其减少到我无法解决的核心部分.
通常,Actor应该具有由处理消息改变的可变状态(示例中缺少处理方法).您可以生成一个Actor并可以通过它与它通信ActorRef(示例中缺少send方法).
我想允许不同的"产卵"方式Actor.例如,消息处理可能发生在每个actor的一个线程上.或者可以在由其他actor共享的线程池上完成处理.
其他代码可能依赖于创建更多actor.使用的基础机制应该是抽象的.既然有特质ActorSpawner.
让我们假设我们有一些虚拟实现Actor和ActorRef:
struct NoopActor;
impl<Message> Actor<Message> for NoopActor {} …Run Code Online (Sandbox Code Playgroud) rust ×1