Dependencies
+------------------------------------------+
| System | (Cooperative Scheduler Loop)
| +--------------------+ |
| | active_contexts | Array[() -> Bool]|
| +---------+----------+ |
+------------|-----------------------------+
| triggers
v
+------------|-----------------------------+
| v Context[Msg] | (Actor Mailbox & State)
| +---------+----------+ |
| | mailbox | Array[Msg] |
| +--------------------+ |
| | mailbox_index | Int (O(1) Head) |
| +--------------------+ |
| | actor | Actor[Msg] |
| +--------------------+ |
+------------------------------------------+enum CounterMsg {
Increment
Decrement
Get
}
struct CounterState {
mut value: Int
}test "actor system demonstration" {
// 创建 Actor 运行系统
let system = System::new("DemoSystem")
// 声明状态
let state = { value: 0 }
// 创建 Actor 实例并捕获状态
let actor = Actor::new(
fn(_ctx) { println("Actor started!") },
fn(_ctx) { println("Actor stopped!") },
fn(msg, _ctx) {
match msg {
Increment => state.value 1
Decrement => state.value - 1
Get => ()
}
}
)
// 注册并启动 Actor,获取安全引用地址
let addr = system.spawn(actor)
// 1. Tell 异步投递消息
addr.tell(Increment)
addr.tell(Increment)
addr.tell(Decrement)
// 驱动协作式事件循环处理消息
system.run_pending()
// 2. Ask 同步请求应答
let count = addr.ask(Get, fn(_msg) { state.value })
println("Final count: \{count}") // 输出: 1
}moon_actor/
├── LICENSE # Apache 2.0 开源证书
├── README.md # 项目技术说明文档
├── moon.mod.json # 模块配置信息
└── src/
├── actor.mbt # Actor 结构体与构造器
├── context.mbt # Mailbox 与出入队消息上下文
├── address.mbt # Tell/Ask 消息投递接口
├── system.mbt # 协作式并发调度器与 System 引擎
├── message.mbt # 核心 Message 约束定义
├── supervisor.mbt # 监督策略基础类型
├── envelope.mbt # 消息信封封装定义
└── actor_test.mbt # 单元测试与用例验证Dependencies