您可以在此處找到本系列的第二篇文章(「部署您的第一個 Rust 應用程式」)。
鐵鏽則不同。您可以在周末學習 Python 或 Ruby,建立第一個 CRUD 應用程式並對結果感到滿意。
使用 Rust……使用 Rust,您將很難將字串傳遞給不同的方法,更改並返回它。然後,您將訂購 Rust 書,查看其大小,嘆氣並開始。
下班後花了幾週讀完這本書,你放棄了,等待別人建立一個易於理解的教程。
我也遇到了同樣的問題。然而,生活環境給了我幾個月的時間來真正專注於 Rust。
以下是第一個概述、概念和遵循的路徑。在接下來的幾週和幾個月裡,我將發布一系列文章來幫助您從概念到產品。
安裝它們後(在本例中我為 macOS 選擇了brew,方法並不重要),底層堆疊看起來有所不同。 NodeJS 需要 V8(來自 Google 的執行時間引擎)並綁定到 JavaScript 程式庫來執行 JavaScript 程式碼。
Rust 幾乎完全依賴 Rust 本身。只是編譯器使用llvm
函式庫,它們是用 C 和 C++ 寫的。
過去和現在都是一個設計決定,不在 Rust 中包含標準 http 函式庫。因此,OSI 層的覆蓋方式有所不同:
Node 涵蓋了整個堆疊,並與 Koa 和 Express 一起提供了兩個眾所周知且「堅如磐石」的 Web 框架,可協助您在 HTTP 之上建立應用程式。
在 Rust 方面,Rust Core 中僅實作了TCP 。目前的 Web 框架( actix和Rocket )正在實作 HTTP 之前的所有內容。所以你不需要關心它來自哪裡。
如果你想要使用純 HTTP 呼叫而不需要任何更大的框架,你可以安裝實作 HTTP 協定的「crates」(相當於 Node 世界中的 npm 套件)(如hyper和tiny_http )。
Node 使用 npm 進行套件管理:
npm install
正在安裝依賴項
npm run xyz
正在package.json
中執行腳本
在 Rust 方面, cargo
正在處理與您的專案相關的所有內容:
cargo new NAME --bin
正在建立一個應用程式
cargo new NAME --lib
建立一個庫
cargo run
正在執行程式碼
cargo build
正在建立一個可執行文件
cargo test
正在執行專案內的所有測試
有一個開放的PR來加入cargo add
來安裝依賴項。現在您必須手動將它們新增至您的Cargo.toml
檔案中。如您所見,您不需要在package.json
中包含腳本來執行測試或建置和測試應用程式。
心態改變:Cargo 會在
cargo run
後取得包,且版本會改變。因此,第一次它將獲取所有包,第二次將在版本號發生更改時獲取。與npm i
不同的是,它會立即獲取包,並將其加入到帶有save
符號的package.json
中。
節點無緣無故沒有成功。生態系豐富、繁榮。 Rust 仍在開發中,但已經有很多很棒的「板條箱」。網站arewewebyet.org正在追蹤進度並向您展示 Rust 世界中有趣的軟體包。
也嘗試建立一個名為Tide的官方 Rust Web 框架。它已經相當成熟,可以用於副專案。請隨意貢獻並協助為 Rust 的 Web 開發打造一個良好的環境。
節點殺手級功能是 Promise。儘管並不總是易於理解和處理,但 Promise 和事件循環使 Node 如此有利可圖。
Rust 也實作了非同步機制,但尚未出現在最終版本中。它們被稱為期貨。一個名為Tokio的函式庫已經提供了非同步執行時。您可以在areweasyncyet上追蹤 Rust 非同步程式設計的進度。
安裝 Rust: curl https://sh.rustup.rs -sSf | sh
建立一個新專案: cargo new web-app --bin
cd web-app
現在您可以選擇您喜歡的 Web 框架。您可以從Rocket或actix開始。您可以按照網站上的教學來執行第一個 Web 應用程式。
為了在我的下一篇文章之前不要感到沮喪,這裡有關於 Rust 的主要四件事,你必須習慣(一段時間後它們會變得非常棒)。
沒有未定義的。 Rust 沒有真正的空值。這是一個特點。 Rust 有一個名為Option的類型,它封裝了傳回值或 None。在本例中,我們使用Result類型傳回一個值。您可以返回一個可能具有字串值的選項,而不是返回字串,如果我們從中獲取的網站不包含任何文本,則返回 None 。一個簡單的解決方案(不應在生產中使用)是.unwrap()
結果以將字串從封裝中取出。作業:嘗試檢查 GET 請求是否出錯,在這種情況下傳回 Error 而不是 Ok()。
你一定聽過借貸。簡而言之:對非平凡類型(所有沒有固定大小的類型)的每次賦值(=)都會轉移所有權。方法fetch_text()
並不會取得 url 的所有權,而只是使用對其的引用(透過&
)。 作業:找出這段程式碼失敗的原因以及如何解決它。
您始終必須知道方法傳回哪種類型。在此範例中,我們的 HTTP 套件reqwest
傳回一個實作某些方法的 Response 結構(類型)。與許多板條箱一樣,該文件非常出色。那麼看看這裡吧。
您不必鍵入return
即可從方法傳回值。只是不要放一個;
在語句末尾,這將成為您的回傳值。
使用這個範例來嘗試一下,看看哪裡可能會出現錯誤並學習修復它們。
兩種意見:
“遺憾的是沒有!”
“不,不過這是一件好事!”
實際上,您必須學習相當多的 Rust 才能開始。這就是我來這裡的目的。在接下來的幾天、幾週和幾個月中,我將介紹基礎知識,直到建立一個可靠的 Web 應用程式。
在那之前,我可以推薦Exercism.io 上的 Rust 曲目和 Rust Book,您也可以在當地書店或亞馬遜找到紙本版本。
正如我在第一篇文章中提到的,Rust 正在讓你成為更好的開發人員,所以這條路有時會很長,但總是值得的。在Twitter 、 Medium或dev.to上關注我,了解最新動態!
原文出處:https://dev.to/gruberb/intro-to-web-programming-in-rust-for-nodejs-developers-lp