这些大厂都在高薪聘请 Rust 工程师
从 Hello world 到实用的 CLI 工具
教学目标 |
本周我们会从一个 CLI 项目开始,在边写边学的过程中了解 Rust,逐渐掌握构建 Rust 程序的最基本的思路和 "The rust way"。 1. 掌握 Rust 的思想,基本语法,数据结构。 2. 介绍 Rust 项目的基本组织结构,熟悉 Cargo 和相关工具。 3. 可以阅读并撰写简单的 Rust 应用程序。 |
详细内容 |
了解 Rust 和其他编程语言相比的独特之处,适用场景等。 掌握基础数据结构:String、Vec、HashMap 等等。 掌握 Rust 编程中的常用库。 掌握构建 Rust 程序的基本思路,学会使用 Struct 和定义简单的 trait,了解泛型在 Rust 中的使用,以及能够读懂别人撰写的泛型代码。 Rust 开发过程中可能遇到的问题及解决方法。 构建自己的瑞士军刀:命令行工具、base64 编解码等一系列有用的小工具。 实战:构建 HTTP 静态页面服务器。 |
从单线程到多线程,从同步到异步
教学目标 |
并发能力是现代编程语言的基础能力,而 Rust 也提供了强大且安全的并发支持。本周我们从标准库提供的 Thread 开始探索多线程开发,再到 Rust 的异步处理,最终尝试构建一个支持部分功能的简易版 Redis 服务器来巩固练习。 1. 学习和掌握 Thread 的使用,学会多线程开发的基本数据结构:Arc / Mutex / RwLock。 2. 会构建自己的并发哈希表,并使用社区提供的 DashMap。 3. 学习和掌握 Future 的使用,掌握异步开发的核心思想的开发方法。 |
详细内容 |
掌握线程的使用方法。 掌握 Arc、Mutex、RwLock 等多线程开发必备的基本数据结构。 学会构建并发哈希表。 学会管理线程,掌握线程间的通信、线程调度策略。 了解 Send / Sync trait,知道如何解决常见的多线程代码编译错误。 掌握 Rust 中异步处理方式。 进一步夯实对 trait 的理解。 实战:构建一个简易版 Redis 服务器。 |
深入浅出元编程
教学目标 |
元编程是 Rust 中一个很重要的工具,本周的内容会带你理解和掌握元编程对 Rust 和其他各种编程语言的帮助。 1. 通过使用 darling / syn / quote,理解 Rust 元编程的基本思路。 2. 学会使用 derive 宏来减少不必要的代码重复。 3. 夯实对 Rust 基本语法,数据结构和 trait 的理解。 |
详细内容 |
掌握宏的使用方法和适用场景。 掌握元编程的编写技巧和适用场景。 继续探索 Rust 语法和数据结构的应用技巧,理解 Rust 的设计理念。 熟练使用 darling crate,同时掌握 syn 和 quote 这两个基础 crate。 学会使用 Cargo expand 了解 derive macro 背后发生的事情。 学会使用 macro_rules! 处理简单的宏替换。 了解 AST,以及基本的遍历 AST 的方法。 |
Rust 生态系统概览
教学目标 |
经过八九年的演进,Rust 已经形成了一个蓬勃发展,质量上乘的生态系统,构建一个应用所需的任何库几乎都可以在 crates.io 中找到。本周我们将一起学习 Rust 工程里的各种常用库,领略 Rust 优质的生态系统。 1. 掌握 Rust 生态下主要的库,重点介绍 serde 生态、tower 生态和 tokio 生态。 2. 学习如何探索 Rust 社区,寻找合适的工具去解决问题。 |
详细内容 |
错误处理:anyhow、thiserror。 日志处理:tracing、tracing-subscriber。 宏:derive_builder、derive_more、strum、darling。 数据转换:serde 生态。 异步运行时:tokio 生态。 应用开发:tower 生态。 关系型数据库:sqlx 生态。 如何高效利用 Rust 社区信息给自己提供帮助。 |
构建高性能互联网应用
教学目标 |
axum 是 Rust 社区下最优秀也是发展最迅猛的 web 框架之一。它植根于 tower 和 hyper 生态,巧妙地使用了各种 trait 和宏为使用者提供了一整套高效且优雅处理 web 请求的框架。本周我们的目标是掌握 axum,学会构建一个功能完整的 web 服务。 |
详细内容 |
掌握 axum 框架,学会使用 trait 和宏优雅处理 web 请求。 实战:构建一个高性能聊天系统,学会使用 axum 中 state、extractor、middleware 等基本功能。 将 API 服务与 web 服务器结合,打造生产环境可用的系统。 掌握 axum、tokio、tower 生态间的联动。 掌握 axum 的错误处理,学会如何把 thiserror 定义的错误通过 axum 暴露给 API 用户和最终用户。 |
构建强大高效的微服务
教学目标 |
在 Rust 生态中,prost 是发展最好的 protobuf 实现,而 tonic 是最佳的 gRPC 实现。由于 tonic 兼容 tower 生态,因此它和 axum 可以完美结合,共同提供服务。本周的内容会重点讲解 prost 和 tonic 的应用实践。 |
详细内容 |
掌握 prost、tonic、tower、axum 生态间的结合方式。 掌握处理 JSON、YAML 等不同类型的文件格式的方法。 实战:构建强大的微服务(CRM 服务系统):数据建模、服务建模,并增加适当的中间件完善系统功能。 完善微服务需要的其他基础服务:授权请求等。 |
轻松处理各种数据
教学目标 |
在了解了 prost、tonic、tower、axum 后,本周我们将继续学习如何使用 Rust 处理各种格式的数据,包括但不限于 CSV、JSON、Parquet 等常见的数据处理格式。
|
详细内容 |
了解 Rust 对 SIMD 的支持,Rust 如何帮助工程师处理大规模数据。 掌握 apache arrow 生态的内容和特性。 学会使用 arrow、DataFusion、Polars 以及 lance 等工具处理大规模数据。 |
灵活嵌入各种语法
教学目标 |
本周我们开始学习如何使用 Rust 处理自定义的语法语义,以及在应用程序中如何嵌入其他语言编写的代码。掌握这些内容后就能知道如何让自己的应用程序具备最大的灵活性,允许用户自定义代码轻松扩展应用。 |
详细内容 |
掌握 nom,能够处理简单的语法解析。 掌握 pest,能够构建自己的语法并解析它。 简单了解如何嵌入 rhai / rlua / pyo3 / rquickjs / deno。 构建一个类似于 deno deploy 的服务,允许用户运行他们的 typescript/javascript 代码。 用 pyo3 和 axum 构建一个类似 nextjs 的 web framework。 |
让 Rust 代码成为其他语言编写的系统的基石
教学目标 |
几乎所有语言都和 C 语言的应用程序接口兼容,因此可以使用 C 语言来编写高性能的组件。然而,这样的 C 语言代码很难撰写和维护,需要撰写大量繁琐且丑陋的脚手架代码。本周我们就来介绍如何用 Rust 实现同样的目的,学习如何把 Rust 的广阔生态和强大的性能带入到其他语言的生态中,扩展其他语言的能力。 |
详细内容 |
在 nodejs 中使用 Rust 模块:构建一个为 nodejs 提供 blake3 哈希的支持。 在 python 中使用 Rust 模块:构建一个 python 版本的嵌入式的 Vector DB。 |
打造跨端的桌面(和移动端)应用
教学目标 |
本周我们来一起学习使用 Tauri 来构建桌面端和简单的移动端应用,了解如何用 Rust 构建跨端的应用,让 Rust 的开发不仅仅局限于服务器和 CLI。 |
详细内容 |
了解 Rust 对跨端的支持和应用。 实战:使用 Tauri 构建桌面端和简单的移动端应用:构建原生菜单、交互界面等。 基于 Rust 生态构建应用后端(axum、tokio、tower 等)。 学习掌握 DuckDB。 |
构建更好的 ChatGPT:项目架构和数据建模
教学目标 |
本周开始,我们会从零开始构建一个完整的 Rust 产品:体验更好的 ChatGPT。这个产品会连接 OpenAI 及兼容 OpenAI API 的大语言模型,构建一个支持对话,检索增强生成(RAG),支持对话全文检索,以及可以处理各种任务的进阶版 ChatGPT。在这个过程里,我们也会展开讲解构建一个完整的 Rust 产品时应该如何思考,如何做架构设计、核心数据结构和接口设计。 |
详细内容 |
构建 Rust 产品前的思考:架构、数据结构、接口设计。 架构设计:根据业务核心流程设计系统架构。 数据结构:设计核心业务流程需要的数据结构和对应的接口。 数据库建模:使用 sqlx 及 Postgres 设计数据库。 数据库迁移:学习掌握 sqlx 进行数据库迁移的基本要领。 连接 OpenAI:打造进阶版 ChatGPT。 |
构建更好的 ChatGPT:服务端核心逻辑以及 API 实现
教学目标 |
一个 Chat 工具需要尽可能地即时为用户提供反馈。基于之前的思考和基础设计,在本周我们将学习如何使用多种工具构建复杂的实时的服务端逻辑。 |
详细内容 |
学习使用 Smithy,掌握 Smithy IDL,使用 Smithy 生成 OpenAPI spec。 学习如何在 axum 中通过 tower 接口嵌入 Smithy 的支持。 实现架构中需要的 API 接口。 完善用户注册和登录功能。 |
构建更好的 ChatGPT:前端、部署与监控
教学目标 |
在完成各类接口和服务端逻辑后,本周我们会一起完善前端,并了解如何处理日志与监控,以及如何把服务部署到云端。 |
详细内容 |
完善前端页面。 使用 tracing 进行日志处理。 使用 Sentry 进行错误处理。 使用 OpenTelemetry 进行服务指标监控。 |
构建更好的 ChatGPT:数据平台
教学目标 |
到目前为止,一个 ChatGPT 应用已经基本建立起来了,还剩下应用的维护与数据监控部分。本周我们将学会如何使用 Rust 构建数据平台。 |
详细内容 |
使用 protobuf 来建模可监控的用户行为。 学习掌握 ClickHouse。 通过开源工具进行数据的可视化分析。 |
构建一个适用于各种软件服务的授权系统
教学目标 |
用户授权系统几乎是所用应用都不可或缺的基础服务。想象一款图片或者视频分享服务,你可以将其分享给所有人(公开),或者只分享给某些群组(半公开),或者只分享给某些人(点对点),要做到这一点,你需要一个授权系统。授权粒度可以非常细,从基本的 read/write,到 triage,到 maintain 到 admin,可以五花八门。你可以在业务逻辑中大量嵌入 if-else 来处理授权,也可以构建一个特制的 policy engine 来处理授权,但最好的方式是在公开的论文或者开源项目中寻找业界最好的解决方案。
在这个加餐里,我们会深度阅读 Google 的论文 zanzibar,学习 Google 如何应对数十亿用户每秒数千万次的授权访问,然后用 Rust 实现其核心要素。在实现 zanzibar 的核心结构和算法的过程中,我们一起着重学习如何把论文转化成代码的能力,这种能力将会是工程师职业生涯中最核心的能力之一。 |
详细内容 |
对比授权系统的基本解决思路。 精读 zanzibar 论文。 在理解 zanzibar 的基础上,对其精简,构建相应的 Rust 版本。 使用 nom 或者 pest 构建 zanzibar 模型的解析(user - object - relation - relation tuple)。 从社区中寻找合适的 graph database 来存储 zanzibar 授权信息。 构建 API 提供授权服务。 产品化 zanzibar 服务的建议(如何达到需要的可扩展性和服务 SLA - e.g. 99.99% uptime)。 |