Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ cargo xtask learn learning-lm-rs --submodule https://github.com/LearningInfiniTe
# 配置 rustlings 课程
cargo xtask learn rustlings --submodule https://github.com/rust-lang/rustlings.git

# 配置 learning-cxx 课程
cargo xtask learn learning-cxx --submodule

# 评测 learning-lm-rs 课程
Expand Down
170 changes: 157 additions & 13 deletions eval_result.json
Original file line number Diff line number Diff line change
@@ -1,34 +1,178 @@
{
"exercises": [
{
"name": "f16_overflow.rs",
"result": false
"name": "exercise00",
"result": true
},
{
"name": "exercise01",
"result": true
},
{
"name": "exercise02",
"result": true
},
{
"name": "exercise03",
"result": true
},
{
"name": "exercise04",
"result": true
},
{
"name": "exercise05",
"result": true
},
{
"name": "exercise06",
"result": true
},
{
"name": "exercise07",
"result": true
},
{
"name": "exercise08",
"result": true
},
{
"name": "exercise09",
"result": true
},
{
"name": "f16_basics.rs",
"result": false
"name": "exercise10",
"result": true
},
{
"name": "exercise11",
"result": true
},
{
"name": "exercise12",
"result": true
},
{
"name": "exercise13",
"result": true
},
{
"name": "exercise14",
"result": true
},
{
"name": "exercise15",
"result": true
},
{
"name": "exercise16",
"result": true
},
{
"name": "exercise17",
"result": true
},
{
"name": "exercise18",
"result": true
},
{
"name": "exercise19",
"result": true
},
{
"name": "attention_score.rs",
"name": "exercise20",
"result": true
},
{
"name": "gradient_compute.rs",
"name": "exercise21",
"result": true
},
{
"name": "layer_norm.rs",
"result": false
"name": "exercise22",
"result": true
},
{
"name": "exercise23",
"result": true
},
{
"name": "exercise24",
"result": true
},
{
"name": "exercise25",
"result": true
},
{
"name": "exercise26",
"result": true
},
{
"name": "exercise27",
"result": true
},
{
"name": "exercise28",
"result": true
},
{
"name": "exercise29",
"result": true
},
{
"name": "exercise30",
"result": true
},
{
"name": "exercise31",
"result": true
},
{
"name": "exercise32",
"result": true
},
{
"name": "exercise33",
"result": true
},
{
"name": "exercise34",
"result": true
},
{
"name": "exercise35",
"result": true
},
{
"name": "exercise36",
"result": true
},
{
"name": "exercise37",
"result": true
},
{
"name": "exercise38",
"result": true
},
{
"name": "exercise39",
"result": true
},
{
"name": "exercise40",
"result": true
},
{
"name": "multi_head_attention.rs",
"name": "exercise41",
"result": true
}
],
"statistics": {
"total_exercations": 6,
"total_succeeds": 3,
"total_failures": 3,
"total_time": 2
"total_exercations": 42,
"total_succeeds": 42,
"total_failures": 0,
"total_time": 17
}
}
2 changes: 1 addition & 1 deletion exercises/learning-cxx
Submodule learning-cxx updated 43 files
+1 −1 exercises/00_hello_world/main.cpp
+1 −0 exercises/01_variable&add/main.cpp
+2 −0 exercises/02_function/main.cpp
+4 −4 exercises/03_argument&parameter/main.cpp
+5 −5 exercises/04_static/main.cpp
+1 −1 exercises/05_constexpr/main.cpp
+2 −2 exercises/06_array/main.cpp
+4 −1 exercises/07_loop/main.cpp
+5 −0 exercises/08_pointer/main.cpp
+1 −0 exercises/09_enum&union/main.cpp
+5 −2 exercises/10_trivial/main.cpp
+4 −1 exercises/11_method/main.cpp
+2 −1 exercises/12_method_const/main.cpp
+2 −2 exercises/13_class/main.cpp
+12 −3 exercises/14_class_destruct/main.cpp
+18 −4 exercises/15_class_clone/main.cpp
+26 −5 exercises/16_class_move/main.cpp
+3 −3 exercises/17_class_derive/main.cpp
+22 −20 exercises/18_class_virtual/main.cpp
+19 −13 exercises/19_class_virtual_destruct/main.cpp
+3 −2 exercises/20_function_template/main.cpp
+7 −1 exercises/21_runtime_datatype/main.cpp
+39 −0 exercises/22_class_template/main.cpp
+5 −0 exercises/23_template_const/main.cpp
+8 −8 exercises/24_std_array/main.cpp
+33 −33 exercises/25_std_vector/main.cpp
+8 −8 exercises/26_std_vector_bool/main.cpp
+6 −0 exercises/27_strides/main.cpp
+3 −3 exercises/28_std_string/main.cpp
+2 −0 exercises/29_std_map/main.cpp
+35 −7 exercises/30_std_unique_ptr/main.cpp
+14 −10 exercises/31_std_shared_ptr/main.cpp
+3 −0 exercises/32_std_transform/main.cpp
+1 −0 exercises/33_std_accumulate/main.cpp
+85 −0 exercises/34_lambda/main.cpp
+64 −0 exercises/35_optional/main.cpp
+52 −0 exercises/36_variant/main.cpp
+65 −0 exercises/37_std_deque/main.cpp
+80 −0 exercises/38_std_forward_list/main.cpp
+47 −0 exercises/39_std_fs/main.cpp
+102 −0 exercises/40_std_thread/main.cpp
+109 −0 exercises/41_std_mutex/main.cpp
+32 −0 exercises/xmake.lua
76 changes: 76 additions & 0 deletions report/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>训练营项目报告</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<nav>
<div class="logo">训练营项目</div>
<ul>
<li><a href="#usage">使用说明</a></li>
<li><a href="#extension">扩展指南</a></li>
<li><a href="#features">技术特点</a></li>
</ul>
</nav>
<header>
<h1>训练营项目产品手册</h1>
<p>一个用于管理和评测编程练习的基于Rust的工具</p>
</header>
<main>
<section id="usage">
<h2><span class="icon">🚀</span> 产品使用说明</h2>
<p>本工具提供了一套命令行接口,用于管理和评测不同课程的练习。</p>
<h3>配置新课程</h3>
<p>使用 <code>learn</code> 命令来克隆和配置一个新的课程仓库作为 git submodule。</p>
<pre><code>cargo xtask learn --course &lt;课程名称&gt; --submodule &lt;课程仓库Git地址&gt;</code></pre>
<p>例如,要配置一个名为 `my-rust-course` 的课程,可以运行:</p>
<pre><code>cargo xtask learn --course my-rust-course --submodule https://github.com/user/my-rust-course.git</code></pre>

