rustfs-erasure-codec 7.0.0

Rust implementation of Reed-Solomon erasure coding
Documentation
# 子任务 00:平台与 ISA 拆分、行为冻结、风险隔离

## 实施状态

已完成。

实际提交:

1. `527a24e` `refactor(galois_8): isolate scalar baseline from simd backends`

实际落地结果:

1. `scalar` 基线已独立到 `src/galois_8/scalar.rs`
2. `mod.rs` 已收口为公共 API 与组装层
3. `aarch64 / x86 / legacy` 目录拆分已在代码中生效

## 1. 子任务目标

在不改变外部行为与性能承诺的前提下,将当前混合在 `galois_8` 大文件中的 `scalar`、`x86_64`、`aarch64`、`simd_c` 逻辑拆分到独立模块,为后续 `x86_64` SIMD 深化优化提供稳定基础。

## 2. 为什么先做这个子任务

如果不先拆分平台和 ISA,后续新增 `SSSE3 / AVX512 / GFNI` 时会同时放大以下风险:

1. `aarch64``x86_64` 分支条件越来越复杂。
2. selector 与实现绑定越来越深。
3. review 很难判断某个改动只影响哪一类机器。
4. 测试失败时不容易快速定位是平台拆分问题还是算法问题。

## 3. 本阶段范围

本阶段只做以下事情:

1. 代码目录拆分。
2. 模块边界定义。
3. 保持原函数签名与对外 API 不变。
4. 保持 runtime dispatch 表面行为不变。

本阶段不做以下事情:

1. 不新增 `SSSE3 / AVX512 / GFNI` 算法实现。
2. 不调整 backend 优先级。
3. 不大改 `build.rs` 策略。
4. 不引入新的 benchmark 结论。

## 4. 目标结构

建议落地结构:

```text
src/galois_8/
  mod.rs
  backend.rs
  scalar.rs
  legacy/mod.rs
  legacy/simd_c.rs
  x86/mod.rs
  x86/avx2.rs
  aarch64/mod.rs
  aarch64/neon.rs
```

## 5. 实施步骤

### 步骤 1:创建目录与模块骨架

1. 将现有 [src/galois_8.rs]/data/rustfs/reed-solomon-erasure/src/galois_8.rs:1 重构为目录模块。
2. 把表、公共类型、公共 API 挪入 `src/galois_8/mod.rs`3. 将纯 Rust 标量逻辑移动到 `scalar.rs`
### 步骤 2:拆分 `aarch64`

1. 将现有 NEON 代码完整迁入 `aarch64/neon.rs`2. 只保留必要的 `pub(crate)` 暴露。
3. 确保 `aarch64` 文件内不包含任何 `x86_64` intrinsic import。

### 步骤 3:拆分 `x86_64`

1. 将现有 AVX2 代码迁入 `x86/avx2.rs`2. 迁移时不做算法改写,保持逻辑等价。
3. 文件中仅允许 `x86_64` 条件编译与相关 intrinsic。

### 步骤 4:拆分 `simd_c`

1. 将 FFI 声明与包装迁入 `legacy/simd_c.rs`2. 保持 `mul_slice` / `mul_slice_xor` 接口不变。
3. 迁移尾部 fallback 逻辑时,不改变标量回退行为。

### 步骤 5:保持 selector 可编译

1. `backend.rs` 暂时仍可沿用当前简单逻辑。
2. 只把函数引用改向新模块。
3. 本阶段不调整选路优先级。

## 6. 关键检查点

### 检查点 A:公共 API 不变

必须保持以下接口签名不变:

1. `pub fn mul_slice(...)`
2. `pub fn mul_slice_xor(...)`
3. `pub fn active_backend_name()`
4. `pub fn active_backend_kind()`

### 检查点 B:条件编译边界清晰

要求:

1. `aarch64` 文件不出现 `x86_64` intrinsic。
2. `x86_64` 文件不出现 `aarch64` intrinsic。
3. `legacy/simd_c.rs` 中 FFI 与 ISA 逻辑隔离。

### 检查点 C:行为冻结

要求:

1. 原有测试仍应通过。
2. `active_backend_name()` 在当前平台上的结果不应因拆分而意外变化。

## 7. 测试要求

至少执行:

1. `cargo test`
2. `cargo test --features simd-accel`
3. `cargo test active_backend`
4. `cargo test mul_slice`

若环境依赖受限,至少记录未执行原因与待补验证项。

## 8. 完成定义

满足以下条件视为完成:

1. 模块结构拆分完成。
2. 对外 API 不变。
3. 当前可用测试通过。
4. 无新增功能,仅重构与平台隔离。

## 9. 推荐 commit

```text
refactor(galois_8): split simd code by platform and implementation kind
```

## 10. 风险与回退

风险:

1. 模块可见性调整导致编译失败。
2. 搬运过程中遗漏 `cfg` 条件。
3. 测试引用路径失效。

回退策略:

1. 仅在本阶段完成全部编译和核心测试后再 commit。
2. 若失败,优先恢复到“拆文件但不重命名过多符号”的中间状态,不进入下一阶段。