2021 年 Rust 生態(tài)版圖調(diào)研報告 | 星辰大海(下篇)

文前
半年前,我寫了一篇《三萬言| 2021 年 Rust 行業(yè)調(diào)研報告》[1] ,內(nèi)容主要圍繞 Rust 語言介紹 和 行業(yè)領(lǐng)域開源應(yīng)用盤點(diǎn) 兩大部分內(nèi)容。時隔半年,我覺得有必要再寫一篇年終的 Rust 生態(tài)調(diào)研報告。因?yàn)槲蚁虢o大家提供一個比較全面的視角,通過挖掘互聯(lián)網(wǎng)上的各種散落且隱藏的信息,最終繪制出一張 Rust 的“生態(tài)地圖”,讓大家盡量客觀公正地去認(rèn)識 Rust 語言。
在完成本篇報告之后,我得出一個觀點(diǎn):Rust 的出現(xiàn)并不是要你去用它重寫一切,而是希望你可以用它創(chuàng)造新的未來。當(dāng)然這只是我個人觀點(diǎn),不代表任何人任何機(jī)構(gòu)和公司。如果您有不同觀點(diǎn),歡迎探討。
* 本次報告的所有內(nèi)容都來自于互聯(lián)網(wǎng)公開信息,如有錯誤或不宜在本報告中提及的內(nèi)容,請及時告知。
大綱
本次報告包含以下內(nèi)容:
Rust Project 自身狀態(tài)
Rust 在各個領(lǐng)域中的應(yīng)用狀態(tài)和趨勢
Rust 職業(yè)崗位分布
Rust 語言在教育的普及狀態(tài)
上篇回顧
在《【上篇】2021 年 Rust 生態(tài)調(diào)研報告 | 星辰大?!?/strong>中,我們盤點(diǎn)了 Rust Project 自身的狀態(tài) 以及 Rust 在操作系統(tǒng)、云原生、物聯(lián)網(wǎng)、游戲和數(shù)據(jù)處理領(lǐng)域中 2021 年值得關(guān)注的項(xiàng)目動態(tài)。
這篇內(nèi)容會緊接上篇內(nèi)容,繼續(xù)探討 Rust 在其余領(lǐng)域中的應(yīng)用狀態(tài)、Rust 職業(yè)崗位分布 和 Rust 語言在教育方面的普及狀態(tài)。
Rust 在各個領(lǐng)域中的應(yīng)用狀態(tài)和趨勢【續(xù)】
機(jī)器學(xué)習(xí)與科學(xué)計(jì)算
2021 年 NLP 領(lǐng)域明星項(xiàng)目 Transformers
Hugging Face 是一家總部位于美國紐約的聊天機(jī)器人初創(chuàng)服務(wù)商。該公司在 NLP 界鼎鼎大名,2021 年 3 月份剛剛完成 4000 萬美元 B 輪融資。在 GitHub 上發(fā)布了開源 NLP 庫 Transformers[2] ,而 Transformers 庫集成了 tokenizers。
tokenizers[3] 是 Hugging Face 公司開源的一款 Rust 實(shí)現(xiàn)的分詞庫,只需不到 20 秒即可用服務(wù)器 CPU 進(jìn)行 1GB 文本處理?;谏疃葘W(xué)習(xí)的現(xiàn)代 NLP 管道中的瓶頸之一就是 tokenization,尤其是通用性強(qiáng)且獨(dú)立于框架的實(shí)現(xiàn)。所以,該分詞器的核心是用 Rust 編寫的,并且存在 Node 和 Python 的綁定。提供當(dāng)今最常用的分詞器的實(shí)現(xiàn),重點(diǎn)是性能和通用性。
目前 Transformer 模型預(yù)測已經(jīng)遍布特斯拉、谷歌、微軟、Facebook 等科技巨頭。Transformer 在特斯拉 AutoPilot 自動駕駛系統(tǒng)中驅(qū)動汽車、在 Gmail 中補(bǔ)全句子、在 Facebook 上及時翻譯用戶的帖子以及在 Bing 中回答用戶的自然語言查詢等。
可以說,Hugging Face 這家創(chuàng)業(yè)公司 使用 Rust 來構(gòu)建分詞器,對于機(jī)器學(xué)習(xí)模型的準(zhǔn)確率和性能方面的巨大提升應(yīng)該是有積極作用等。
linfa
Linfa[4] 是一個 Rust 實(shí)現(xiàn)的 類似于 python scikit-learn 的庫,旨在提供一個全面的工具包,可以使用 Rust 構(gòu)建機(jī)器學(xué)習(xí)應(yīng)用程序。該團(tuán)隊(duì)還創(chuàng)建了 Rust-ML 組織。
scikit-learn,又寫作 sklearn,是一個開源的基于 python 語言的機(jī)器學(xué)習(xí)工具包。它通過 NumPy, SciPy 和 Matplotlib 等 python 數(shù)值計(jì)算的庫實(shí)現(xiàn)高效的算法應(yīng)用,并且涵蓋了幾乎所有主流機(jī)器學(xué)習(xí)算法。
更多資料:Rust 機(jī)器學(xué)習(xí)之書[5]
2021 年該庫已經(jīng)發(fā)布了 0.5 版本,其 Roadmap[6] 中 24 個任務(wù),截止目前已經(jīng)完成了 20 個。該 Roadmap 的目標(biāo)就是在功能方面要和 Python 的`scikit-learn`[7] (基于 SciPy 針對機(jī)器學(xué)習(xí)領(lǐng)域發(fā)展出的一個分支版本)提供的算法完全一致。目前僅剩下 高斯過程、隨機(jī)森林、集成學(xué)習(xí)和 最小角度回歸沒有完成。這個 Roadmap 進(jìn)行了大概兩年開發(fā),預(yù)計(jì) 2022 年應(yīng)該會完成。
也就是說,在 2022 年,Rust 生態(tài)中會出現(xiàn)一個功能和 python sklearn 完全一致,但性能比 sklearn 更好的庫。
Polars
在數(shù)據(jù)操作層面,每個人都喜歡 Pandas 的 API。它快速、簡單且有據(jù)可查。但在生產(chǎn)方面,Pandas 有點(diǎn)棘手。Pandas 不能很好地?cái)U(kuò)展……沒有多線程……它不是線程安全的……它不是內(nèi)存效率。這一切都是 Rust 存在的理由。
**Polars**[8] 用 Rust 實(shí)現(xiàn)的新 Dataframe 庫,具有方便的 Python 綁定。它試圖做到以線程安全的方式進(jìn)行讀取、寫入、過濾、應(yīng)用函數(shù)、分組和合并。它使用**Apache Arrow**[9],這是一個專門為跨語言進(jìn)行高效數(shù)據(jù)處理和數(shù)據(jù)共享而構(gòu)建的數(shù)據(jù)框架。
Polars 有兩個優(yōu)勢:
它是性能殺手,參考 db-benchmark[10] 。
它的 API 非常簡單。哪怕不懂 Rust 語法也能看懂該接口要做什么。
也有三個缺點(diǎn):
構(gòu)建 Dataframe API 很困難,Pandas 花了 12 年才達(dá)到 1.0.0,而 Polars 很年輕,所以目前還不夠成熟。
使用它的時候,不僅僅要熟悉 Polars API,還需要熟悉 Arrow API,因?yàn)楹芏喾敝毓ぷ魇?arrow 來完成的。
編譯時間太慢,可能需要 6 分鐘左右。
Polars 現(xiàn)在由 Xomnia[11] 公司贊助。Xomnia 是荷蘭一家人工智能公司,在研究自動駕駛船只,被人稱為水上特斯拉。
oxide-enzyme
oxide-enzyme [12] 也是 linfa 團(tuán)隊(duì)在 2021 年底新創(chuàng)建的另一個項(xiàng)目。oxide-enzyme 是 Enzyme 的 Rust 前端庫,該庫目前是實(shí)驗(yàn)性的,但在積極開發(fā)中。
Enzyme[13] 是 MIT 提出的自動微分框架,它能夠合成以 LLVM 中間表示(IR)表示的靜態(tài)可分析程序的梯度。Enzyme 能夠合成任何以面向 LLVM IR 編譯器為語言編寫的程序的梯度,包括 C、C ++、Fortran、Julia、Rust、Swift、MLIR 等,從而提供這些語言的本機(jī) AD 功能。
Enzyme 出現(xiàn)的背景
當(dāng)前,PyTorch、TensorFlow 等機(jī)器學(xué)習(xí)框架已經(jīng)成為了人們開發(fā)的重要工具。計(jì)算反向傳播、貝葉斯推理、不確定性量化和概率編程等算法的梯度時,我們需要把所有的代碼以微分型寫入框架內(nèi)。這對于將機(jī)器學(xué)習(xí)引入新領(lǐng)域帶來了問題:在物理模擬、游戲引擎、氣候模型中,原領(lǐng)域組件不是由機(jī)器學(xué)習(xí)框架的特定領(lǐng)域語言(DSL)編寫的。因此在將機(jī)器學(xué)習(xí)引入科學(xué)計(jì)算時,重寫需求成為了一個挑戰(zhàn)。
為了解決這一問題,現(xiàn)在的發(fā)展趨勢包含構(gòu)建新的 DSL,讓重寫過程變得簡單,或者在編程時直接進(jìn)行構(gòu)建。這些方法可以讓我們獲得有效的梯度,但是仍然需要使用 DSL 或可微分的編程語言進(jìn)行重寫。為了方便開發(fā)者,來自 MIT 的研究者開源了 Enzyme。
MegFlow
MegFlow[14] 是曠視天元在 2021 年 9 月份開源的面向計(jì)算機(jī)視覺應(yīng)用的流式計(jì)算框架,提供了一套可快速完成 AI 應(yīng)用部署的視覺解析服務(wù)方案。AI 應(yīng)用開發(fā)者可以基于 MegFlow 提供的圖像和視頻解析服務(wù),最快 15 分鐘即可完成客制化所需功能,例如發(fā)票掃描、明火檢測等。
常規(guī)的 AI 算法交付流程一般分為模型訓(xùn)練、SDK 封裝、業(yè)務(wù)集成和交付驗(yàn)收四個步驟,冗長繁雜。MegFlow 總結(jié)了曠視內(nèi)部多年的 AI 應(yīng)用工程落地經(jīng)驗(yàn),將資源、消息、任務(wù)等概念進(jìn)行了清晰一致的抽象化,將冗長的算法交付流程簡化為模型訓(xùn)練、業(yè)務(wù)集成及交付驗(yàn)收三步。通過 MegFlow ,AI 算法研究人員可以快速將訓(xùn)練好的模型集成部署成簡單易用的 AI 服務(wù)并完成交付。
MegFlow 的研發(fā)團(tuán)隊(duì)調(diào)研了多種技術(shù)方案,最終選擇了安全且零額外開銷的 Rust 異步生態(tài),從基礎(chǔ)上保證了 MegFlow 的安全性與性能。
MegFlow 開源的這四個月里,增加了一些特性,并且還增加了一個使用案例:貓貓圍欄[15] ,相關(guān)視頻:懶出新境界!程序員竟然造出一臺人工智能貓糧機(jī)![16] ,實(shí)驗(yàn)效果還不錯。并且開發(fā)者還可以從曠視天元申請免費(fèi)的算力。
qdrant :神經(jīng)網(wǎng)絡(luò)搜索引擎
qdrant[17] 是一個向量相似性搜索引擎。它提供了一個生產(chǎn)就緒的服務(wù),有一個方便的 API 來存儲、搜索和管理點(diǎn)(帶有額外有效 payload 的向量)。Qdrant 是為擴(kuò)展過濾支持而定制的。這使得它對各種神經(jīng)網(wǎng)絡(luò)或基于語義的匹配、分面搜索和其他應(yīng)用都很有用。基于 Rust 實(shí)現(xiàn),性能也有保證。嵌入神經(jīng)網(wǎng)絡(luò)編碼器可以變成成熟的應(yīng)用程序,用于匹配、搜索、推薦等。
目前
其他
還有一些在 2021 年 6 月份統(tǒng)計(jì)過的依然活躍維護(hù)狀態(tài)的機(jī)器學(xué)習(xí)框架:
tch-rs[18] 是 Pytorch 的 Cpp API 的 Rust 綁定,目前正在活躍維護(hù)中。
ndarray[19] 是一個由 Rust 官方團(tuán)隊(duì)中資深科學(xué)計(jì)算專家 bluss 開發(fā)的開源項(xiàng)目,實(shí)現(xiàn)了基于 rust 的矩陣和線性運(yùn)算。目標(biāo)是在 Rust 中建立類似于 numpy 和 openblas 的科學(xué)計(jì)算社區(qū)。它是機(jī)器視覺、數(shù)據(jù)挖掘、生物信息等多類科學(xué)計(jì)算庫的基礎(chǔ),社區(qū)中的主要用戶為一些相關(guān)技術(shù)的高?;蛘哐芯克?。華為也在深度參與該庫的開發(fā)。
nalgebra[20],是 Rust 的通用線性代數(shù)庫,和 Rapier 一起都是 ,Dimforge 開源組織[21] 開發(fā)的。
tvm-rs[22] 是 TVM 的 Rust 綁定,TVM 是由華盛頓大學(xué)在讀博士陳天奇等人提出的深度學(xué)習(xí)自動代碼生成方法,去年 8 月機(jī)器之心曾對其進(jìn)行過簡要介紹。
Neuronika[23] 是一個用 Rust 編寫的機(jī)器學(xué)習(xí)框架,與 PyTorch 類似,現(xiàn)已實(shí)現(xiàn)最常見的層組件(dense 層、dropout 層等),速度堪比 PyTorch。
Whatlang[24],基于 Rust 實(shí)現(xiàn)的 自然語言 識別項(xiàng)目。
GUI
2021 值得關(guān)注的 GUI 項(xiàng)目 :SixtyFPS
SixtyFPS 是一個工具包,可以有效地為任何顯示器開發(fā)流暢的圖形用戶界面:嵌入式設(shè)備、桌面應(yīng)用程序、移動端和 Web (目前可編譯到 wasm,但僅作為演示,SixtyFPS 無意將 Web 作為主要競爭平臺)。它支持多種編程語言,目前是 Rust、C++ 或 JavaScript。核心庫是 Rust 實(shí)現(xiàn),其他語言的支持通過 C-ABI 來完成。
從 2021 年開始,就看到一些基于 Rust 和開源來創(chuàng)業(yè)的公司慢慢增加,這個專注于 GUI 的 SixtyFPS 也是其中一個,這個開源 GUI 工具庫面向全平臺,目標(biāo)之一是取代 Qt,換句話說,SixtyFPS 基本上是大多數(shù) Qt 開發(fā)人員都在等待的下一代 QML。
SixtyFPS 兩位創(chuàng)始人都對 Qt 開發(fā)有深入的經(jīng)驗(yàn)。其中一位是 曾經(jīng)在 Qt 公司擔(dān)任 QtQml 引擎的主要開發(fā)人員和維護(hù)人員??此麄兊?2021 總結(jié)報告,發(fā)現(xiàn)他們在 2021 才注冊了公司,和 tQCS 這樣的咨詢公司建立了合作關(guān)系,找到了第一個客戶,招募了新成員。(感覺國外技術(shù)流創(chuàng)業(yè)跟國內(nèi)還是有點(diǎn)區(qū)別)。tQCS 提供世界 No.1 的 Qt 咨詢和 UI/UX 設(shè)計(jì)服務(wù),選擇和 SixtyFPS 合作,這意味著什么呢?見仁見智吧。
2022 年他們可能要長足支持嵌入式,要有新品牌名字了。
Tauri
Tauri[25] 被看作是 Electron 的替代者,它們都是使用 Web 技術(shù)創(chuàng)建桌面應(yīng)用程序以開發(fā)應(yīng)用程序用戶界面的框架。雖然表面看這兩者好像都一樣,但其實(shí)存在很大差別。
下面有一個比較:
Bundle 大小 :tauri 比 electron 小大約 19 倍

