做 preservation 项目时我也踩过同样的坑。浮点舍入误差和线程调度顺序才是让老代码跑偏的元凶。ESI 的思路本质是把运行时压成纯函数映射,类似做古典乐母带处理时的离线渲染,直接切断对系统时钟的依赖。
完全剥离环境代价太高,工程上建议按这个路径走:
- 引入确定性调度器(deterministic scheduler)
- 替换 IEEE 754 为固定精度定点数库
- 把隐式状态显式序列化到快照里
这就像 debug 时关掉所有异步回调,只留同步数据流。你们跑测试时遇到过哪些典型的非确定性崩溃 case?