分数组成:

  • 项目100%(50OJ + 30线下验收 + 20代码质量和文档(非游戏制作))
    • 组队:1人110%,2人100-105%,3人90-95%

选定项目:rust-git

因本人还没过完这个学期,代码还未经过线下问答,仓库设为私密。
https://github.com/Shotsuke/rust-git

课程心得

陪伴就是最好的礼物,上课敲项目代码写点其他的作业听歌刷会手机就没了,或者不去也行。小孩子才听讲,是个人类都明白该自学rust吧。选这个课的要么至少懂一点rust的皮毛,要么就是糕手。都不是的话建议求助gpt或者教务系统退课。

建议

选项目前该明白这个项目的难度吧。

  • git:巨简单,源码都在github上你学不会?单人队最多的一集(我就是)。
  • db:看上去不好写,据传也挺简单。大二修过数据库写过内部数据结构和查询就ez。
  • lox:看上去不好写,实际上不好写,码量巨大。你也不想再写一遍编译器吧。
  • pvz:哦我的孩子你怎么这么喜欢赤石,喜欢赤石拦不住的。对了你玩原神吗。

实验心得

一开始是抱着“唉 Cpp 的安全检查怎么这么坏”的想法来上这门课的,虽然在这之前看了一些 CS110L ,但是实际接触一个稍大的工程还是力不从心,一开始写的时候总是“这到底是什么类型”,“这都什么错误处理函数啊随便用个报个错玩玩”,“报nm的错,错误在哪”,逐渐变成“ VSCode 插件显示数据类型是我叠“,“语法🍬薄纱 Cpp ”,“换 Cpp 来代码长度翻倍得了”。

写之前感觉 git 项目是课程四个作业里面相对简单的一个,于是就写了这个项目。事实上简单的不是 rust 而是 git ,越写越能感受到 git 如此简单,而就是这么一个简单的玩意能够让全球人都使用,可谓实至名归。于是写 git 来给 rust 初学者一个练手的机会无疑是很棒的,没有什么高端的算法,做好和文件、解压缩等的交互即可。

写完之后自己对 rust 的理解和开发能力,实现了从0(无)到0.1(有)的飞跃(888888)。虽然写着还是难免会怀疑:我到底是在实现 Git,还是在抱住编译器里的插件,跟 Rust borrow checker 下棋?只要写得非常小心、处处声明生命周期、别想着优化时间用得起 .clone(),Rust 就会大发慈悲地编译通过——虽然咱心里清楚:写的不是高性能代码,而是堆出来的和平协议,确保我程序的安全性。

期间感觉自己最 NB 的时刻,是正在测试功能时,test.txt被 VSCode 的 git 插件识别到了。而最气的同样也是被插件背刺(参见 src/git_models/commit.rs 113行注释),和无处不在的类型检查。现在回想起来,这次实验确实让自己从“只会 println!()”的阶段,升级到了“会写 cargo build 也不心虚”的程度。虽然仍有一堆“下次一定使用”的 #allow[unused] 留在代码角落,但正如 git 的哲学一样:一切都可以 commit,下次再改嘛(再也不想了)。

总之,最终成果不重要,重要的是我没有被 Rust 气到把键盘摔了——这就够了。