內(nèi)存消耗 :electron 比 tauri 高 9 倍

性能 :tauri 更勝一籌

但使用 tauri 的要求更高,tauri API 遠(yuǎn)不如 Node.JS 完整和充實(shí),所以你在使用 tauri 的時候,有些 API 可能需要自己使用 Rust 去實(shí)現(xiàn)它們。
上面的比較來自于: https://githubhelp.com/Fournux/tauri-vs-electron[26] 。
另外, Tauri 在 2021 年還孵化出另外兩個 crate :
wry[27],一個跨平臺的 WebView 庫。
tao[28],一個跨平臺的 Window 庫。
Tauri 目前發(fā)布了 1.0 beta 版,距離正式穩(wěn)定版已經(jīng)不遠(yuǎn)。Tauri 選擇 Rust 的原因就是為了安全和性能。Tauri 承諾不管你是在 App 中內(nèi)置 localhost 服務(wù)器,還是做其他事情,Tauri 都會為你提供一個安全的底線。將來 Go、Nim、Python、Csharp 等其他后端語言也會被支持,這些都會通過當(dāng)前這個 Rust 內(nèi)核提供 C-API 來實(shí)現(xiàn)。
Egui
egui[29] 是一款純 Rust 實(shí)現(xiàn)的使用立即模式(immediate mode)的 GUI 框架(在屏幕上實(shí)時繪制需要的 ui)。在 egui 的 README[30] 中說明了這種立即模式的優(yōu)缺點(diǎn),如果你要做選型的話,應(yīng)該去了解一下。簡而言之,立即模式是與保留模式做對比的。立即模式主要優(yōu)點(diǎn)是應(yīng)用程序代碼變得非常簡單,缺點(diǎn)是讓布局更加困難,GUI 也不能太復(fù)雜,否則會給 CPU 帶來負(fù)擔(dān)。
Reddit 一位網(wǎng)友[31] 說他們正在使用 Bevy 和 Egui 來構(gòu)建商業(yè) CAD 軟件。
截止目前,egui 發(fā)布了 0.16 版本。
其他
gtk4-rs[32],另一個比較活躍的 GUI 庫是 GTK 的 Rust 綁定,2021 年發(fā)布了 GTK4 的 Rust 綁定 gtk4-rs[33] 0.3.1 版本,目前還在活躍維護(hù)中。
iced[34],一個被 Elm 架構(gòu)影響的 GUI 框架,它基于 wgpu。也是跨平臺的,包括 Web UI。2021 年一直在活躍開發(fā)中,但是距離 2021 年 4 月份發(fā)版的這八個月時間還沒有發(fā)出新的版本。但它也是被人看好的一個框架。
druid[35],是一個實(shí)驗(yàn)性的 Rust 原生 UI 工具包,值得關(guān)注。Druid 目前的發(fā)展很大程度上是由它在 Runebender[36] 中的使用而推動的,這是一種新的字體編輯器(處于很早期的階段)。
azul[37],是一款跨平臺桌面 GUI 框架。它將函數(shù)式、反應(yīng)式和面向數(shù)據(jù)的編程范式與適用于開發(fā)跨平臺桌面應(yīng)用程序的 API 混合在一起。Azul 的兩個核心原則是不渲染不可見的對象,并使用 DOM 樹的組合而不是繼承。目前發(fā)布了 1.0-alpha 版本,距離正式發(fā)布 1.0 也不遠(yuǎn)了。
lvgl-rs[38] ,是 LittlevGL 的 Rust 綁定。Littlevgl 是一種純 C 語言編寫的 GUI,控件多且美,移植簡單,只要對接一個顯示接口,需要觸摸的再加一個觸摸控制接口。
網(wǎng)絡(luò)與 Web 開發(fā)
網(wǎng)絡(luò)服務(wù)
隨著世界變得越來越緊密,網(wǎng)絡(luò)基礎(chǔ)設(shè)施軟件的規(guī)模和復(fù)雜性正在急劇增加。然而,對該軟件的要求與以往一樣嚴(yán)格:它不僅必須快速,而且必須“安全”,即能夠處理不受信任的數(shù)據(jù)而不會崩潰或容易受到安全漏洞的攻擊。傳統(tǒng)上,這兩個要求是不一致的:網(wǎng)絡(luò)程序員必須選擇一種既能提供速度又能提供安全性的語言。所以,Rust 是下一代網(wǎng)絡(luò)基礎(chǔ)設(shè)施的必須語言。
Tokio
Tokio[39] 是當(dāng)前 Rust 生態(tài)中構(gòu)建網(wǎng)絡(luò)服務(wù)的中流砥柱,它是一個 Rust 異步運(yùn)行時和網(wǎng)絡(luò)應(yīng)用框架。雖然目前 Rust 生態(tài)中也有其他異步運(yùn)行時,比如 async-std[40],但 tokio 無疑是生態(tài)最成熟的一個。
Tokio 在安全性、性能和異步任務(wù)調(diào)度方面都做了很多工作,支持 epoll 和 io_uring (tokio_uring[41] 剛發(fā)布 0.2 版本)。除此之外,還提供 tracing (鏈路追蹤)[42]、console (異步調(diào)試,剛發(fā)布 0.1 版本)[43]和 loom(并發(fā)測試)[44] 工具。
雖然 Rust 異步特性還需要很大的改進(jìn),但是目前因?yàn)橛?Tokio 的存在,完全可以在生產(chǎn)環(huán)境中應(yīng)用 Rust 異步。
Lunatic
lunatic[45],是受 Erlang 影響的一個 WebAssembly 運(yùn)行時。你可以使用它快速、健壯和可擴(kuò)展的服務(wù)器端應(yīng)用程序,但是你可以通過任意可以編譯為 WebAssembly 的語言來使用它。
Lunatic 的并發(fā)是基于超輕量級進(jìn)程,類似于綠色線程或 go-routines[46]。Lunatic 的進(jìn)程創(chuàng)建速度快,內(nèi)存占用小,調(diào)度開銷低。它們專為大規(guī)模并發(fā)而設(shè)計(jì)。在一般的應(yīng)用程序中同時運(yùn)行數(shù)十萬個這樣的進(jìn)程并不少見。Lunatic 進(jìn)程彼此完全隔離,它們有自己的棧、堆甚至系統(tǒng)調(diào)用。如果一個進(jìn)程失敗,它不會影響系統(tǒng)的其余部分。這允許開發(fā)者創(chuàng)建強(qiáng)大且容錯的抽象。
在 Lunatic 上運(yùn)行的所有進(jìn)程都被搶占式異步執(zhí)行 (基于 smol 實(shí)現(xiàn))[47]器調(diào)度和執(zhí)行。這使開發(fā)者可以自由編寫簡單的阻塞代碼,但運(yùn)行時將確保它在等待 I/O 時實(shí)際上不會阻塞線程。
即使在代碼中某處存在無限循環(huán),調(diào)度也將始終是公平的,不會永久阻塞執(zhí)行線程。最好的部分是開發(fā)者不需要做任何特別的事情來實(shí)現(xiàn)這一點(diǎn),無論你使用哪種編程語言,運(yùn)行時都會處理它。
這一切都是基于 Rust 和 WebAssembly ( wasmtime 和 wasmtime-wasi) 來實(shí)現(xiàn)的,目前只發(fā)布了 0.7.0 版本,還在不斷高速迭代。
embassy,嵌入式異步運(yùn)行時
在嵌入式中,通常使用中斷、DMA 并利用多核來處理并發(fā)事件而不阻塞主循環(huán)。這些傳統(tǒng)上是通過有意的寄存器寫入來處理的。例如,向外圍設(shè)備發(fā)送命令以啟動任務(wù),繼續(xù)運(yùn)行程序,當(dāng)任務(wù)完成時,會觸發(fā)一個中斷,并立即運(yùn)行處理完成的代碼。Rust 中可以使用基于 Future 的 Async/Await 功能來抽象這些過程。
embassy[48] 是一個旨在讓 async/await 成為嵌入式開發(fā)的第一選擇的項(xiàng)目。異步可以產(chǎn)生更好的性能和更低的功耗,因?yàn)閳?zhí)行器不必猜測未來何時準(zhǔn)備好執(zhí)行。但是,程序大小可能比其他替代方案大,這對于內(nèi)存非常低的某些空間受限設(shè)備來說可能是個問題。在 Embassy 支持的設(shè)備上,例如 stm32 和 nrf,內(nèi)存通常足夠大,可以容納適度增加的程序大小。
Embassy 是一個執(zhí)行器和一個硬件訪問層 (HAL)。executor 是一個調(diào)度程序,通常執(zhí)行固定數(shù)量的任務(wù),在啟動時分配,但以后可以添加更多。HAL 是一種 API,可用于訪問外圍設(shè)備,例如 USART、UART、I2C、SPI、CAN 和 USB。Embassy 在有意義的地方提供異步和阻塞 API 的實(shí)現(xiàn)。DMA(直接內(nèi)存訪問)是一個非常適合異步的示例,而 GPIO 狀態(tài)更適合阻塞 API。
Embassy 還可以提供一個系統(tǒng)計(jì)時器,可以將其用于異步和阻塞延遲。在不到一微秒的時間內(nèi),應(yīng)該使用阻塞延遲,因?yàn)樯舷挛那袚Q的成本太高,執(zhí)行器將無法提供準(zhǔn)確的定時。
Embassy 目前為多個微控制器系列提供 HAL:
embassy-nrf 適用于 Nordic Semiconductor 的 nRF 微控制器
embassy-stm32 適用于 ST Microelectronics 的 STM32 微控制器
embassy-rp 適用于 Raspberry Pi RP2040 微控制器
Embassy 中的 異步 trait 支持,是未來官方要支持的 Rust async trait 的 MVP [49]實(shí)現(xiàn)案例:
pub trait I2c<A: AddressMode = SevenBitAddress> {
/// Error type
type Error;
// 基于 GAT (nightly Rust)
type ReadFuture<'a>: Future<Output = Result<(), Self::Error>> + 'a
where
Self: 'a;
fn read<'a>(&'a mut self, addr: A, bs: &'a mut [u8]) -> Self::ReadFuture<'a>;
}
impl<A: AddressMode = SevenBitAddress> I2c<A> for u8{
fn read<'a>(&'a mut self, addr: u8, bs: &'a mut [u8]) -> Self::ReadFuture<'a> {
// 使用 async move
async move {
// implementation
}
}
}
當(dāng) GAT 穩(wěn)定之時(預(yù)計(jì) 2022 年 Q1),Rust Embedded 異步生態(tài)系統(tǒng)就會馬上豐富起來。
eBPF 穩(wěn)定支持
eBPF[50] 是一套通用執(zhí)行引擎,可以在 Linux 內(nèi)核執(zhí)行沙箱程序,提供了可基于系統(tǒng)或程序事件高效安全執(zhí)行特定代碼的通用能力,通用能力的使用者不再局限于內(nèi)核開發(fā)者。
eBPF 也逐漸在觀測(跟蹤、性能調(diào)優(yōu)等)、安全和網(wǎng)絡(luò)等領(lǐng)域發(fā)揮重要的角色。Facebook、NetFlix 、CloudFlare 等知名互聯(lián)網(wǎng)公司內(nèi)部廣泛采用基于 eBPF 技術(shù)的各種程序用于性能分析、排查問題、負(fù)載均衡、防范 DDoS 攻擊,據(jù)相關(guān)信息顯示在 Facebook 的機(jī)器上內(nèi)置一系列 eBPF 的相關(guān)工具。
eBPF 技術(shù)在網(wǎng)絡(luò)技術(shù)中的表現(xiàn),更是讓人眼前一亮,BPF 技術(shù)與 XDP(eXpress Data Path) 和 TC(Traffic Control) 組合可以實(shí)現(xiàn)功能更加強(qiáng)大的網(wǎng)絡(luò)功能。
redbpf[51] 是 Rust 實(shí)現(xiàn)的用于構(gòu)建和運(yùn)行 BPF/eBPF 模塊的工具庫集合,它內(nèi)含很多組件可以讓你更方便地使用 eBPF 功能。目前版本更新也非?;钴S,一周前剛發(fā)布 2.3.0 版本。infinyon 用它路由流量[52]。
其他活躍維護(hù)的庫和框架
上篇介紹過 monoio[53],是字節(jié)跳動開源的一個基于 io-uring 的 Thread-per-core 模型的異步 Runtime,詳細(xì)介紹參見:《Rust 異步運(yùn)行時的設(shè)計(jì)與實(shí)現(xiàn)》[54] 。
Glommio[55],是 DataDog 開源的另一款 基于 io-uring 的 Thread-per-core 模型的異步 Runtime ,目前該作者已經(jīng)自己創(chuàng)業(yè)。
h3[56],http3 協(xié)議的 Rust 實(shí)現(xiàn)。
quinn[57], 異步友好的 QUIC 實(shí)現(xiàn)。
tonic[58],是 gRPC 客戶端和服務(wù)器的異步實(shí)現(xiàn)。
quilkin[59],前面介紹過,是 Google Cloud 與 Embark 工作室[60] 合作開發(fā)的一個 UDP 代理,為高性能的實(shí)時多人游戲量身定做。
RedisJSON[61],RedisJSON 是一種高性能 JSON 文檔存儲,允許開發(fā)人員構(gòu)建現(xiàn)代應(yīng)用程序。它在內(nèi)存中存儲和處理 JSON,以亞毫秒級支持每秒數(shù)百萬次操作響應(yīng)時間。JSON 文檔的原生索引、查詢和全文搜索允許開發(fā)人員創(chuàng)建二級索引,快速查詢數(shù)據(jù)。
rust-rdkafka[62],一個全異步 Kafka 客戶端實(shí)現(xiàn)。
smoltcp[63],一個獨(dú)立的、事件驅(qū)動的 TCP/IP 堆棧,專為裸機(jī)實(shí)時系統(tǒng)而設(shè)計(jì)。
rust-libp2p[64],libp2p 網(wǎng)絡(luò)棧。
Eclipse zenoh
隨著連網(wǎng)設(shè)備的數(shù)量穩(wěn)定增加,業(yè)界在計(jì)算、儲存和通信能力方面遇到前所未有的異質(zhì)性,并且在產(chǎn)生數(shù)據(jù)以及必須交付和使用數(shù)據(jù)的規(guī)模方面面臨新的挑戰(zhàn)。
此外,基于性能、效率和隱私考慮,人們越來越希望使數(shù)據(jù)處理盡可能靠近來源,同時方便存取遠(yuǎn)距離的應(yīng)用程序。換句話說,我們正經(jīng)歷主流架構(gòu)轉(zhuǎn)換[65],從以云端為中心的模式(從云端到霧端儲存、處理和采集數(shù)據(jù))變成以邊緣為中心[66]的模式(在對性能、能源效率和安全性最有意義的位置儲存和處理數(shù)據(jù))。
zenoh[67],提供了零開銷的 Pub/Sub、Store/Query 和 計(jì)算。將動態(tài)數(shù)據(jù)、使用中數(shù)據(jù)、靜態(tài)數(shù)據(jù)與計(jì)算整合。它巧妙地將傳統(tǒng)的發(fā)布/訂閱與地理上分散的儲存、查詢和計(jì)算融合,同時保有遠(yuǎn)勝任何主流堆棧的時間和空間效率。
zenoh 的目的在于滿足必須以可擴(kuò)展、高效率且位置透明化的數(shù)據(jù)方式處理動態(tài)數(shù)據(jù)、靜態(tài)數(shù)據(jù)和計(jì)算的應(yīng)用程序的需求。
目前,Zenon 發(fā)布了 代號為 Aithusa 的版本,提供了 DDS Plugin[68] 和 ROS2[69] 的集成,可用于 IoT、機(jī)器人和自動駕駛領(lǐng)域。
Web 后端
有些人說用 Rust 進(jìn)行 Web 開發(fā) 是殺雞用牛刀,這種觀點(diǎn)其實(shí)是對「系統(tǒng)級語言」的刻板印象造成的。無論從性能、工程架構(gòu)還是開發(fā)效率,Rust 其實(shí)都很出色,目前就是需要一套比較成熟的框架。無論如何,Rust 在 Web 開發(fā)領(lǐng)域的生態(tài)在逐步成型。
Poem : 將 Rust 帶入 Web 生態(tài)
Poem 是 一款由國人開發(fā)的 Rust 異步 Web 框架,其中最令人興奮的功能是:
功能豐富,全面。
使用起來非常簡單,文檔也很棒。在此處查看一些示例[70]
開箱即用的 OpenAPI 規(guī)范生成支持[71]。這是一個非常重要的問題,因?yàn)?Rust 中沒有一個流行的 Web 框架原生支持 OpenAPI 規(guī)范生成。OpenAPI 的支持把 Rust 帶入了 Web 生態(tài)中。
支持中間件功能(類似于 Express.js)。這里的例子[72]
開箱即[73]用地與 AWS Lambda 配合使用。
兼容 Tower Service和Layer. 這讓你可以在這里做一些有趣的事情,比如這個例子[74]。
已知使用 Poem 的開源項(xiàng)目:
delicate[75],分布式任務(wù)調(diào)度平臺。
databend[76],Rust 實(shí)現(xiàn)的數(shù)據(jù)云服務(wù)。
使用 poem 的閉源項(xiàng)目
muse[77],網(wǎng)易的雷火內(nèi)部藝術(shù)資源共享平臺,后臺為 Rust。
??低暤?Hik-ProConnect 項(xiàng)目[78], 一個基于 aws 持續(xù)集成的前端自動化部署平臺。
SeaORM
其他有意思的框架
axum[84],是 tokio 官方新發(fā)布的 Web 框架,它的特色是無宏(macro-free),并且基于 Tower 中間件抽象,充分利用 Tower 生態(tài)。缺點(diǎn)就是泛型用的太多。
perseus[85], 比如增加了 plugin 系統(tǒng),支持 i18n,i18n 是基于 fluent 來做的。fluent 之前幫 rust 官網(wǎng)翻譯時候用過,非常方便。
大前端
前端基礎(chǔ)設(shè)施
Deno
parcel && swc
swc 作者 和 parcel 核心貢獻(xiàn)者現(xiàn)在已經(jīng)被 Next.js 雇傭;esbuild 是作者自己的業(yè)余項(xiàng)目;
swc 目前至少有四個全職開發(fā)了。
swc 的開源活躍度要高于 esbuild:swc 的 總 PR 數(shù)達(dá)到 1600 多,而 esbuild 只有 200 多個。
swc 的 issues 和 esbuild 的 issues 數(shù)相仿,但是 swc 的 issues 明顯分類管理更加明確和細(xì)致,并且都和版本發(fā)布的里程碑進(jìn)行了掛鉤。
swc 和 esbuild issues 頻率非常高,響應(yīng)都比較及時。
parcel 項(xiàng)目 PR 總數(shù)超過 2000, issues 超過 4000,非常活躍。
抖音公司
WebAssembly 前端框架
Yew
Sycamore
其他框架
percy[98], 實(shí)驗(yàn)性的 Rust + wasm 前端框架。
seed[99] ,基于 Elm 架構(gòu)的 Rust 前端框架。
sauron[100], 一個多功能的 Web 框架和庫,用于構(gòu)建客戶端和/或服務(wù)器端 Web 應(yīng)用程序,非常注重簡單性。它適用于開發(fā)使用漸進(jìn)式渲染的 Web 應(yīng)用程序。
MoonZoon[101],正在開發(fā)的一款全棧 Rust 框架,號稱沒有 JS/CSS/HTML 等,開發(fā)進(jìn)度較慢。
其他領(lǐng)域
Rust 與 區(qū)塊鏈
Rust 與 智能合約
基于 WebAssembly 的智能合約,Rust 可以編譯為 WASM ,如 Elrond[102]、Holochain[103]、NEAR[104]、 Secret Network[105]、Substrate[106]。這些基本都有 Rust SDK。 支持將 Rust 編譯到其他 VM 的工具,例如Nervos[107] (RISC-V) 和Solana[108] (eBPF)。 Nervos 合約是用 Rust 和他們的Capsule[109]庫編寫的。除了作為唯一一個運(yùn)行 RISC-V 的區(qū)塊鏈之外,Nervos 還是一個罕見的智能合約區(qū)塊鏈,它使用 UTXO 模型而不是賬戶模型。 Solana 運(yùn)行一個特別古怪的 VM:一個基于 eBPF[110] 的用戶空間 VM rbpf[111]。Solana 已經(jīng)將一個有效的 Rust->eBPF 工具鏈組合在一起,其中包括一個支持 eBPF 的 Rust 編譯器的分支[112]。當(dāng)然,由于 eBPF 不支持循環(huán),這里的 Rust 一定很有趣。 Rust 實(shí)現(xiàn)智能合約語言的人,例如Solang[113](一種 Solidity 到 WASM 編譯器)、Leo[114](一種零知識語言)和Move[115] (Diem 的語言)。盡管許多鏈正在轉(zhuǎn)向通用 VM,特別是轉(zhuǎn)向 WASM,但不這樣做的理由主要有兩個:希望與以太坊 EVM 兼容,以及基于零知識證明。Move 是一個相對罕見的案例,因?yàn)樗仁撬约旱恼Z言,又是它自己的 VM,但沒有像零知識語言那樣擁有自定義 VM 的明顯原因。
一些值得關(guān)注的項(xiàng)目
solang[116],是一個用 Rust 實(shí)現(xiàn)的 Solidity 編譯器,但它不針對以太坊 EVM。相反,它使用 LLVM 作為后端,這意味著它可以潛在地針對大多數(shù)不運(yùn)行 EVM 的區(qū)塊鏈。目前包括 Substrate、Solana、ewasm[117]和Sawtooth[118]。
rust-umbral[119],是一種代理重新加密[120]方案,通過該方案,密文的所有者 Alice 可以指定第三方(代理)重新加密要由 Bob 解碼的密文,而無需向代理透露明文。它是由NuCypher[121]項(xiàng)目開發(fā)的。
noir[122],是一種用于構(gòu)建零知識證明的語言和編譯器。它旨在與多個生成證明的后端一起使用,其中第一個用于barretenberg[123],正如Aztec Network[124]所使用的那樣。
MASQ[125],是一個網(wǎng)狀覆蓋網(wǎng)絡(luò),有點(diǎn)像 TOR,但具有參與的加密經(jīng)濟(jì)激勵措施。
TDN[126],可信分布式網(wǎng)絡(luò)是構(gòu)建分布式應(yīng)用程序的框架,支持 p2p 通信、多個交叉通信區(qū)塊鏈、多層區(qū)塊鏈和多個帳戶模型。它建立在一個新的 p2p 庫 Chamomile 之上。
bip32[127],這是 BIP32[128]分層確定性錢包和 BIP39 助記符的純 Rust、通用、no_std友好的實(shí)現(xiàn) 。
jsonrpsee[129],來自 Parity 的JSON-RPC[130]的異步實(shí)現(xiàn),它還創(chuàng)建了 jsonrpc[131] crate。
stateright[132],是用于在 Rust 中實(shí)現(xiàn)分布式系統(tǒng)的模型檢查器。與 TLA+ 等傳統(tǒng)模型檢查器不同,Stateright 是 Rust DSL,能夠檢查系統(tǒng)的 Rust 生產(chǎn)實(shí)現(xiàn)。它包括 Paxos 和其他簡單算法的示例。
arti[133],是用 Rust 對Tor[134]的官方重寫,于 7 月首次宣布[135]。Tor 是分布式基礎(chǔ)設(shè)施的關(guān)鍵部分,通過該項(xiàng)目可以將 Tor 嵌入到我們的應(yīng)用程序中。
openmls[136],是Messaging Layer Security 協(xié)議[137]的 Rust 實(shí)現(xiàn),這是 IETF MLS 工作組正在開發(fā)的一個正在進(jìn)行的標(biāo)準(zhǔn)。該協(xié)議旨在解決安全消息傳遞中仍然普遍存在的問題:雖然現(xiàn)在可以對兩方對話進(jìn)行強(qiáng)大的端到端加密,但對于端到端加密群組通信,卻很少有好的解決方案.。MLS 指定了“一種密鑰建立協(xié)議,該協(xié)議為規(guī)模從 2 到數(shù)千的組提供高效的異步組密鑰建立,具有前向保密和泄露后安全性”。
mina-rs[138],是由ChainSafe[139]開發(fā)的 Rust 中 Mina 的實(shí)現(xiàn)。它的開發(fā)不僅考慮了移動環(huán)境,還考慮了 WASM,這表明我們將能夠直接在瀏覽器中嵌入一個完整的節(jié)點(diǎn)。Mina[140]是一個新的區(qū)塊鏈網(wǎng)絡(luò),它使用零知識證明來驗(yàn)證鏈的狀態(tài),而無需訪問完整的區(qū)塊鏈,而只是一個很小的(~22k)證明。
arloader[141],是一個用于將文件上傳到Arweave[142]的命令行客戶端。發(fā)布到 Arweave 的文件將永久存儲。該平臺通常用于存儲 NFT 信息??梢允褂?Arweave 原生代幣或 SOL 支付費(fèi)用。
區(qū)塊鏈生態(tài)信息
元宇宙
XR 是指計(jì)算機(jī)通過人機(jī)交互產(chǎn)生的真實(shí)與虛擬組合環(huán)境的連續(xù)統(tǒng)一體,包括與虛擬現(xiàn)實(shí)(VR)、增強(qiáng)現(xiàn)實(shí)(AR)和混合現(xiàn)實(shí)(MR)相關(guān)的技術(shù)。OpenXR 是應(yīng)用程序與進(jìn)程內(nèi)或進(jìn)程外的“XR 運(yùn)行時系統(tǒng)”之間的接口,或者簡稱為“運(yùn)行時”。運(yùn)行時可以處理幀合成、外圍設(shè)備管理和原始跟蹤信息等功能。
信息安全領(lǐng)域
rustscan[148],是一個現(xiàn)代化高性能的端口掃描器,并且提供腳本引擎來支持運(yùn)行 Python,Lua,Shell。支持 自適應(yīng)學(xué)習(xí)(Adaptive learning)。用的越多,RustScan 越智能,不是基于臃腫的機(jī)器學(xué)習(xí),主要是基于基本數(shù)學(xué)。
feroxbuster[149],一款高性能的內(nèi)容發(fā)現(xiàn)工具,用于滲透測試。feroxbuster 使用蠻力結(jié)合單詞列表在目標(biāo)目錄中搜索未鏈接的內(nèi)容,這是一種攻擊行為。這些資源可能存儲有關(guān) Web 應(yīng)用程序和操作系統(tǒng)的敏感信息,例如源代碼,憑據(jù),內(nèi)部網(wǎng)絡(luò)尋址等。此攻擊也稱為可預(yù)測資源位置,文件枚舉,目錄枚舉和資源枚舉。
Enarx[150],這是一個組織,由紅帽公司牽頭其他知名企業(yè)來做可信執(zhí)行環(huán)境的應(yīng)用部署系統(tǒng)。
sn0int[151], 半自動高級公開資源情報(OSINT)框架和程序包管理器,用于掃描目標(biāo) IP 地址、電子郵件、網(wǎng)站和組織信息,并從不同消息源收集各種情報信息。
sniffglue[152],多線程網(wǎng)絡(luò)嗅探器。Kpcyrd 經(jīng)常使用 tcpdump,但他認(rèn)為輸出更友好的話會更好,并且 wireshark 也經(jīng)常存在漏洞,tcpdump 有時也有漏洞,所以他用 Rust 實(shí)現(xiàn)了這個工具。
ripasso[153],一款密碼管理工具。
rustpad[154],是經(jīng)典 padbuster 的多線程繼承者,用 Rust 編寫。它利用 Padding Oracle 漏洞在不知道加密密鑰的情況下解密任何密文或加密任意純文本!
vaultwarden[155],非官方 Bitwarden (密碼管理)兼容服務(wù)器,以前稱為 bitwarden_rs。
innernet[156],一個在后臺使用 WireGuard (下一代 VPN 技術(shù))的專用網(wǎng)絡(luò)系統(tǒng)。
moonwalk[157],在 Linux Exploitation 期間通過在系統(tǒng)日志和文件系統(tǒng)時間戳上留下零痕跡來掩蓋蹤跡。僅用于協(xié)助**紅隊(duì)**[158]的操作。
CaptfEncoder[159],CaptfEncoder 是一款跨平臺網(wǎng)絡(luò)安全工具套件,提供網(wǎng)絡(luò)安全相關(guān)編碼轉(zhuǎn)換、古典密碼、密碼學(xué)、公鑰加密、聚合查詢、雜項(xiàng)等多種實(shí)用工具。CaptfEncoder V3 版本使用 Rust 開發(fā),可執(zhí)行程序體積小,速度更快、性能更優(yōu)、功能更強(qiáng)。其作者目測在阿里云。
科研藝術(shù)領(lǐng)域
nannou[160],旨在讓藝術(shù)家創(chuàng)作自己的藝術(shù)。在德國 mindbuffer[161] 公司就是基于 nannou 和 koto 來創(chuàng)建實(shí)體藝術(shù)項(xiàng)目:使用 486 步進(jìn)電機(jī),86,000 個 LED 和 5 通道顆粒式合成引擎,創(chuàng)建可以變換形狀絢麗多彩的電子藝術(shù)品[162]。
Glicol[163] ,一個面向圖的音樂實(shí)時編程語言。Glicol 可以幫助您使用代碼制作音樂。您可以簡單地連接不同的節(jié)點(diǎn)以形成循環(huán),用 Rust 編寫,得益于 WebAssembly,它可以在瀏覽器中絲滑運(yùn)行。
creek[164],用于音頻的實(shí)時磁盤流 IO。
Symphonia[165],純 Rust 多媒體格式解復(fù)用、標(biāo)簽讀取和音頻解碼庫。
cpal[166],純 Rust 的跨平臺音頻 I/O 庫。
dasp[167],用于數(shù)字音頻信號處理。
Meadowlark[168],旨在成為適用于 Linux、Mac 和 Windows 的免費(fèi)和開源 DAW(數(shù)字音頻工作站)。
3photons-rust[169],一位物理科學(xué)研究員堅(jiān)持使用 Rust ,來實(shí)現(xiàn)模擬 3 個光子構(gòu)建了一種奇異形式的“分子”光。
varlociraptor[170],實(shí)現(xiàn)了一種新穎、統(tǒng)一的完全不確定性感知方法,用于在任意場景中調(diào)用基因組變異。該庫是《為什么科學(xué)家轉(zhuǎn)向 Rust》[171]一文中提及的生物信息處理庫。目前還在活躍維護(hù)。
eigenvalues[172],來自荷蘭電子科技中心研究員實(shí)現(xiàn)的一個特征值求解庫 ,詳細(xì)可以參考這篇文章 《將 Rust 用于科學(xué)數(shù)值應(yīng)用:從過去的經(jīng)驗(yàn)中學(xué)習(xí)》[173] 。
Rust 職業(yè)崗位
職業(yè)崗位分類
區(qū)塊鏈/ 量化金融 / 銀行業(yè)
基礎(chǔ)設(shè)施(云原生平臺開發(fā)):數(shù)據(jù)庫 / 存儲 / 數(shù)據(jù)服務(wù) / 操作系統(tǒng) / 容器 / 分布式系統(tǒng)
平臺工具類:遠(yuǎn)程桌面 / 遠(yuǎn)程服務(wù)類產(chǎn)品 / SaaS / 遠(yuǎn)程工作類產(chǎn)品(比如 Nexthink)
AI / 機(jī)器學(xué)習(xí) / 機(jī)器人
客戶端跨平臺組件開發(fā)
安全工程師 :區(qū)塊鏈安全/ 信息安全
嵌入式工程師
廣告服務(wù)商類,比如 Adinmo
音視頻實(shí)時通信工程師
電商平臺
軟件咨詢
Rust 國內(nèi)部分職位信息【均可內(nèi)推】
字節(jié)跳動。字節(jié)跳動內(nèi)部基礎(chǔ)設(shè)施、飛書、抖音都在用 Rust。這里有很多 Rust 職位需求。
非凸科技。國內(nèi)做量化的企業(yè),面向期貨/股票市場。
海致星圖。用 Rust 做圖數(shù)據(jù),是海致集團(tuán)旗下公司。可遠(yuǎn)程。
達(dá)坦科技。用 Rust 做分布式存儲,連續(xù)創(chuàng)業(yè)者王璞博士帶隊(duì)的初創(chuàng)企業(yè)??蛇h(yuǎn)程。
databend。用 Rust 做數(shù)據(jù)云的初創(chuàng)公司??蛇h(yuǎn)程。
全球可完全 Remote Rust 職位盤點(diǎn)
RedHat[174] ,有 Rust 職位,可遠(yuǎn)程??梢栽?Reddit 私信用戶 @sheepdog69[175]了解詳情 。
tangram[176],一家開發(fā)機(jī)器學(xué)習(xí)類工具的公司,可以發(fā)送郵件咨詢遠(yuǎn)程工作,但該職位只考慮美國/加拿大/歐洲的人員。
Materialize[177],實(shí)時流數(shù)據(jù)庫(前面介紹過)有遠(yuǎn)程職位,這個需要發(fā)郵件咨詢。
toyotaconnected[178] ,目前只允許在美國 12 州內(nèi)進(jìn)行遠(yuǎn)程,它們也是 Rust 基金會的成員之一。他們將 Rust 用于機(jī)器學(xué)習(xí)工作和設(shè)備上。供應(yīng)商 C 和 CPP 代碼中的大量互操作以及我們在豐田和雷克薩斯汽車內(nèi)部解決的許多很酷、有趣的問題,因?yàn)?5G 變得越來越流行。
Era Software[179],遠(yuǎn)程(美國/加拿大/歐洲),與 Elasticsearch 競爭。所有數(shù)據(jù)庫工程職位都是針對 Rust 的。
Qovery[180],遠(yuǎn)程(歐盟),Qovery 是一個平臺,它為任何開發(fā)人員提供了在幾秒鐘內(nèi)將他們的應(yīng)用程序部署到云中的超能力。
estuary[181],遠(yuǎn)程 Rust 開發(fā)人員來開發(fā)我們的實(shí)時數(shù)據(jù)平臺Flow[182],需要發(fā)郵件咨詢。
infinyon[183],遠(yuǎn)程(美國),用于為實(shí)時數(shù)據(jù)流構(gòu)建可靠且可擴(kuò)展的基礎(chǔ)架構(gòu),面向的產(chǎn)品是 Fluvio 和 InfinyOn Cloud 。
Ockam[184],Ockam 正在構(gòu)建開源、端到端加密和相互驗(yàn)證的通信協(xié)議和庫,這些協(xié)議和庫可以在資源受限、間歇性連接的物聯(lián)網(wǎng)設(shè)備和連接機(jī)器中工作。
1password[185],遠(yuǎn)程(加拿大、美國和英國),密碼管理軟件。
IOHK[186],遠(yuǎn)程,區(qū)塊鏈,詳細(xì)請點(diǎn)擊鏈接申請工作。
Rust 語言教育普及狀態(tài)
國內(nèi)外出版書籍
《深入淺出 Rust》
《Rust 編程之道》
《Rust 權(quán)威指南》
《Rust 編程:入門、實(shí)戰(zhàn)與進(jìn)階》
Rust in Action[187]
Programming Rust, 2nd Edition[188]
Rust for Rustaceans[189]
Refactoring to Rust[190]
Black Hat Rust [191]
Hands-on Rust[192]
Zero To Production In Rust [193]
高校教育普及
國內(nèi)將 Rust 應(yīng)用于教學(xué)中的高校,據(jù)我所知,只有清華大學(xué)的 OS 課程。參見:用 Rust 寫操作系統(tǒng) | 清華 rCore OS 教程介紹[194]。
波蘭華沙(Warsaw)大學(xué)[195] ,目前該學(xué)校決定為二年級學(xué)生開設(shè) Rust 課程。 耶魯大學(xué)的鐘林教授開設(shè) 《CPSC 429a, 計(jì)算機(jī)系統(tǒng)設(shè)計(jì)原理》 和 《CPSC 425b,移動和嵌入式系統(tǒng) 》[196] 支持 Rust 語言。但是該課程不是公開課。
將官方的 the book 作為教材。作為教師,他會將 the book 中的知識濃縮為 PPT 進(jìn)行教授。
在學(xué)習(xí)語法的過程中,也摻雜一些 Rust 生態(tài)的最佳實(shí)踐內(nèi)容。
在學(xué)習(xí)完 the book 之后,將以異步為主要側(cè)重內(nèi)容。
設(shè)置五個不同等級的小任務(wù),讓學(xué)生完成,每個任務(wù)有十天時間來完成。
一位本科生使用 Rust 完成強(qiáng)化學(xué)習(xí)庫:https://github.com/ZuseZ4/Rust_RL。但是他反對將 Rust 用于機(jī)器學(xué)習(xí)的教學(xué)中,因?yàn)槭褂?Python 學(xué)習(xí)機(jī)器學(xué)習(xí)更加簡單。(這樣說也很有道理,學(xué)習(xí)的時候要講究學(xué)習(xí)目標(biāo),學(xué)生的學(xué)習(xí)目標(biāo)是學(xué)習(xí)機(jī)器學(xué)習(xí)領(lǐng)域知識,而非 Rust)。
一位朋友說,在大學(xué)里應(yīng)該教授學(xué)生如何解決問題。比如通過學(xué)習(xí)多線程生命游戲的實(shí)現(xiàn),來學(xué)習(xí)解決多線程并發(fā)的問題。
結(jié)語
