memscope-rs 0.2.1

A memory tracking library for Rust applications.
Documentation
# Memscope-rs 已知局限

> 本文档诚实记录 memscope-rs 的技术局限和设计取舍。
> 
> 作为独立开发者,我必须在"全部数据"和"真实性"之间做出取舍。

---

## 核心局限

### 1. 无法真实采集的数据

Rust 运行时没有提供所有必要的 hook,以下数据**无法在运行时自动采集**:

| 数据 | 原因 | 当前处理 |
|------|------|---------|
| **借用信息** (`borrow_info`) | Rust 没有 `&T`/`&mut T` 创建时的 hook | 推测引擎 |
| **智能指针信息** (`smart_pointer_info`) | 需要 `Rc::clone`/`Arc::clone` 插桩 | 推测引擎 |
| **内存布局** (`memory_layout`) | 需要编译时类型信息 | 推测引擎 |
| **泛型信息** (`generic_info`) | 类型擦除,运行时不可见 | 推测引擎 |

### 2. 推测引擎的局限

对于无法真实采集的数据,我们使用推测引擎进行估算。**但请注意**:

- ⚠️ **推测结果可能是错的**
- ⚠️ **依赖启发式规则,可能不适用于所有场景**
- ⚠️ **无法验证正确性**

**推测数据会在输出中明确标注**,例如:
```json
{
  "borrow_info": {
    "immutable_borrows": 5,
    "_source": "inferred",  // 标注为推测
    "_confidence": "low"    // 置信度
  }
}
```

### 3. 多线程/异步追踪的局限

| 场景 | 局限 |
|------|------|
| **跨线程移动** | 变量移动后难以追踪原始来源 |
| **异步任务** | task_id 在不同 runtime 行为不同 |
| **Arc 共享** | 难以确定"真正"的拥有者 |

---

## 设计取舍

### 取舍 1:真实性 vs 完整性

- **选择**:优先保证真实数据的正确性
- **代价**:部分数据需要推测
- **原因**:错误的真实数据比没有数据更糟糕

### 取舍 2:性能 vs 功能

- **选择**:保持低开销(< 5%)
- **代价**:无法实现某些高开销功能
- **原因**:内存分析器不能成为性能瓶颈

### 取舍 3:通用性 vs 精确性

- **选择**:支持多种场景(单线程、多线程、异步)
- **代价**:某些场景下精确度降低
- **原因**:实用性优先

---

## 未来方向

### 短期(可行)

- [ ] 改进推测引擎的准确度
- [ ] 提供手动插桩 API
- [ ] 优化性能

### 中期(需要研究)

- [ ] 探索 IR 插桩方案(需要 Nightly Rust)
- [ ] 与 Tokio/async-std 深度集成
- [ ] 支持 eBPF 追踪

### 长期(需要编译器支持)

- [ ] Rust 编译器插件支持
- [ ] 官方内存追踪 API

---

## 贡献

如果你有解决这些局限的想法,欢迎:

1. 提 Issue 讨论
2. 提 PR 贡献代码
3. 分享你的使用场景

---

## 致谢

感谢所有理解并接受这些局限的用户。

> "正视缺陷,诚实面对,这才是真正的工程师精神。"

---

**最后更新**: 2026-04-12
**项目状态**: 研究型项目,持续更新