时间不是索引: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; } }

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

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

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

相关推荐
花褪残红青杏小4 小时前
Rust图像处理第13节-任意角度旋转:旋转矩阵 + 双线性插值 + 自动补白边
rust·webassembly·图形学
梦帮科技8 小时前
GRAVIS v5.5:向硬核桌面端进化与云端多节点容灾部署实践
windows·架构·rust·自动化·区块链·智能合约·数字货币
梦醒沉醉9 小时前
2、Rust程序设计语言——常见编程概念
rust
程序员爱钓鱼11 小时前
Rust 开发环境安装(Windows|macOS|Linux)
后端·rust
花褪残红青杏小21 小时前
Rust图像处理第12节-图片翻转与旋转:坐标重映射几何变换
rust·webassembly·图形学
CodeStats1 天前
【编程语言】深度梳理C/C++、Java、Python、Go、Rust的区别
java·linux·c语言·c++·python·rust·go
程序员爱钓鱼1 天前
为什么学习 Rust?Rust 能做什么?
后端·rust
米沙AI1 天前
Rust001--08字符串高级操作
rust
独孤留白1 天前
从C到Rust:容器,容器,容器,Index和Iterator这两口糖甜不甜?
rust
小杍随笔1 天前
【Rust全栈项目接入UUID主键实战:从选型到PostgreSQL适配(含v7优化)】
开发语言·postgresql·rust