第三阶段总结报告
Rustlings部分
由于之前学习过rust,对于rustlings很快就完成了。后面的几道算法题也是较为基础的数据结构,类似图,树,链表,还有排序算法等。
收获
通过算法实践加深了我对rust语言的理解。
期望
希望二阶段的我可以更加努力。顺利完成第二阶段的训练。
感谢
感谢老师和助教们为大家开发一套如此优秀的课程。
为什么是rust
因为不想学C++,又想要学习一个语言表达力强的,没有GC的语言。Rust是我唯一的选择了。
为什么是操作系统
计算机的几大专业课中,操作系统的学习是最不够深入了。所以希望从实践出发,补全自己计算机专业知识。
写玩rustlings花费了大概一周的时间,每做两天都会休息一天。整体给人的感受是,难度不大。很多题目的设计不是希望难倒你,而想通过题目让你了解rust的语言特性。rustling的一个大前提就是你已经对其他编程语言有较好的掌握。所以做完全部题目只是rust学习的第一遍入门,还需要入门很多次,才能完全理解这些特性底层逻辑。
我参考的教材是rust圣经,跟题目的顺序有很大的出入,踩了不少坑,要一直翻阅官方文档才能做完题目。
目前遇到比较困难的地方是,裸指针的引用,至今没有完全理解。
还有一些很细节的地方,就是关于文件结构中lib和binary的区别,以下摘自我的笔记
binary 和 lib 只是rust中对源代码文件的类型标注,不是通常意义的二进制可执行文件,不过很接近.
例如src/main.rs
表示,这个文件将会被编译为可执行文件,它是整个项目程序的入口。编译完成后,它将作为可执行文件被用户和其他程序直接调用。
而src/lib.rs
表示, 这个文件是项目的库代码,由main.rs
调用间接使用。这些文件不会被被编译为独立的可执行文件。
lib.rs 可以声明一些模块的存在,然后由其他模块文件对应实现。
还有很多其他小的理解的细节点,需要继续深入理解的。
1、 Rust允许在同一个代码块中声明一个与之前已声明变量同名的新变量,新变量会遮蔽之前的变量,即无法再去访问前一个同名的变量,这样就实现了变量遮蔽。
常量不能遮蔽,不能重复定义。
1 | fn main() { |
2、 复制
3、 高效处理Result<T, E>
1 | use std::fs::File; |
1 | fn read_from_file() -> Result<String, io::Error> { |
4、 迭代器类型
| 迭代器 | 所有权借用 | 创建方法 | 迭代器元素类型 |
| :—-: | :—-: | :—-: | —— |
| IntoIter | 转移所有权 | into_iter | T |
| Iter | 不可变借用 | iter | &T |
| IterMut | 可变借用 | iter_mut | &mut T |
寒假期间即了解了操作系统项目rCore,并跟着做了rCore的一些练习,相关项目可以参考KamijoToma/rCoreOS。
下面我简单列出我的感想:
在学习其他语言和使用的过程中,我经常遇到如何在一个函数中返回异常的问题。高级语言,例如Java、C++,给出的解决方案是通过一个特殊的路径——异常,来返回这些错误。
然而,这些异于正常控制流的异常返回会令编译器的工作更加繁重,打乱执行流也意味着会造成额外的性能损失和更加复杂的汇编设计,也是基于此原因Google不建议在C++中使用异常。
另一门语言,Java,也使用异常。在学习Java异常的时候,我了解了Google的Optional库。它取代或部分取代了Java中异常的功能,通过将返回值包裹在一个Optional类中,来指示函数是否正确的处理了这个值。
到这里可能就有些熟悉了,这正是Rust中Option和Result枚举的设计思路。通过将异常和返回值包裹在一个枚举中作为函数的真正返回值,我们将异常的控制流非异常化,减少了编译器设计难度和性能损失。
同理,Rust中对各种trait进行组合也是我认为很优秀的设计思路。这些设计手法让我对编程语言设计的问题理解的更加深刻。
提到Rust的特点,绕不开的关键词就是“所有权”。作为一门系统级语言,Rust当然不使用gc来自动管理内存,它也不完全需要程序员手动管理内存。事实上,它强迫程序员按照一定的规则来申请和释放内存。
在这里我不再提所有权的细节,而是想说,通过这种强迫的方式,我改掉了很多之前随意申请释放内存的情况。即使编写C程序,我也谨依Rust曾经教过我的管理方法去管理内存。
Rust是一门简洁有力但又有深度的编程语言,难怪有很多人为Rust所狂热。道路是曲折的,前途是光明的,我希望能同255DoesNotExist和TrisuyaN、reecho等同学一起,完整的学完这个夏令营~
我是工作多年的IT从业者,用很多语言写过很多有大有小的程序。我听说过rust但始终没抽出时间来学,这次通过练习,感觉到了它的安全性和可靠性,以及良好的表现。
我觉得rust是非常有前景的系统编程语言。感谢老师和同学们的分享。大家一起加油!
第一阶段:
之前看到过rcore的宣传,不过当时看到的时候已经晚了,rust还没学会就结束了,不过当时做了几十道rustlings,留了点基础。
正好这学期学校开了rust课,也多了点时间,就来做了一下。和官网的rustlings不同,这里加的10道数据结构题感觉还是非常不错的。
本人比较懒,不知甚解地写完了rustlings,但是理解和实践能力还是比较不足,这十道题正好综合了之前的知识,写完还是很有收获的,虽然我用了GPT(
anyways,希望后面的第二第三阶段也能顺利完成,第一阶段还是比较简单的。rust还挺难的,希望自己坚持下来
第二阶段:
总的来说是很让我很惊讶的实验。之前以为是别的实验课那样,在给出的一堆乱七八糟的东西上实现os的相关功能,但是rcore真的基本上从0开始讲解了如何一步步构建一个基本的操作系统,力求大部分细节都照顾到。属实是刷新了我在学校操作系统课和实验里学到的无比浅薄、零散的知识。
唯一不满意的地方是我自己hh,由于时间不太充裕,很多细节其实并没有照顾到,虽然基本的实验是能凑出来,但是明显感觉到对rcore的认识还是不够的,而且还是用的print来debug hhh。
anyway,虽然实验写完了,但是这套代码还玩不起来,不能做到自己随心所欲的更改。准备之后再好好看看问答题怎么写。
这是我第一次接触rust,这一个月基本上用于学习rust的基础知识,主要是通过rustlings这个项目来学习,这个项目是一个非常好的项目,通过这个项目我学习到了很多rust的基础知识,比如rust的基本语法,rust的数据类型,rust的所有权系统,rust的模块系统等等,这些知识对我来说都是非常重要的,我也通过这个项目学习到了一些rust的编程技巧,比如如何使用match表达式,如何使用闭包等等,这些技巧对我来说也是非常重要的,总的来说,这一个月的学习让我对rust有了一个初步的了解.
rustlings让我第一次看到还可以这么学一门语言,通过一些小的练习来学习一门语言,这种学习方式非常的有趣,我也通过这个项目学到了一些学习方法,比如如何通过阅读错误信息来找到错误的原因,如何通过阅读文档来学习一门语言等等,这些方法对我来说也是非常重要的。
希望我能坚持下来接下来的学习!!!