0%

2024春夏季操作系统训练营一阶段总结-Renli

Rustlings 学习感悟

不得不说,Rust对于我这种只会C/C++的语言的人来说还是很有一定难度的,这种难度来自于对于函数式编程的不熟悉。但一旦熟悉后就感觉到了函数式编程的便捷,特别是迭代器的处理。同时这也增加了一些压力,相较于啥都自己手写的C/C++,Rust等函数编程语言的重点则是熟悉各种各样的函数方法,有时候自己冥思苦想几天的代码,一个简单的函数就能解决,这种经历还是很难受的。

Rust语言除去函数编程以及一些语法糖之外,令人啧啧称道的就是他的安全机制了。确实,初次接触Rust感觉十分惊艳,觉得取代C/C++只是时间问题。但做过Rustlings后,感觉到可能这还是存在一些距离。一方面对于程序员要求太高了,难度感觉比C/C++高出了很多,另一方面尽管尽力屏蔽了底层,但却不得不使用一些unsafe的代码块实现底层操作,导致有点emmm怪怪的。

难度方面,我感觉Rustlings中的algorithm系列题目可以展现出Rust的“刁钻之处”,特别是对泛型T的处理。由于泛型T既可能有Copy也有可能有Clone,这导致很多常规的赋值方法并不能使用,在老师的讲解中我了解到了

1
2
let mut k = T::default();
std::mem::swap(&mut k, &mut self.data[self.top]);

这种写法,但实际使用中还是存在很多限制。不过经过思考和练习,发现很多赋值是可以优化的,特别是在使用相对应的数据结构的方法。感觉这其实有点像编译器强制程序员思考优化代码(被鞭策的感觉。

底层操作方面,则主要还是指针的使用,不得不说,链表之类的使用指针写代码是真的快。不过网上关于这个争议还是蛮多的,我有一段实现safe的双向链表代码,可惜这里太小了粘不下(笑

Rustlings 感觉练习还是蛮不错的,对于我这种0基础的学生来说,三四天看完b站课程后刷完成就感还是蛮强的(虽然看了不少题解,特别是经过最后algorithm部分的练习,感觉自己算是初步入门了Rust

RCore 学习感悟

作为一个只会408操作系统的电子学生,很早之前就想从代码阶段了解操作系统的构成,很感谢训练营能够给我这次机会。

但不得不说,使用Rust语言实现的RCore对我这种只会C语言的难度有点大,各种各样的闭包、智能指针让我看得经常找不到北。坦白来说,就算经过RCore的学习,RCore的很多细节我仍然不是很熟悉,只能说大概框架是有的,这一方面是因为操作系统的本身难度,作为一个之前没有太多接触操作系统的学术,这样一个包含汇编、C语言、Rust的大型工程实在是令人压力山大,另一方面则是Rust本身的难度,这语言是有点抽象的(o(╥﹏╥)o),本以为经过Rustlings学习能够大展拳脚,结果发现自己只是入门的阶段,经常忘记用闭包,函数式编程的思想,常常都是C语言的编程逻辑(还是自己太菜了)。

不过,经过RCore的学习我还是收获颇丰,不仅精进了我的Rust技术,更是极大地扩充了我的操作系统知识,原先只能死记的知识点,现在又有了不一样的理解,比如说管道的实现、内核态和用户态的地址,另外也学习到的书本上很少涉及的知识,比如说用户态空间与内核态空间分离(RCore称之为双页表),SV39多级页表机制等等。

经过RCore学习也能感受到自己的不足,特别是汇编部分,不得不说RCore的汇编涉及太巧妙了,经常是读下来感觉耳目一新,醍醐灌顶。希望以后有机会还能参加编译器的训练营。