這些大廠都在高薪聘請 Rust 工程師
從 Hello world 到實用的 CLI 工具
教學目標 |
本周我們會從一個 CLI 項目開始,在邊寫邊學的過程中了解 Rust,逐漸掌握構建 Rust 程序的最基本的思路和 "The rust way"。 1. 掌握 Rust 的思想,基本語法,數(shù)據(jù)結構。 2. 介紹 Rust 項目的基本組織結構,熟悉 Cargo 和相關工具。 3. 可以閱讀并撰寫簡單的 Rust 應用程序。 |
詳細內容 |
了解 Rust 和其他編程語言相比的獨特之處,適用場景等。 掌握基礎數(shù)據(jù)結構:String、Vec、HashMap 等等。 掌握 Rust 編程中的常用庫。 掌握構建 Rust 程序的基本思路,學會使用 Struct 和定義簡單的 trait,了解泛型在 Rust 中的使用,以及能夠讀懂別人撰寫的泛型代碼。 Rust 開發(fā)過程中可能遇到的問題及解決方法。 構建自己的瑞士軍刀:命令行工具、base64 編解碼等一系列有用的小工具。 實戰(zhàn):構建 HTTP 靜態(tài)頁面服務器。 |
從單線程到多線程,從同步到異步
教學目標 |
并發(fā)能力是現(xiàn)代編程語言的基礎能力,而 Rust 也提供了強大且安全的并發(fā)支持。本周我們從標準庫提供的 Thread 開始探索多線程開發(fā),再到 Rust 的異步處理,最終嘗試構建一個支持部分功能的簡易版 Redis 服務器來鞏固練習。 1. 學習和掌握 Thread 的使用,學會多線程開發(fā)的基本數(shù)據(jù)結構:Arc / Mutex / RwLock。 2. 會構建自己的并發(fā)哈希表,并使用社區(qū)提供的 DashMap。 3. 學習和掌握 Future 的使用,掌握異步開發(fā)的核心思想的開發(fā)方法。 |
詳細內容 |
掌握線程的使用方法。 掌握 Arc、Mutex、RwLock 等多線程開發(fā)必備的基本數(shù)據(jù)結構。 學會構建并發(fā)哈希表。 學會管理線程,掌握線程間的通信、線程調度策略。 了解 Send / Sync trait,知道如何解決常見的多線程代碼編譯錯誤。 掌握 Rust 中異步處理方式。 進一步夯實對 trait 的理解。 實戰(zhàn):構建一個簡易版 Redis 服務器。 |
深入淺出元編程
教學目標 |
元編程是 Rust 中一個很重要的工具,本周的內容會帶你理解和掌握元編程對 Rust 和其他各種編程語言的幫助。 1. 通過使用 darling / syn / quote,理解 Rust 元編程的基本思路。 2. 學會使用 derive 宏來減少不必要的代碼重復。 3. 夯實對 Rust 基本語法,數(shù)據(jù)結構和 trait 的理解。 |
詳細內容 |
掌握宏的使用方法和適用場景。 掌握元編程的編寫技巧和適用場景。 繼續(xù)探索 Rust 語法和數(shù)據(jù)結構的應用技巧,理解 Rust 的設計理念。 熟練使用 darling crate,同時掌握 syn 和 quote 這兩個基礎 crate。 學會使用 Cargo expand 了解 derive macro 背后發(fā)生的事情。 學會使用 macro_rules! 處理簡單的宏替換。 了解 AST,以及基本的遍歷 AST 的方法。 |
Rust 生態(tài)系統(tǒng)概覽
教學目標 |
經(jīng)過八九年的演進,Rust 已經(jīng)形成了一個蓬勃發(fā)展,質量上乘的生態(tài)系統(tǒng),構建一個應用所需的任何庫幾乎都可以在 crates.io 中找到。本周我們將一起學習 Rust 工程里的各種常用庫,領略 Rust 優(yōu)質的生態(tài)系統(tǒng)。 1. 掌握 Rust 生態(tài)下主要的庫,重點介紹 serde 生態(tài)、tower 生態(tài)和 tokio 生態(tài)。 2. 學習如何探索 Rust 社區(qū),尋找合適的工具去解決問題。 |
詳細內容 |
錯誤處理:anyhow、thiserror。 日志處理:tracing、tracing-subscriber。 宏:derive_builder、derive_more、strum、darling。 數(shù)據(jù)轉換:serde 生態(tài)。 異步運行時:tokio 生態(tài)。 應用開發(fā):tower 生態(tài)。 關系型數(shù)據(jù)庫:sqlx 生態(tài)。 如何高效利用 Rust 社區(qū)信息給自己提供幫助。 |
構建高性能互聯(lián)網(wǎng)應用
教學目標 |
axum 是 Rust 社區(qū)下最優(yōu)秀也是發(fā)展最迅猛的 web 框架之一。它植根于 tower 和 hyper 生態(tài),巧妙地使用了各種 trait 和宏為使用者提供了一整套高效且優(yōu)雅處理 web 請求的框架。本周我們的目標是掌握 axum,學會構建一個功能完整的 web 服務。 |
詳細內容 |
掌握 axum 框架,學會使用 trait 和宏優(yōu)雅處理 web 請求。 實戰(zhàn):構建一個高性能聊天系統(tǒng),學會使用 axum 中 state、extractor、middleware 等基本功能。 將 API 服務與 web 服務器結合,打造生產環(huán)境可用的系統(tǒng)。 掌握 axum、tokio、tower 生態(tài)間的聯(lián)動。 掌握 axum 的錯誤處理,學會如何把 thiserror 定義的錯誤通過 axum 暴露給 API 用戶和最終用戶。 |
構建強大高效的微服務
教學目標 |
在 Rust 生態(tài)中,prost 是發(fā)展最好的 protobuf 實現(xiàn),而 tonic 是最佳的 gRPC 實現(xiàn)。由于 tonic 兼容 tower 生態(tài),因此它和 axum 可以完美結合,共同提供服務。本周的內容會重點講解 prost 和 tonic 的應用實踐。 |
詳細內容 |
掌握 prost、tonic、tower、axum 生態(tài)間的結合方式。 掌握處理 JSON、YAML 等不同類型的文件格式的方法。 實戰(zhàn):構建強大的微服務(CRM 服務系統(tǒng)):數(shù)據(jù)建模、服務建模,并增加適當?shù)闹虚g件完善系統(tǒng)功能。 完善微服務需要的其他基礎服務:授權請求等。 |
輕松處理各種數(shù)據(jù)
教學目標 |
在了解了 prost、tonic、tower、axum 后,本周我們將繼續(xù)學習如何使用 Rust 處理各種格式的數(shù)據(jù),包括但不限于 CSV、JSON、Parquet 等常見的數(shù)據(jù)處理格式。
|
詳細內容 |
了解 Rust 對 SIMD 的支持,Rust 如何幫助工程師處理大規(guī)模數(shù)據(jù)。 掌握 apache arrow 生態(tài)的內容和特性。 學會使用 arrow、DataFusion、Polars 以及 lance 等工具處理大規(guī)模數(shù)據(jù)。 |
靈活嵌入各種語法
教學目標 |
本周我們開始學習如何使用 Rust 處理自定義的語法語義,以及在應用程序中如何嵌入其他語言編寫的代碼。掌握這些內容后就能知道如何讓自己的應用程序具備最大的靈活性,允許用戶自定義代碼輕松擴展應用。 |
詳細內容 |
掌握 nom,能夠處理簡單的語法解析。 掌握 pest,能夠構建自己的語法并解析它。 簡單了解如何嵌入 rhai / rlua / pyo3 / rquickjs / deno。 構建一個類似于 deno deploy 的服務,允許用戶運行他們的 typescript/javascript 代碼。 用 pyo3 和 axum 構建一個類似 nextjs 的 web framework。 |
讓 Rust 代碼成為其他語言編寫的系統(tǒng)的基石
教學目標 |
幾乎所有語言都和 C 語言的應用程序接口兼容,因此可以使用 C 語言來編寫高性能的組件。然而,這樣的 C 語言代碼很難撰寫和維護,需要撰寫大量繁瑣且丑陋的腳手架代碼。本周我們就來介紹如何用 Rust 實現(xiàn)同樣的目的,學習如何把 Rust 的廣闊生態(tài)和強大的性能帶入到其他語言的生態(tài)中,擴展其他語言的能力。 |
詳細內容 |
在 nodejs 中使用 Rust 模塊:構建一個為 nodejs 提供 blake3 哈希的支持。 在 python 中使用 Rust 模塊:構建一個 python 版本的嵌入式的 Vector DB。 |
打造跨端的桌面(和移動端)應用
教學目標 |
本周我們來一起學習使用 Tauri 來構建桌面端和簡單的移動端應用,了解如何用 Rust 構建跨端的應用,讓 Rust 的開發(fā)不僅僅局限于服務器和 CLI。 |
詳細內容 |
了解 Rust 對跨端的支持和應用。 實戰(zhàn):使用 Tauri 構建桌面端和簡單的移動端應用:構建原生菜單、交互界面等。 基于 Rust 生態(tài)構建應用后端(axum、tokio、tower 等)。 學習掌握 DuckDB。 |
構建更好的 ChatGPT:項目架構和數(shù)據(jù)建模
教學目標 |
本周開始,我們會從零開始構建一個完整的 Rust 產品:體驗更好的 ChatGPT。這個產品會連接 OpenAI 及兼容 OpenAI API 的大語言模型,構建一個支持對話,檢索增強生成(RAG),支持對話全文檢索,以及可以處理各種任務的進階版 ChatGPT。在這個過程里,我們也會展開講解構建一個完整的 Rust 產品時應該如何思考,如何做架構設計、核心數(shù)據(jù)結構和接口設計。 |
詳細內容 |
構建 Rust 產品前的思考:架構、數(shù)據(jù)結構、接口設計。 架構設計:根據(jù)業(yè)務核心流程設計系統(tǒng)架構。 數(shù)據(jù)結構:設計核心業(yè)務流程需要的數(shù)據(jù)結構和對應的接口。 數(shù)據(jù)庫建模:使用 sqlx 及 Postgres 設計數(shù)據(jù)庫。 數(shù)據(jù)庫遷移:學習掌握 sqlx 進行數(shù)據(jù)庫遷移的基本要領。 連接 OpenAI:打造進階版 ChatGPT。 |
構建更好的 ChatGPT:服務端核心邏輯以及 API 實現(xiàn)
教學目標 |
一個 Chat 工具需要盡可能地即時為用戶提供反饋?;谥暗乃伎己突A設計,在本周我們將學習如何使用多種工具構建復雜的實時的服務端邏輯。 |
詳細內容 |
學習使用 Smithy,掌握 Smithy IDL,使用 Smithy 生成 OpenAPI spec。 學習如何在 axum 中通過 tower 接口嵌入 Smithy 的支持。 實現(xiàn)架構中需要的 API 接口。 完善用戶注冊和登錄功能。 |
構建更好的 ChatGPT:前端、部署與監(jiān)控
教學目標 |
在完成各類接口和服務端邏輯后,本周我們會一起完善前端,并了解如何處理日志與監(jiān)控,以及如何把服務部署到云端。 |
詳細內容 |
完善前端頁面。 使用 tracing 進行日志處理。 使用 Sentry 進行錯誤處理。 使用 OpenTelemetry 進行服務指標監(jiān)控。 |
構建更好的 ChatGPT:數(shù)據(jù)平臺
教學目標 |
到目前為止,一個 ChatGPT 應用已經(jīng)基本建立起來了,還剩下應用的維護與數(shù)據(jù)監(jiān)控部分。本周我們將學會如何使用 Rust 構建數(shù)據(jù)平臺。 |
詳細內容 |
使用 protobuf 來建模可監(jiān)控的用戶行為。 學習掌握 ClickHouse。 通過開源工具進行數(shù)據(jù)的可視化分析。 |
構建一個適用于各種軟件服務的授權系統(tǒng)
教學目標 |
用戶授權系統(tǒng)幾乎是所用應用都不可或缺的基礎服務。想象一款圖片或者視頻分享服務,你可以將其分享給所有人(公開),或者只分享給某些群組(半公開),或者只分享給某些人(點對點),要做到這一點,你需要一個授權系統(tǒng)。授權粒度可以非常細,從基本的 read/write,到 triage,到 maintain 到 admin,可以五花八門。你可以在業(yè)務邏輯中大量嵌入 if-else 來處理授權,也可以構建一個特制的 policy engine 來處理授權,但最好的方式是在公開的論文或者開源項目中尋找業(yè)界最好的解決方案。
在這個加餐里,我們會深度閱讀 Google 的論文 zanzibar,學習 Google 如何應對數(shù)十億用戶每秒數(shù)千萬次的授權訪問,然后用 Rust 實現(xiàn)其核心要素。在實現(xiàn) zanzibar 的核心結構和算法的過程中,我們一起著重學習如何把論文轉化成代碼的能力,這種能力將會是工程師職業(yè)生涯中最核心的能力之一。 |
詳細內容 |
對比授權系統(tǒng)的基本解決思路。 精讀 zanzibar 論文。 在理解 zanzibar 的基礎上,對其精簡,構建相應的 Rust 版本。 使用 nom 或者 pest 構建 zanzibar 模型的解析(user - object - relation - relation tuple)。 從社區(qū)中尋找合適的 graph database 來存儲 zanzibar 授權信息。 構建 API 提供授權服務。 產品化 zanzibar 服務的建議(如何達到需要的可擴展性和服務 SLA - e.g. 99.99% uptime)。 |