# Reactor

## Description

> 本模块纯人工实现，AI 不要插手！

Reactor 的实现与以下项目有关：

- [alien-signals](https://github.com/stackblitz/alien-signals): Reactor 源于该项目，是在对该项目进行重构的基础上添加了其它个性化实现得到的，两者核心区别包括：1、alien-signals 的 API 更加“函数式”，而 Reactor 的 API 更加“对象式”；2、alien-signals 的源码更注重性能，因而比较晦涩，而 Reactor 的实现更注重可维护性与可扩展性因而比较易懂；3、alien-signals 的功能更单一更克制，几乎只提供了核心的响应式算法，而 Reactor 则提供了更多的相关功能与工具函数。
- [Preact signals](https://github.com/preactjs/signals)：受该项目启发，Reactor 补充了一些额外能力，包括但不限于 `options parameter`、`signal.getWithoutTrack()`（同 `signal.peek()`）、`batch()`、`withoutTracking()`（同 `untracked()`）。
- [Angular signals](https://angular.dev/guide/signals): 受该项目启发，Reactor 补充了一些额外能力，包括但不限于 `assertWithoutTracking()`（同 `assertNotInReactiveContext()`）、`options.isEqual()`（同 `options.equal()`）、`signal.setWithoutCalculate()`（同 `signal.update()`）、`derived()`（原语层面的 `linkedSignal()`）。
- [RxJS](https://github.com/ReactiveX/rxjs)：Reactor 的 operators 参考了 RxJS 的 operators 列表与功能，但两者有着本质的区别，RxJS 的 operators 负责管理值的流动与转换，而 Reactor 的 operators 只是围绕 Reactor 原语提供的一些便捷工具函数，Reactor 的核心价值在于其响应式原语，而非 operators，operators 对于 RxJS 来说不可或缺，但 operators 对于 Reactor 来说并非必需。

Reactor operators 分为以下几类：

1. utility：实用工具函数。
2. convert：类型转换相关。
3. create：创建相关。
4. join：合并相关（多个 Reactor 组合为一个 Reactor）。
5. branch：分支相关（一个 Reactor 变为多个 Reactor）。
6. map：映射相关（一个 Reactor 变换为另一个 Reactor）。
7. filter：过滤相关（一个 Reactor 变换为另一个 Reactor，本质是特殊的 map）。
