Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit d0f1aaf

Browse files
committed
新增--cn-time命令行标识,提供程序运行时间的毫秒级测量和智能格式化功能,支持正常执行和错误情况的时间显示,增强性能分析和调试能力。
1 parent 4da738d commit d0f1aaf

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed

CN_TIME_FEATURE.md

Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
# CodeNothing --cn-time 功能实现
2+
3+
## 📋 功能概述
4+
5+
为CodeNothing添加了`--cn-time`命令行标识,用于显示程序运行时间。该功能提供精确的毫秒级时间测量,并根据时间长度自动选择合适的显示格式。
6+
7+
## 🚀 功能特性
8+
9+
### 时间测量范围
10+
- **毫秒级精度**: 使用`std::time::Instant`提供高精度时间测量
11+
- **全程覆盖**: 从文件预处理开始到程序执行完成的完整时间
12+
- **错误情况支持**: 即使解析失败也会显示解析时间
13+
14+
### 智能格式化
15+
根据执行时间长度自动选择最合适的显示格式:
16+
17+
#### 1. 毫秒格式 (< 1秒)
18+
```
19+
执行时间: 123.456 ms
20+
```
21+
22+
#### 2. 秒格式 (1秒 - 1分钟)
23+
```
24+
执行时间: 1500.500 ms [1.5 s]
25+
```
26+
27+
#### 3. 分钟格式 (≥ 1分钟)
28+
```
29+
执行时间: 125000.000 ms [2 min 5.0 s]
30+
```
31+
32+
## 🔧 技术实现
33+
34+
### 1. 时间测量逻辑
35+
```rust
36+
// 开始计时(如果启用了时间显示)
37+
let start_time = if show_time { Some(Instant::now()) } else { None };
38+
39+
// ... 程序执行 ...
40+
41+
// 显示执行时间(如果启用了时间显示)
42+
if let Some(start) = start_time {
43+
let duration = start.elapsed();
44+
let duration_ms = duration.as_secs_f64() * 1000.0;
45+
println!("执行时间: {}", format_execution_time(duration_ms));
46+
}
47+
```
48+
49+
### 2. 格式化函数
50+
```rust
51+
fn format_execution_time(duration_ms: f64) -> String {
52+
if duration_ms < 1000.0 {
53+
// 毫秒格式
54+
format!("{:.3} ms", duration_ms)
55+
} else if duration_ms < 60000.0 {
56+
// 秒格式
57+
let seconds = duration_ms / 1000.0;
58+
format!("{:.3} ms [{:.1} s]", duration_ms, seconds)
59+
} else {
60+
// 分钟格式
61+
let total_seconds = duration_ms / 1000.0;
62+
let minutes = (total_seconds / 60.0).floor();
63+
let seconds = total_seconds % 60.0;
64+
format!("{:.3} ms [{:.0} min {:.1} s]", duration_ms, minutes, seconds)
65+
}
66+
}
67+
```
68+
69+
### 3. 参数解析
70+
```rust
71+
let show_time = args.iter().any(|arg| arg == "--cn-time");
72+
```
73+
74+
## 📝 使用示例
75+
76+
### 基本用法
77+
```bash
78+
# 显示执行时间
79+
cargo run -- examples/simple_test.cn --cn-time
80+
81+
# 输出示例:
82+
# === 程序输出 ===
83+
# Hello, World!
84+
# 执行时间: 15.234 ms
85+
```
86+
87+
### 组合使用
88+
```bash
89+
# 同时显示返回值和执行时间
90+
cargo run -- examples/test.cn --cn-return --cn-time
91+
92+
# 输出示例:
93+
# === 程序输出 ===
94+
# 程序执行结果: 42
95+
# 执行时间: 8.567 ms
96+
```
97+
98+
### 解析错误情况
99+
```bash
100+
# 解析失败时也显示时间
101+
cargo run -- examples/syntax_error.cn --cn-time
102+
103+
# 输出示例:
104+
# 发现 1 个解析错误:
105+
# 错误 1: 期望 ';', 但得到了 '.'
106+
#
107+
# 可以使用 --cn-parser 选项查看更详细的解析信息。
108+
# 由于存在解析错误,程序无法执行。
109+
# 解析时间: 6.123 ms
110+
```
111+
112+
## 🎯 应用场景
113+
114+
### 1. 性能分析
115+
- 测量程序执行效率
116+
- 比较不同实现的性能
117+
- 识别性能瓶颈
118+
119+
### 2. 开发调试
120+
- 验证优化效果
121+
- 监控编译时间变化
122+
- 分析复杂程序的执行时间
123+
124+
### 3. 基准测试
125+
- 建立性能基线
126+
- 回归测试中的性能验证
127+
- 不同版本间的性能对比
128+
129+
## 📊 测试结果
130+
131+
### 格式化测试
132+
```
133+
时间格式化测试:
134+
5.123 ms -> 5.123 ms
135+
123.456 ms -> 123.456 ms
136+
999.999 ms -> 999.999 ms
137+
1000.0 ms -> 1000.000 ms [1.0 s]
138+
1500.5 ms -> 1500.500 ms [1.5 s]
139+
30000.0 ms -> 30000.000 ms [30.0 s]
140+
59999.9 ms -> 59999.900 ms [60.0 s]
141+
60000.0 ms -> 60000.000 ms [1 min 0.0 s]
142+
90000.0 ms -> 90000.000 ms [1 min 30.0 s]
143+
125000.0 ms -> 125000.000 ms [2 min 5.0 s]
144+
3600000.0 ms -> 3600000.000 ms [60 min 0.0 s]
145+
```
146+
147+
### 实际运行测试
148+
```bash
149+
# 简单程序
150+
cargo run -- examples/simple_enhanced_pointer_test.cn --cn-time
151+
# 输出: 执行时间: 32.782 ms
152+
153+
# 复杂程序
154+
cargo run -- examples/pointer_test.cn --cn-time
155+
# 输出: 执行时间: 31.362 ms
156+
157+
# 解析错误
158+
cargo run -- examples/advanced_pointer_syntax_test.cn --cn-time
159+
# 输出: 解析时间: 6.611 ms
160+
```
161+
162+
## 🔄 兼容性
163+
164+
### 向后兼容
165+
- ✅ 不影响现有功能
166+
- ✅ 可选功能,默认不启用
167+
- ✅ 与其他参数完全兼容
168+
169+
### 参数组合
170+
-`--cn-time` + `--cn-return`: 显示返回值和时间
171+
-`--cn-time` + `--cn-parser`: 显示解析信息和时间
172+
-`--cn-time` + `--cn-debug`: 显示调试信息和时间
173+
- ✅ 支持所有现有参数的任意组合
174+
175+
## 🎉 总结
176+
177+
`--cn-time`功能为CodeNothing提供了专业级的时间测量能力,具有以下优势:
178+
179+
1. **精确测量**: 毫秒级精度,覆盖完整执行周期
180+
2. **智能显示**: 根据时间长度自动选择最佳格式
181+
3. **全面支持**: 正常执行和错误情况都支持
182+
4. **易于使用**: 简单的命令行参数,即开即用
183+
5. **完全兼容**: 与现有功能无缝集成
184+
185+
这个功能对于性能分析、开发调试和基准测试都非常有用,是CodeNothing工具链的重要补充。

0 commit comments

Comments
 (0)