# reaction_cpp20 **Repository Path**: KabinHaya/reaction_cpp20 ## Basic Information - **Project Name**: reaction_cpp20 - **Description**: 使用了C++20新特性的响应式框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: cmake - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-01 - **Last Updated**: 2026-03-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 编程环境 - 编译器:支持C++20(GCC 10+) - 构建系统:CMake - 外部库:GTest - 包管理器:Conan2 ### 什么是响应式编程? 响应式编程是一种以“数据驱动”和“自动更新”为核心的编程范式。 其目标是,当底层数据发生变化时,系统能够自动刷新所有依赖于该数据的对象,从而避免繁琐的手动更新,提升系统的实时性、稳定性和维护性 ### 响应式编程的核心 - **数据流**(Data Flow) 将数据视为一系列随时间变化的流,当某个值更新时,这个值的变化将自动传播给所有依赖者 - **依赖追踪**(Dependency Tracking) 系统自动记录数据之间的依赖关系,确保任何变化都能触发对应的更新操作 - **声明式编程**(Declarative Programming) 开发者只需声明“数据之间的关系”,而不必显式编写“如何更新”的逻辑,框架会自动完成这些工作 ### 该设计理念的响应式框架能干什么? 1. 前端与用户界面开发 这是响应式编程最直观的应用场景。现代Web和移动应用实时响应用户的操作(点击、输入、滚动等),并动态更新所关联的界面 2. 实时数据流 比如游戏中的玩家装备更新导致玩家数值发生变化,使用响应式框架可以高效地建立数值之间的关系,减少开发时间 物联网设备可以订阅传感器数据(如温度、湿度等),使用响应式框架可以建立好数值给设备带来的影响 ### 为什么使用C++20? 1. 针对性能敏感型的场景,以及这种基础框架,使用模版元编程(TMP)可以大幅减少开销,而C++20对模板元编程带来了诸多颠覆性特性 2. `Concepts`与`constexpr` 强类型约束和编译期计算能力显著增强,使得类型安全与性能优化并存。 3. 模板元编程能力增强 支持更强大的编译期逻辑,能够构建“零运行时成本”的依赖追踪机制。 ### 项目分层 #### 功能层 > 做了什么功能,跑没跑起来 做了一个基于C++20的响应式编程框架,能够实现数据间的自动依赖追踪和更新传播,支持表达式相互依赖、资源管理和多种触发模式,可以实现复杂数据流场景下的高效响应式编程。 与另一种响应式框架RxCPP相比,是其速度的2倍以上 #### 系统层 > 怎么设计模块、怎么分层、怎么交互、为什么这么设计 ```plaintext ┌─────────────────────────────────────────────────────────────┐ │ 第5层 reaction.h 用户API (var/calc/expr/action) │ ├─────────────────────────────────────────────────────────────┤ │ 第4层 react.h ReactImpl + React (用户句柄) │ │ valueTpErase.h ReactBase (类型擦除基类) │ ├─────────────────────────────────────────────────────────────┤ │ 第3层 expression.h Expression (计算逻辑) │ │ triggerMode.h 触发策略 (AlwaysTrig/ChangeTrig) │ │ invalidStrategy.h 失效策略 (KeepStra/CloseStra) │ ├─────────────────────────────────────────────────────────────┤ │ 第2层 resource.h Resource (值存储) │ ├─────────────────────────────────────────────────────────────┤ │ 第1层 observerNode.h ObserverGraph + ObserverNode (图管理) │ ├─────────────────────────────────────────────────────────────┤ │ 第0层 concept.h 类型约束 │ │ utility.h NodePtr/NodeSet (基础类型) │ │ log.h 日志 │ └─────────────────────────────────────────────────────────────┘ ``` ### 结构讲法 > 为什么要做这个系统,痛点是什么?