這些大廠都在高薪聘請 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 工具需要盡可能地即時為用戶提供反饋?;谥暗乃伎己突A設計,在本周我們將學習如何使用多種工具構建復雜的實時的服務端邏輯。 |
詳細內容 |
學習使用 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)。 |