// 创建确定性模拟执行器
let config = default_sim_config(42L)
let exec = DeterministicExecutor::new(config)
// 读取模拟时钟
let time = exec.clock()
// 使用确定性随机数生成器
let rng = exec.rng()
let (rng, value) = rng.next_int64()
// 写入模拟存储
let storage = SimStorage::new()
let storage = storage.write("/data.txt", Bytes::new(0))
// 创建模拟网络并发送消息
let net = SimNetwork::new(rng, SimClock::zero(rng))
let net = net.add_node("node-a")
Moon DetSim
面向 MoonBit 异步程序的确定性模拟测试框架。
项目简介
Moon DetSim 将程序运行时中的一切非确定性来源(I/O、时钟、随机数、网络、 任务调度)替换为模拟的、确定性的替代实现。给定相同的种子,模拟器始终产生 完全相同的执行轨迹,使得分布式系统中那些难以捉摸的 Bug 可以像放录像一样 逐指令精确回放。
这一方法论已被 FoundationDB 和 TigerBeetle 验证——前者凭借确定性模拟做到 SQL 数据库领域最低 Bug 率,后者在金融数据库中实现了零 Bug 承诺。
核心模块
快速开始
运行测试
当前通过 22 个白盒测试,覆盖 RNG、时钟、存储、网络、执行器和录制模块。
参考项目
许可证
Apache 2.0