前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Rust 训练营

Rust 训练营

作者头像
tyrchen
发布2024-04-10 14:06:29
2600
发布2024-04-10 14:06:29
举报
文章被收录于专栏:程序人生

关注我的朋友可能知道,之前我在极客时间推出过一个专栏《Rust 编程第一课》。在这个专栏的目标是希望帮助你深度了解 Rust 的语言体系,掌握 Rust 开发的精髓和 Rust 设计思想的魅力。比如我会用在 HashMap 中插入和删除数据这个场景来讲解内存如何变化;用堆和栈上面值的生命周期来讲解 Rust 中生命周期的含义和设计考量。

现在,为了帮助更多同学能够玩转 Rust,真正把 Rust 用在生产实践中,我又在极客时间开设了《Rust 训练营》。和专栏不同,训练营的内容更注重实践。我们会通过不同的编程项目,在接近生产环境的代码质量下更好的学会如何使用 Rust。我们不会特别深入到语言的内核层面,而是更希望帮助大家开阔眼界,循序渐进地掌握 Rust 技能树,能够在各种场景下灵活运用 Rust。

在训练营里,我们会从 Rust 的基础语法讲起,到最后完整的系统架构实践。课程内容包含语法、数据结构、Rust 周边生态工具、跨端应用和架构设计,帮助你从其他语言平滑迁移到 Rust。

为了做好这个课程,在过去的两个周末中,我基本处于从早上7点到晚上11点,吃喝拉撒除外,但凡不需要陪娃上课外班,我就坐在电脑桌前开着摄像头录制视频。

第一周的内容涉及到基本的语法,数据类型,泛型和 trait 的概念和用法,所以我用了 14 讲,共计十几个小时的素材去介绍:从一个 csv 转换 json/yaml 的命令行一步步扩展为一个提供各种功能的工具集。我在介绍数据结构,泛型和 trait 的过程中,还探讨哈希(blake3)/ 加密(chachao20poly1305)/ 签名(ed25519)/ base64 等基础知识,最后以一个 HTTP 静态文件服务器作为收宫之战:

第二周的内容涉及并发与异步,是难啃的骨头,所以我用了 11 讲,十多个小时的素材,两千多行代码来帮大家无畏并发,从入门到精通(不过大家不必过于害怕课程量:第一周和第二周十几个小时的素材量是非常态,随着大家对 Rust 的熟悉,随后的内容会慢慢回落到正常的范围)。我从概念上入手,介绍 Rust 下多线程开发的基本思路:

然后,以一个矩阵乘法的样例,教授如何把一个单线程处理,代码高度耦合的流程解耦重构,使其可以潜在进行多线程处理,然后再通过调度和进程间通讯把「CPU密集」的任务进行 map/reduce:

对于异步,我会介绍 Rust 下主流的异步运行时 Tokio 的基本原理:

在一些简单的热身项目之后,跟大家一起构建一个简约而不简单的 redis 服务器:

我从 RESP 协议入手,先教大家如何手工解析 RESP 协议(未来在「异次元之门」那周的课程中会使用 parsec/PEG 来更聪明地解析 RESP 协议),然后用 trait 统一解析的行为,然后再在解析出的 RespFrame 的基础上解析出客户端发送的 Command,最后构建出网络层。这个代码完全按照生产环境的开发思路构建,从内向外层层递进,光 unit test 就有 33 个之多,涵盖所有核心功能。最终的成品运行后可以和官方的 redis-cli 进行正常通讯,支持 set/get/hset/hget/hgetall 等命令。

有了前两周的内容打底,第三周的内容就相对轻松一些,我从声明宏讲起,然后就第二周的课程中的一些重复代码,着手用过程宏来解决。一开始,我们使用 syn/quote 提供的基本功能来解析语法树,在语法树中畅游,获取我们需要的信息,并将其组织成代码输出;随后,我们引入 darling crate,看看 darling 是如何帮助我们自动从语法树中找到我们想要的内容并将其组织在一个个数据结构中。我们会学习构建过程宏的各种细节的技巧,处理泛型参数,处理过程宏的属性或者每个字段的属性,等等。我们会构建各种各样有用的宏来让避免代码中重复的调用(比如 AutoDeref,EnumFrom 等等)。

目前第三周的内容肝完一大半,但为了有足够的冗余来应对突如其来的工作或者出差,我每个周末基本都在马不停蹄地赶进度,往后能多肝一些就肝一些,能多讲一些就多讲一些。我的原则是:做一份课程,就要能够对得起上这个课程的学员

就像我在之前的直播中讲的那样,这门课程我会采用迭代学习的方法:第一二周就有大量的内容扑鼻而来,你会立刻接触到 Rust 开发中遇到的 90% 的概念和方法。但这些内容会不断以螺旋向上的方式不断在更深的迭代中强化自我。悟空在应对沙鲁的挑战时,带着悟饭在精神和时间的房子里训练,训练的第一个重要内容就是保持超赛状态,让超赛常态化,然后以此为基础强化训练。

这是一个非常了不起的认知,就像我们呀呀学语的时候,先让说话常态化,之后才从学校中学习语法时态这些内容。我觉得学习语言,就要有这样的态度和方法。

同时,语言只是一种工具,强大的表达能力来自于我们对更广阔的世界的认知。就像大家都会说中文但表达能力天差地别一样。在不断构建实战项目的同时,我们还需要学习更多的工具,掌握更多的思想,精通各种实操能力,这样才能真正称得上精进:

如今,Rust 越来越成为一个软件开发的风口。前段时间,白宫竟然破天荒发布了白皮书,建议未来的软件需要考虑内存安全,就差点名说要使用 Rust 编程了。随着越来越多的基础设施开始用 Rust 重写,我相信,未来 Rust 会像水一样,无处不在且善利万物。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序人生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档