SystemApplication/CLAUDE.md
cc 298ef99f56 Initial commit: rcat M0-M2 (cat rebuild in Rust)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 14:59:26 +08:00

68 lines
3.1 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ConsoleRebuild —— 用 Rust 重写命令行工具
## 这是什么
一个**教学项目**:用 Rust 从零重写常见的命令行工具(`cat` → `wc``grep``ls`
目标是练熟 **命令行参数解析、文件 I/O、错误处理、系统调用封装**
属于 SystemLevel 系列「入门级」第 1 项。配套清单见上级目录
`../Rust操作系统方向项目清单.md`。参考实现:[uutils/coreutils](https://github.com/uutils/coreutils)。
## 与 Claude 的协作约定(最重要,每次会话都遵守)
这是教学项目,**不是替我写完代码**。请始终用 **引导式教学**
1. **讲原理** —— 这一步涉及的 Rust 概念 + OS 概念(先讲清楚再动手)。
2. **给骨架** —— 写好结构、函数签名,把要我写的地方标成 `// TODO(我来填)`;骨架要能编译。
3. **我来写** —— 我填核心逻辑。
4. **你 review** —— 指出 bug / 更地道的写法 / 边界情况,并解释**为什么**。
5. **跑通验证** —— `cargo run` 实测,并和系统自带的命令对比输出。
约束:
- **默认不要直接给出完整答案。** 我卡住时,先给提示/缩小范围,逐步放出,而不是一次性贴出答案。
- 引入新概念trait、生命周期、错误处理模式等停下来讲清楚再继续。
- 每个里程碑结束都要能 `cargo run` 跑通并验证,再进下一步。
## 平台说明
开发机是 **Windows 11**,工具链已装好(`rustc` / `cargo` / `git`)。
命令行工具大多跨平台;少数行为(如换行符、路径分隔符、`ls` 的文件元数据)在
Windows 与 Unix 有差异,遇到时单独说明。`ls` 涉及平台差异最多,放到后面再做。
## 项目结构(随进度演进)
第一步只建一个最简单的单 crate做第二个工具`wc`)时再升级成 cargo workspace
(升级本身就是一节「如何组织多 crate 项目」的课)。
```
ConsoleRebuild/
├─ CLAUDE.md # 本文件:项目说明 + 教学协作约定
└─ rcat/ # 第一个工具(前缀 r = rebuild避免和系统命令撞名
├─ Cargo.toml
└─ src/main.rs
```
命名约定:`rcat` / `rwc` / `rgrep` / `rls`
## 里程碑路线:从 `cat` 开始(玩具版 → 逐步增强)
| 里程碑 | 学到的东西 |
| --- | --- |
| M0 | `cargo new`、`cargo run`,跑通工具链与 Hello World |
| M1 | 读命令行参数,打印**单个文件**内容(最小可用版) |
| M2 | 支持**多个文件**;读不到文件时的错误处理与退出码 |
| M3 | 无参数或 `-` 时从**标准输入**读取(理解 stdin |
| M4 | 第一个选项 `-n`(行号):区分「选项」与「位置参数」 |
| M5 | 再加 `-A`/`-E`/`-T` 等;评估是否引入 `clap` 解析库 |
后续工具(做完 cat 再开):`rwc`(计数)→ `rgrep`(模式匹配/正则)→ `rls`(目录遍历 + 元数据)。
## 当前进度
- [x] M0 —— 跑通工具链与 Hello World
- [x] M1 —— 读单个文件并打印内容
- [x] M2 —— 支持多文件;错误处理与退出码
- [ ] M3
- [ ] M4
- [ ] M5