75 lines
2.9 KiB
Markdown
75 lines
2.9 KiB
Markdown
---
|
|
name: optimize-target-code
|
|
description: "分析并优化用户指定的函数、类、文件或小范围功能,改善实现效率、复杂度、数值稳定性、健壮性或可读性,并进行必要验证。仅在用户显式调用 $optimize-target-code 时使用。"
|
|
---
|
|
|
|
# 优化指定代码
|
|
|
|
对用户指定的小范围代码进行针对性优化,避免扩大修改范围。
|
|
|
|
## 执行流程
|
|
|
|
1. 读取适用的 `AGENTS.md`,确认目标文件、函数或功能。
|
|
2. 读取目标代码、直接调用方、相关数据结构和测试,不扫描整个项目。
|
|
3. 明确当前接口、输入输出、副作用、边界条件和预期行为。
|
|
4. 检查:
|
|
- 不必要的循环、遍历、排序和重复计算;
|
|
- 不合适的数据结构和算法复杂度;
|
|
- 多余的对象创建、内存分配和数据复制;
|
|
- 浮点精度、除零、溢出、NaN 和边界输入;
|
|
- 过深嵌套、复杂条件和难以理解的代码结构;
|
|
- 热路径中的日志、IO、阻塞和共享状态。
|
|
5. 选择收益明确、风险最低、修改最小的方案。
|
|
6. 如果用户只要求“分析”或“检查”,给出建议但不修改代码。
|
|
7. 如果用户要求“优化”或“改进”,直接实施行为保持型优化。
|
|
8. 修改后运行最相关的测试或构建,并检查 diff。
|
|
|
|
## 修改原则
|
|
|
|
默认保持以下内容不变:
|
|
|
|
- 公共接口和函数签名;
|
|
- 输入输出含义;
|
|
- 返回值和异常行为;
|
|
- 状态修改和副作用;
|
|
- 结果顺序和确定性;
|
|
- 线程和异步语义;
|
|
- 单位、坐标系、阈值和数值容差;
|
|
- 配置和序列化兼容性。
|
|
|
|
如果优化需要更换算法,并且可能改变结果、精度或适用范围,先说明新旧方案和风险,获得用户确认后再修改。
|
|
|
|
不要:
|
|
|
|
- 顺便重构其他模块;
|
|
- 格式化整个文件或项目;
|
|
- 修改无关代码;
|
|
- 为了减少代码行数而过度抽象;
|
|
- 在没有测量时声称性能已经提升;
|
|
- 为通过测试而降低断言标准;
|
|
- 覆盖或回退用户原有改动。
|
|
|
|
## 性能验证
|
|
|
|
只有用户关注性能,或者修改明显针对性能时才进行基准测量。
|
|
|
|
优化前后使用相同输入、环境和构建模式,并重复运行。无法可靠测量时,只说明理论复杂度和预期收益,不声称实际性能提升。
|
|
|
|
## 特殊情况
|
|
|
|
对于数学、机器人、控制和实时代码,重点检查浮点误差、单位、坐标系、采样周期、角度归一化、饱和处理和实时周期,不擅自修改公式或参数。
|
|
|
|
硬件控制、部署和实机测试需要用户明确授权。
|
|
|
|
## 完成报告
|
|
|
|
简要报告:
|
|
|
|
- 优化了哪个文件或函数;
|
|
- 发现了什么问题;
|
|
- 做了什么修改;
|
|
- 复杂度或预期收益;
|
|
- 执行了哪些测试或构建;
|
|
- 哪些内容尚未验证。
|
|
|
|
如果没有值得实施的安全优化,明确说明,不要强行修改代码。 |