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