时间不是索引:Rust 量化算子中的 Time Semantics 与窗口模型

文献声明

本文不是 Rust 教程,也不是量化策略教程。

本文是《Rust 量化算子》基础篇第三篇,目标是定义时间(Time)在算子执行模型中的工程语义

文中代码仅用于验证定义是否成立,而非教学示例。


作者

yuer

EDCA OS 作者

可控 AI 标准提出者

工程仓库:https://github.com/yuer-dsl

联系邮箱:lipxtk@gmail.com


1. 为什么"时间"不能继续被当成索引

在前两篇中,我们已经确定:

  • 算子是可调度的执行单元

  • 状态是跨执行存在的数据实体

一旦状态存在,一个问题不可避免:

状态是"按什么顺序"演化的?

在大量实现中,默认答案是:

  • 行号

  • index

  • 数据到达顺序

这种处理方式在以下场景中会系统性失效:

  • 数据乱序(out-of-order)

  • 回放与重算(replay)

  • 批量与逐条混合执行

  • 不同数据源对齐

索引不是时间,只是存储顺序。


2. 核心定义:Time Semantics

在本文中,时间语义(Time Semantics) 被定义为:

约束算子执行顺序与状态演化方式的外部语义坐标。

关键点在于:

  • 时间不等同于 index

  • 时间不由算子内部生成

  • 时间影响"何时执行",而非"如何计算"


时间语义明确不等于:

  • 行号

  • 数组下标

  • 批次序号


3. TimeIndex:最小时间表达

本文不试图一次性覆盖 event-time / processing-time 的全部复杂性,

而是引入一个最小可共识对象

3.1 定义:TimeIndex

TimeIndex 是一个与输入数据绑定的、可比较的时间标识。

最小约束:

  • 可比较(PartialOrd / Ord)

  • 单调性由外部保证

  • 不要求连续

pub trait TimeIndex: Ord + Clone {}

说明:

  • TimeIndex 是语义接口,不是具体时间类型

  • 可以是时间戳、序号、逻辑时钟


4. 状态如何绑定时间

一旦引入 TimeIndex,状态不再是"无条件累积"。

本文做出以下定义:

状态的演化必须受时间语义约束。

这意味着:

  • 相同输入,在不同时间顺序下,可能产生不同状态

  • 时间错序必须是显式问题,而非隐式 bug


5. WindowedState:窗口状态模型(v0.1)

5.1 定义

WindowedState 被定义为:

只对某一时间区间内的数据负责的状态实体。

最小窗口语义包括:

  • 固定窗口(fixed)

  • 滑动窗口(sliding)

  • 滚动窗口(rolling)

本文不区分实现策略,只定义语义边界


5.2 最小接口示意

pub trait WindowedState<T, Time: TimeIndex> { fn advance(&mut self, time: Time); fn apply(&mut self, value: T); fn reset(&mut self); }

说明:

  • advance 明确时间推进

  • apply 只在当前窗口生效

  • 不引入 watermark / lateness 处理


6. 一个最小时间感知示例

下面示例仅用于说明:
时间改变状态演化路径。

pub struct SimpleWindow { sum: f64, } impl WindowedState<f64, u64> for SimpleWindow { fn advance(&mut self, _time: u64) {} fn apply(&mut self, value: f64) { self.sum += value; } fn reset(&mut self) { self.sum = 0.0; } }

这个实现并不完整,但明确了一点:

状态更新不再只依赖"被调用",

而依赖"在什么时间被调用"。

相关推荐
Yuer20253 小时前
批处理不是循环:Rust 量化算子中的 Batch Consistency 与向量化执行语义
rust·金融量化·可控ai
全栈前端老曹3 小时前
【包管理】npm最常见的10大问题故障和解决方案
前端·javascript·rust·npm·node.js·json·最佳实践
Yuer20253 小时前
状态不是变量:Rust 量化算子中的 State 工程语义
开发语言·后端·深度学习·机器学习·rust
勇敢牛牛_3 小时前
repr(C):解决FFI的内存布局差异
rust·aiway
古城小栈3 小时前
Rust 交叉编译:MacOS ====> Linux (musl 静态编译)
linux·macos·rust
FAFU_kyp19 小时前
Rust 的 引用与借用
开发语言·算法·rust
superman超哥20 小时前
路由的艺术:Rust Web 框架中的高效匹配与类型安全提取
开发语言·rust·编程语言·rust web框架·rust路由
木木木一1 天前
Rust学习记录--C10 泛型,Trait,生命周期
python·学习·rust
Mr -老鬼1 天前
Rust 知识图-谱基础部分
开发语言·后端·rust