总结
曾在去年看过一遍 Rust 的语法,当时 Rust 这种新颖的借用-生命周期设计给我了很深的印象。
后面一直没机会使用后面基本全忘了,这次又跟着学了一遍,又弥补了一些细节上的问题,感觉收获很多。
期待这次训练营的实操,Rust 会给我一个怎样的编程体验。
寒假期间即了解了操作系统项目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让我第一次看到还可以这么学一门语言,通过一些小的练习来学习一门语言,这种学习方式非常的有趣,我也通过这个项目学到了一些学习方法,比如如何通过阅读错误信息来找到错误的原因,如何通过阅读文档来学习一门语言等等,这些方法对我来说也是非常重要的。
希望我能坚持下来接下来的学习!!!
自去年在操作系统训练营首次接触rust以来,这是第二次系统地再次过了一遍rust的知识,这是我学习的第一门类函数式编程语言,对于基本的语法掌握的还算可以,但是许多复杂的部分让我学起来感到痛苦。
首先是类型系统,作为强类型语言,对类型的要求很苛刻,每次涉及到复杂类型都要和编译器搏斗,为了安全牺牲掉了一些便捷是可以理解的,但是复杂的类型系统绝对会让初学者红温,这种感受在我做到101题,链表合并的时候达到了顶峰:)
其次是迭代器,迭代器使用起来非常方便,但是理解他的用法是有一些困难的,并且有一些需要记忆的内容,要特别注意。
这次加了十道算法题,感觉这种设计非常好,帮助我把前面的一些知识综合了起来,希望rust生态、os社区越来越好。
在加入此次训练营之前,我正在学习MIT的xv6操作系统(RV汇编,C语言),一直听闻清华的用Rust写的OS–rCore–,而且也是基于xv6,RV版的。本打算结束了xv6再了解的,但是恰巧发现了春夏季训练营的报名机会而且时间也算合适,觉得如果想了解Rust和rCore就不要再拖延了,于是下定决心报名并开始正式地学习Rust语言。
早已听闻Rust在内存安全方面全面的保护,以及Rust学习曲线之陡峭,在正式开始前就给自己做足了心理建设。
我并没有过严格的C/C++编程体验,在CS61C短暂的接触过C语言,在CMU-15445短暂的接触过C++,所以可能我并无法感受到相比C/C++,Rust为编程者带来的“思想解放”。但是在MIT xv6学习过程中,我确实深刻地体会到C语言“天使与魔鬼”的含义,C语言让编程者随心所欲地调用系统资源,但是编程者就要为(潜在的、无数的、折磨人的)“segmentation fault”,“undefined behavior”们负责。
在Rust学习过程中,我也切身体会到了“编译器教我做人”的感觉,意识到这并不是一句玩笑话。初期面对一堆报错,我会苦恼一个编译器怎么这也管那也管,我就是想把这个值赋给这个变量,你信我就好了这没问题……但是我逐渐意识到Rust语言的安全性也正因此得以体现,它让程序编写的初期就足够安全,避免了许多运行时的bug,也许增加了编程者的心智负担,但是确实为程序的运行增添了值得这样负担的保障和性能。这更加深了我作为编程者的“责任感”:你要对自己写下的程序负责,而不是随意暴露问题。
但是我作为Rust初学者,必须承认仍然对它知之甚少。我仍然无法感觉到为什么Rust作为系统编程语言,这也许是因为我把能对硬件资源肆意调用的权力当作了“一门系统编程语言”的特点。至此我觉得应该要对系统编程、C语言、Rust语言都要重新进行思考。
心得的最后,我想这样简短概况一下这两个多星期的Rust入门带给我的感受:Rust是一门要用心学的语言,不是一门顺便就学了的语言,如果无法做到反复体会咂摸Rust的思想,几乎无法用Rust做任何事。
希望在未来rCore阶段的学习中,加深对操作系统,xv6,Rust语言,C语言的理解,同时对RV汇编再熟悉一下,上一次接触RV汇编以及是7个多月前61C的project了。
exercises/iterators/iterators3.rsexercises/threads/threads3.rsexercises/smart_pointersexercises/macros/macros3exercises/conversions/from_intoexercises/conversions/from_strexercises/conversions/try_from_intoexercises/tests/test5exercises/tests/test6exercises/tests/test6exercises/algorithm