0%

第三阶段总结报告

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 可以声明一些模块的存在,然后由其他模块文件对应实现。

还有很多其他小的理解的细节点,需要继续深入理解的。

Rust学习笔记

1、 Rust允许在同一个代码块中声明一个与之前已声明变量同名的新变量,新变量会遮蔽之前的变量,即无法再去访问前一个同名的变量,这样就实现了变量遮蔽。
常量不能遮蔽,不能重复定义。

1
2
3
4
5
6
7
8
fn main() {
let x = 3;
let x = x + 2;
let x = x * 2;
println!("x: {}", x);
let x = "Hello, Rust!";
println!("x: {}", x);
}

2、 复制

  • 对于元组类型,如果每个元素的类型都实现了Copy trait,那么该元组类型数据支持浅复制。
  • 结构体和枚举有些特殊,即使所有字段的类型都实现了Copy trait,也不支持浅复制。

3、 高效处理Result<T, E>

  • 如果Result的值是Ok,unwrap方法会返回Ok中的值。如果Result的值是Err,unwrap方法会自动做Panic处理并输出默认的错误消息。
  • expect方法不仅具备unwrap方法的功能,还允许自定义错误信息,这样更易于追踪导致程序错误的原因。
    1
    2
    3
    4
    5
    use std::fs::File;

    fn main() {
    let f = File::open("hello.txt").expect("Failed to open hello.txt");
    }
  • 如果Result的值是Ok,unwrap_or_else会返回Ok中的值。如果Result的值是Err,unwrap_or_else可以执行一个闭包。
  • “?”操作符可以用于返回值类型为Result的函数中,如果出现错误,“?”操作符会提前返回整个函数并将Err值传播给调用者。
    1
    2
    3
    4
    5
    fn read_from_file() -> Result<String, io::Error> {
    let mut s = String::new();
    File::open("hello.txt")?.read_to_string(&mut s)?;
    Ok(s)
    }

4、 迭代器类型
| 迭代器 | 所有权借用 | 创建方法 | 迭代器元素类型 |
| :—-: | :—-: | :—-: | —— |
| IntoIter | 转移所有权 | into_iter | T |
| Iter | 不可变借用 | iter | &T |
| IterMut | 可变借用 | iter_mut | &mut T |

总结

曾在去年看过一遍 Rust 的语法,当时 Rust 这种新颖的借用-生命周期设计给我了很深的印象。

后面一直没机会使用后面基本全忘了,这次又跟着学了一遍,又弥补了一些细节上的问题,感觉收获很多。

期待这次训练营的实操,Rust 会给我一个怎样的编程体验。

第一阶段学习感受

完成了rCore训练营的第一部分——rust基础编程,有以下收获

  • 感受了rust在开发程序时的安全性
  • 增进了对函数式编程的了解
  • 获得了一些与rust编译器斗争的经验:)
  • 对链表有了更加深刻的理解
  • 获得了一些关于引用和借用的知识

2024开源操作系统训练营第一阶段总结报告

寒假期间即了解了操作系统项目rCore,并跟着做了rCore的一些练习,相关项目可以参考KamijoToma/rCoreOS

在这期间通过rCore学习了Rust这门语言。Rust语言的威名我早已听闻,大家都说“学习Rust可以改变个人的一些编程习惯”,在我真正学习到Rust之后,对这句话有了更形象和深刻的理解。

下面我简单列出我的感想:

  1. 对编程语言的设计有了更深的理解

在学习其他语言和使用的过程中,我经常遇到如何在一个函数中返回异常的问题。高级语言,例如Java、C++,给出的解决方案是通过一个特殊的路径——异常,来返回这些错误。
然而,这些异于正常控制流的异常返回会令编译器的工作更加繁重,打乱执行流也意味着会造成额外的性能损失和更加复杂的汇编设计,也是基于此原因Google不建议在C++中使用异常。

另一门语言,Java,也使用异常。在学习Java异常的时候,我了解了Google的Optional库。它取代或部分取代了Java中异常的功能,通过将返回值包裹在一个Optional类中,来指示函数是否正确的处理了这个值。
到这里可能就有些熟悉了,这正是Rust中Option和Result枚举的设计思路。通过将异常和返回值包裹在一个枚举中作为函数的真正返回值,我们将异常的控制流非异常化,减少了编译器设计难度和性能损失。
同理,Rust中对各种trait进行组合也是我认为很优秀的设计思路。这些设计手法让我对编程语言设计的问题理解的更加深刻。

  1. 改进了编码习惯

提到Rust的特点,绕不开的关键词就是“所有权”。作为一门系统级语言,Rust当然不使用gc来自动管理内存,它也不完全需要程序员手动管理内存。事实上,它强迫程序员按照一定的规则来申请和释放内存。
在这里我不再提所有权的细节,而是想说,通过这种强迫的方式,我改掉了很多之前随意申请释放内存的情况。即使编写C程序,我也谨依Rust曾经教过我的管理方法去管理内存。

Rust是一门简洁有力但又有深度的编程语言,难怪有很多人为Rust所狂热。道路是曲折的,前途是光明的,我希望能同255DoesNotExist和TrisuyaN、reecho等同学一起,完整的学完这个夏令营~

我是工作多年的IT从业者,用很多语言写过很多有大有小的程序。我听说过rust但始终没抽出时间来学,这次通过练习,感觉到了它的安全性和可靠性,以及良好的表现。

我觉得rust是非常有前景的系统编程语言。感谢老师和同学们的分享。大家一起加油!

第一阶段总结

最开始是通过朋友的分享知道了rust训练营,在此之前也从来没听过rust语言,只学习过c和python。编程能力实在薄弱。学起rust确实很吃力。但是我通过看圣经和其他参考资料,也慢慢了解了rust的基本用法,感觉rust的很多特性很妙,很厉害。最终在gpt的帮助下,也还是刷完了Rustlings。感谢这个训练营提供的机会,让我了解到rust。

之前看到过rcore的宣传,不过当时看到的时候已经晚了,rust还没学会就结束了,不过当时做了几十道rustlings,留了点基础。
正好这学期学校开了rust课,也多了点时间,就来做了一下。和官网的rustlings不同,这里加的10道数据结构题感觉还是非常不错的。
本人比较懒,不知甚解地写完了rustlings,但是理解和实践能力还是比较不足,这十道题正好综合了之前的知识,写完还是很有收获的,虽然我用了GPT(
anyways,希望后面的第二第三阶段也能顺利完成,第一阶段还是比较简单的。rust还挺难的,希望自己坚持下来

第一阶段 Rustlings 总结

这是我第一次接触rust,这一个月基本上用于学习rust的基础知识,主要是通过rustlings这个项目来学习,这个项目是一个非常好的项目,通过这个项目我学习到了很多rust的基础知识,比如rust的基本语法,rust的数据类型,rust的所有权系统,rust的模块系统等等,这些知识对我来说都是非常重要的,我也通过这个项目学习到了一些rust的编程技巧,比如如何使用match表达式,如何使用闭包等等,这些技巧对我来说也是非常重要的,总的来说,这一个月的学习让我对rust有了一个初步的了解.
rustlings让我第一次看到还可以这么学一门语言,通过一些小的练习来学习一门语言,这种学习方式非常的有趣,我也通过这个项目学到了一些学习方法,比如如何通过阅读错误信息来找到错误的原因,如何通过阅读文档来学习一门语言等等,这些方法对我来说也是非常重要的。
希望我能坚持下来接下来的学习!!!