前二阶段学习感受
Rust
Rust吸引我的地方在:于相较于C语言,Rust提供了高级别的抽象和语法糖并且不会带来额外的性能开销;相较于C++虽然上手难度较高,但是C++更难熟练掌握和精通。此外Rust的官方教程非常不错,使用Cargo方便地发布和管理包使得Rust相比C++更加“现代化”。Rust的学习曲线比较陡峭,以至于需要把整本《Rust 程序设计语言》看完后才能正确地写出规模比较大的程序。所有权机制像是默认实现的C++的移动语义,这一点和我之前接触过的大部分语言都不一样。引用和生命周期有时相当折磨,比如最开始写程序的时候容易犯的一个错误是在函数内部创建一个变量然后返回它的引用,不过这种方式本来也十分危险,因为,假如使用C++,如果不设计好析构函数就非常容易引发内存泄漏,而在Rust中这中问题在编译器就解决了。虽然Rust一开始写比较痛苦,但编译器更像是以为老师去纠正错误。
Rcore
作为一个使用Rust写的OS内核,通过阅读Rcore代码能很好的锻炼我的rust功底,rcore-tutorial-book给出了非常详细的讲解,不得不令人称赞。
这是我第二次做lab,但是第一次正式参加训练营。从现在来看Rcore的编程题其实整体的难度不大,每个lab需要修改的代码整体不超过400行,不过想要快速地完成lab还是需要对代码比较熟悉,结合自己的经历,我认为0基础能一个月之内完成5个lab算是比较快了。因为前置的一些技能也需要花一些时间,我一开始学习时rcore在正式开始看代码之前还花了一周左右的时间学习Makefile、GUN Linker、Risc v规范,如果有相关的基础会快很多。
对于前3个lab,本次训练营花费了10天完成。其中个人认为难度比较大一点的时munmap系统调用的实现。这里我在第一次做lab的时候想用区间树实现快捷的区间查询操作,我参考了《算法导论》手写了红黑树并期望在此基础上实现最终的区间树,但是除了一些bug就被鸽了。不过这次我使用了crates.io上的一个包iset,很方便地实现了区间查找,同时从iset的源码中一窥优秀的rust代码是怎么写的。
截至11.3,成功上传了前3个lab的代码并获得了300分,剩下的两个lab还需继续完成。