|
1 | | -# 贡献指南 |
2 | | - |
3 | | -感谢你对《现代嵌入式 C++ 教程》的关注!我们欢迎任何形式的贡献,包括但不限于:修正错别字、改进代码示例、完善现有内容、添加新章节等。 |
4 | | - |
5 | | -## 快速开始 |
6 | | - |
7 | | -1. Fork 本仓库 |
8 | | -2. 创建你的特性分支 (`git checkout -b feature/amazing-feature`) |
9 | | -3. 提交更改 (`git commit -m '添加某功能'`) |
10 | | -4. 推送到分支 (`git push origin feature/amazing-feature`) |
11 | | -5. 创建 Pull Request |
12 | | - |
13 | | -## 文章规范 |
14 | | - |
15 | | -### 文章结构 |
16 | | - |
17 | | -每篇文章应遵循以下结构(详见 `.templates/article-template.md`): |
18 | | - |
19 | | -```markdown |
20 | | ---- |
21 | | -# [FRONTMATTER 元数据] |
22 | | ---- |
23 | | - |
24 | | -# 标题 |
25 | | - |
26 | | -## 引言 |
27 | | -## 核心概念 |
28 | | -## 代码示例 |
29 | | -## 实战应用 |
30 | | -## 注意事项 |
31 | | -## 小结 |
32 | | -## 练习(可选) |
33 | | -## 参考资源 |
34 | | -``` |
35 | | - |
36 | | -### Frontmatter 元数据 |
37 | | - |
38 | | -每篇文章必须包含以下元数据: |
39 | | - |
40 | | -| 字段 | 必填 | 说明 | |
41 | | -|------|------|------| |
42 | | -| `title` | 是 | 文章标题 | |
43 | | -| `description` | 是 | 一句话描述文章内容 | |
44 | | -| `chapter` | 是 | 所属章节 (0-10) | |
45 | | -| `order` | 是 | 在章节中的顺序 | |
46 | | -| `tags` | 是 | 标签列表 | |
47 | | -| `difficulty` | 否 | 难度:beginner/intermediate/advanced | |
48 | | -| `reading_time_minutes` | 否 | 预计阅读时间(分钟) | |
49 | | -| `prerequisites` | 否 | 前置知识 | |
50 | | -| `related` | 否 | 相关文章 | |
51 | | -| `cpp_standard` | 否 | 涉及的 C++ 标准 | |
52 | | - |
53 | | -### 标签规范 |
54 | | - |
55 | | -使用以下标签分类: |
56 | | - |
57 | | -**概念类**: |
58 | | -- `RAII`、`移动语义`、`零开销抽象`、`编译期计算`、`类型安全` |
59 | | - |
60 | | -**语言特性**: |
61 | | -- `constexpr`、`lambda`、`CRTP`、`concepts`、`coroutine` |
62 | | - |
63 | | -**模式**: |
64 | | -- `对象池`、`状态机`、`工厂模式`、`策略模式` |
65 | | - |
66 | | -**容器**: |
67 | | -- `array`、`span`、`vector`、`map` |
68 | | - |
69 | | -**智能指针**: |
70 | | -- `unique_ptr`、`shared_ptr`、`weak_ptr`、`intrusive_ptr` |
71 | | - |
72 | | -### 写作风格 |
73 | | - |
74 | | -1. **语言**:使用清晰、简洁的中文 |
75 | | -2. **术语**:首次出现的技术术语应附英文原文 |
76 | | -3. **代码注释**:使用中文注释 |
77 | | -4. **标题层级**:不超过 4 级(`####`) |
78 | | -5. **篇幅**:每篇文章控制在 1500-3000 字 |
79 | | - |
80 | | -## 代码规范 |
81 | | - |
82 | | -### C++ 代码风格 |
83 | | - |
84 | | -1. 使用现代 C++ 风格(C++11 及以上) |
85 | | -2. 优先使用 `auto`、范围 for 循环等现代特性 |
86 | | -3. 遵循嵌入式最佳实践: |
87 | | - - 避免动态内存分配(除非明确说明) |
88 | | - - 注意代码体积和性能影响 |
89 | | - - 标注适用的 C++ 标准 |
90 | | - |
91 | | -```cpp |
92 | | -// 好的示例 |
93 | | -// Platform: STM32F4 |
94 | | -// Standard: C++17 |
95 | | - |
96 | | -#include <array> |
97 | | - |
98 | | -void process_data(const std::array<uint32_t, 10>& data) { |
99 | | - for (const auto& value : data) { |
100 | | - // 处理数据 |
101 | | - } |
102 | | -} |
103 | | -``` |
104 | | -
|
105 | | -### 代码格式 |
106 | | -
|
107 | | -- 使用 4 空格缩进 |
108 | | -- 大括号另起一行(Allman 风格) |
109 | | -- 函数名使用 snake_case |
110 | | -- 类名使用 PascalCase |
111 | | -
|
112 | | -## 添加新文章 |
113 | | -
|
114 | | -1. 复制 `.templates/article-template.md` 作为起点 |
115 | | -2. 填写完整的 frontmatter |
116 | | -3. 更新对应章节的 `index.md`,添加新文章链接 |
117 | | -4. 确保代码示例可编译 |
118 | | -
|
119 | | -## 文件命名 |
120 | | -
|
121 | | -文章文件名应清晰描述内容: |
122 | | -
|
123 | | -``` |
124 | | -documents/core-embedded-cpp/chapter-06-ownership-raii/ |
125 | | -├── 1 RAII在外设管理的作用.md |
126 | | -├── 2 unique_ptr.md |
127 | | -└── 3 shared_ptr.md |
128 | | -``` |
129 | | -
|
130 | | -## 发布前检查清单 |
131 | | -
|
132 | | -提交 PR 前,请确认: |
133 | | -
|
134 | | -- [ ] Frontmatter 元数据完整 |
135 | | -- [ ] 代码示例可编译 |
136 | | -- [ ] 无错别字 |
137 | | -- [ ] 内部链接有效 |
138 | | -- [ ] 标签使用规范 |
139 | | -- [ ] 遵循文章模板结构 |
140 | | -- [ ] 更新了章节索引(如适用) |
141 | | -
|
142 | | -## 本地预览 |
143 | | -
|
144 | | -在提交前,建议本地预览文档: |
145 | | -
|
146 | | -```bash |
147 | | -# 安装依赖 |
148 | | -pip install mkdocs-material mkdocs-awesome-pages-plugin mkdocs-git-revision-date-localized-plugin |
149 | | -
|
150 | | -# 启动本地服务器 |
151 | | -mkdocs serve |
152 | | -
|
153 | | -# 访问 http://127.0.0.1:8000 |
154 | | -``` |
155 | | - |
156 | | -## 代码审查流程 |
157 | | - |
158 | | -1. 所有 PR 需要至少一位维护者审核 |
159 | | -2. CI 检查必须通过(markdown lint、链接检查) |
160 | | -3. 审核通过后,维护者将合并代码 |
161 | | - |
162 | | -## 行为准则 |
163 | | - |
164 | | -- 尊重所有贡献者 |
165 | | -- 建设性的反馈和讨论 |
166 | | -- 专注于对项目最有利的事情 |
167 | | - |
168 | | -## 获取帮助 |
169 | | - |
170 | | -如有问题,请: |
171 | | -- 提交 Issue |
172 | | -- 查看 [GitHub Discussions](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP/discussions) |
173 | | -- 发送邮件至:725610365@qq.com |
174 | | - |
175 | | ---- |
176 | | - |
177 | | -再次感谢你的贡献! |
| 1 | +# 贡献指南 |
| 2 | + |
| 3 | +感谢你对现代 C++ 教程的关注!我们欢迎任何形式的贡献,包括但不限于:修正错别字、改进代码示例、完善现有内容、添加新章节等。 |
| 4 | + |
| 5 | +## 快速开始 |
| 6 | + |
| 7 | +1. Fork 本仓库 |
| 8 | +2. 创建你的特性分支 (`git switch -c feature/amazing-feature`) |
| 9 | +3. 提交更改 (`git commit -m '添加某功能'`) |
| 10 | +4. 推送到分支 (`git push origin feature/amazing-feature`) |
| 11 | +5. 创建 Pull Request |
| 12 | + |
| 13 | +## 文章规范 |
| 14 | + |
| 15 | +### 文章结构 |
| 16 | + |
| 17 | +每篇文章应遵循以下结构: |
| 18 | + |
| 19 | +```markdown |
| 20 | +--- |
| 21 | +# [FRONTMATTER 元数据] |
| 22 | +--- |
| 23 | + |
| 24 | +# 标题 |
| 25 | + |
| 26 | +## 引言 / 动机 |
| 27 | +## 核心概念 |
| 28 | +## 代码示例 |
| 29 | +## 实战应用 |
| 30 | +## 注意事项 |
| 31 | +## 小结 |
| 32 | +## 练习(可选) |
| 33 | +## 参考资源 |
| 34 | +``` |
| 35 | + |
| 36 | +### Frontmatter 元数据 |
| 37 | + |
| 38 | +每篇文章必须包含以下元数据: |
| 39 | + |
| 40 | +| 字段 | 必填 | 说明 | |
| 41 | +|------|------|------| |
| 42 | +| `title` | 是 | 文章标题 | |
| 43 | +| `description` | 是 | 一句话描述文章内容 | |
| 44 | +| `chapter` | 是 | 所属章节 | |
| 45 | +| `order` | 是 | 在章节中的顺序 | |
| 46 | +| `tags` | 是 | 标签列表 | |
| 47 | +| `difficulty` | 否 | 难度:beginner / intermediate / advanced | |
| 48 | +| `reading_time_minutes` | 否 | 预计阅读时间(分钟) | |
| 49 | +| `prerequisites` | 否 | 前置知识 | |
| 50 | +| `related` | 否 | 相关文章 | |
| 51 | +| `cpp_standard` | 否 | 涉及的 C++ 标准(如 [11, 14, 17, 20]) | |
| 52 | + |
| 53 | +### 目录组织 |
| 54 | + |
| 55 | +文章按卷-章组织,放入对应卷目录: |
| 56 | + |
| 57 | +``` |
| 58 | +documents/vol2-modern-features/ # 卷二目录 |
| 59 | +├── index.md # 卷首页 |
| 60 | +├── ch01-smart-pointers/ # 章节(可选子目录) |
| 61 | +│ ├── 01-raii-deep-dive.md |
| 62 | +│ ├── 02-unique-ptr.md |
| 63 | +│ └── 03-shared-ptr.md |
| 64 | +└── cpp17-string-view.md # 也可直接放在卷目录下 |
| 65 | +``` |
| 66 | + |
| 67 | +### 写作风格 |
| 68 | + |
| 69 | +1. **语言**:使用清晰、简洁的中文 |
| 70 | +2. **术语**:首次出现的技术术语应附英文原文 |
| 71 | +3. **代码注释**:使用中文注释 |
| 72 | +4. **标题层级**:不超过 4 级(`####`) |
| 73 | +5. **篇幅**:每篇文章控制在 1500-3000 字 |
| 74 | + |
| 75 | +详细写作风格请参考 `.claude/writting_style.md`。 |
| 76 | + |
| 77 | +## 代码规范 |
| 78 | + |
| 79 | +### C++ 代码风格 |
| 80 | + |
| 81 | +1. 使用现代 C++ 风格(C++11 及以上) |
| 82 | +2. 优先使用 `auto`、范围 for 循环等现代特性 |
| 83 | +3. 标注适用的 C++ 标准 |
| 84 | +4. 代码示例使用 CMake 构建,确保可独立编译 |
| 85 | + |
| 86 | +```cpp |
| 87 | +// Standard: C++17 |
| 88 | + |
| 89 | +#include <array> |
| 90 | +#include <span> |
| 91 | + |
| 92 | +void process_data(std::span<const uint32_t> data) { |
| 93 | + for (const auto& value : data) { |
| 94 | + // 处理数据 |
| 95 | + } |
| 96 | +} |
| 97 | +``` |
| 98 | +
|
| 99 | +### 代码格式 |
| 100 | +
|
| 101 | +- 使用 4 空格缩进 |
| 102 | +- 大括号另起一行(Allman 风格) |
| 103 | +- 函数名使用 snake_case |
| 104 | +- 类名使用 PascalCase |
| 105 | +
|
| 106 | +## 添加新文章 |
| 107 | +
|
| 108 | +1. 确定文章所属的卷和章节,放入对应目录 |
| 109 | +2. 填写完整的 frontmatter |
| 110 | +3. 更新对应卷的 `index.md`,添加新文章链接 |
| 111 | +4. 确保代码示例可编译 |
| 112 | +5. 本地预览确认渲染正确 |
| 113 | +
|
| 114 | +## 发布前检查清单 |
| 115 | +
|
| 116 | +提交 PR 前,请确认: |
| 117 | +
|
| 118 | +- [ ] Frontmatter 元数据完整 |
| 119 | +- [ ] 代码示例可编译 |
| 120 | +- [ ] 无错别字 |
| 121 | +- [ ] 内部链接有效 |
| 122 | +- [ ] 标签使用规范 |
| 123 | +- [ ] 遵循文章模板结构 |
| 124 | +- [ ] 更新了卷首页索引(如适用) |
| 125 | +
|
| 126 | +## 本地预览 |
| 127 | +
|
| 128 | +在提交前,建议本地预览文档: |
| 129 | +
|
| 130 | +```bash |
| 131 | +# 安装依赖 |
| 132 | +pip install -r scripts/requirements.txt |
| 133 | +
|
| 134 | +# 启动本地服务器 |
| 135 | +mkdocs serve |
| 136 | +
|
| 137 | +# 访问 http://127.0.0.1:8000 |
| 138 | +``` |
| 139 | + |
| 140 | +## 代码审查流程 |
| 141 | + |
| 142 | +1. 所有 PR 需要至少一位维护者审核 |
| 143 | +2. CI 检查必须通过(markdown lint、链接检查) |
| 144 | +3. 审核通过后,维护者将合并代码 |
| 145 | + |
| 146 | +## 行为准则 |
| 147 | + |
| 148 | +- 尊重所有贡献者 |
| 149 | +- 建设性的反馈和讨论 |
| 150 | +- 专注于对项目最有利的事情 |
| 151 | + |
| 152 | +## 获取帮助 |
| 153 | + |
| 154 | +如有问题,请: |
| 155 | + |
| 156 | +- 提交 [GitHub Issue](https://github.com/Awesome-Embedded-Learning-Studio/Tutorial_AwesomeModernCPP/issues) |
| 157 | +- 发送邮件至:725610365@qq.com |
| 158 | + |
| 159 | +--- |
| 160 | + |
| 161 | +再次感谢你的贡献! |
0 commit comments