<h3>评测练习</h3>
<p>使用 <code>eval</code> 命令来评测练习。可以评测所有课程,也可以指定单个课程。</p>
<p>评测所有课程:</p>
<pre><code>cargo xtask eval</code></pre>
<p>评测指定课程:</p>
<pre><code>cargo xtask eval --course &lt;课程名称&gt;</code></pre>
<p>评测结果将显示在终端,并保存到项目根目录下的 <code>eval_result.json</code> 文件中。</p>
</section>

<section id="extension">
<h2><span class="icon">🧩</span> 如何拓展新课程评测</h2>
<p>系统可以方便地扩展以支持新的课程类型。目前的实现支持 `learning-lm-rs`、`learning-cxx` 和其他基于 `rustlings` 的课程。</p>
<p>要添加对新课程类型的支持,需要修改 <code>xtask/src/eval.rs</code> 文件:</p>
<ol>
<li>在 <code>eval.rs</code> 中为你的新课程类型添加一个新的评测函数,例如 <code>eval_my_course(&self, course_path: &Path) -> Result&lt;(...)&gt;</code>。</li>
<li>
在 <code>run_eval</code> 函数的 <code>match</code> 语句中,添加一个新的分支来调用你的评测函数。
<pre><code>// in xtask/src/eval.rs, inside run_eval function
let (results, succeeds, failures, exercations) = match course_name {
"learning-lm-rs" => self.eval_learning_lm(&path)?,
"learning-cxx" => self.eval_learning_cxx(&path)?,
"my-new-course" => self.eval_my_course(&path)?, // 添加新的分支
_ => self.eval_rustlings(&path)?
};</code></pre>
</li>
</ol>
<p>新的评测函数需要实现具体的评测逻辑,例如运行测试、检查输出来确定练习的通过状态,并返回一个包含练习结果、成功数、失败数和总数的元组。</p>
</section>

<section id="features">
<h2><span class="icon">💡</span> 技术特点</h2>
<ul>
<li><strong>基于 Rust 构建:</strong> 核心工具链使用 Rust 编写,确保了高性能和内存安全。</li>
<li><strong>可扩展的评测引擎:</strong> 通过模块化的设计,可以轻松地为不同语言或框架的课程添加新的评测逻辑。</li>
<li><strong>命令行接口:</strong> 使用 <code>clap</code> 库提供清晰、易用的命令行接口。</li>
<li><strong>Git Submodule 集成:</strong> 课程作为 Git 子模块进行管理,方便版本控制和分发。</li>
<li><strong>结构化输出:</strong> 评测结果以 JSON 格式输出,方便与其他工具或系统集成。</li>
</ul>
</section>
</main>
<footer>
<p>报告生成于 &copy; 2025</p>
</footer>
</body>
</html>
Loading
Loading