安裝完成 Rust 之後,我們可以編寫 Rust 的 Hello Word。這裡介紹兩種方式,一種是rust原生方式,一種是利用 cargo 工具(重要)
rust 執行不關心程式碼存放的目錄,我們可以任意選擇一個合適的位置,建立一個目錄。
比如:我們建立一個目錄名稱為 rust_helloword
mkdir rust_helloword
rust 的原始檔字尾是 .rs 。所以我們在第一個建立的專案目錄下,建立一個 main.rs 檔案。
然後在 main.rs 檔案中寫入如下程式碼:
fn main(){
println!("Hello World!");
}
在建立的 main.rs 檔案目錄下,輸入如下命令:
①、編譯
rustc main.rs
執行之後,會在當前目錄下生成一個 main 的可執行檔案。
PS:windows 是生成 main.exe 可執行檔案;Linux/Mac 是生成 main 檔案。
②、執行
./main
執行之後會在視窗列印出 Hello World!
至此,我們完成了第一個 Rust 程式的編寫。
cargo 英文檔案:https://doc.rust-lang.org/cargo/
cargo中文檔案:https://cargo.budshome.com/index.html
Cargo 是 Rust 的構建系統和包管理器。大多數 Rustacean(這個詞是從甲殼綱動物這個單詞Crustacean[[krʌ'steʃən]],去掉了首字母C,而演變而來的,表示 rust 開發者) 使用 Cargo 來管理 Rust 專案,因為它可以為你處理很多工,比如構建程式碼、下載依賴庫並編譯這些庫。
在編寫更加複雜的 rust 程式時,會用到很多依賴項,如果使用 Cargo 來啟動專案,會簡單很多。
注意:在安裝 rust 時,我們是安裝的 rustup,這會自動安裝 Cargo,所以我們這裡不介紹如何安裝 cargo。
cargo --version
出現如下介面:
分別是 cargo 【版本號】(【雜湊碼】 【釋出時間】)
輸入如下命令:
cargo new hello_cargo
該命令會自動建立一個 hello_cargo 目錄,裡面包含兩個檔案和一個目錄:一個 Cargo.toml 檔案,一個 src 目錄,以及位於 src 目錄中的 main.rs 檔案。
①、Cargo.toml
[package]
name = "hello_cargo"
version = "0.1.0"
authors = ["Your Name <[email protected]>"]
edition = "2018"
[dependencies]
這是 Cargo的組態檔,使用 TOML (Tom's Obvious, Minimal Language)語法
第一行,[package]
,是一個片段(section)標題,表明下面的語句用來設定一個包。隨著我們在這個檔案增加更多的資訊,還將增加其他片段(section)。
接下來的四行設定了 Cargo 編譯程式所需的設定:專案的名稱、版本、作者以及要使用的 Rust 版本。Cargo 從環境中獲取你的名字和 email 資訊,所以如果這些資訊不正確,請修改並儲存此檔案。
最後一行,[dependencies]
,用於書寫專案的依賴包(類似Maven、Gradle裡面編寫的依賴)。在 Rust 中,程式碼包被稱為 crates。這個專案並不需要其他的 crate。
②、src/main.rs
fn main() {
println!("Hello, world!");
}
Cargo 為我們生成了一個 「Hello, world!」 程式,rust 原生方式與 Cargo 生成專案的區別是 Cargo 將程式碼放在 src 目錄,同時專案根目錄包含一個 Cargo.toml 組態檔。
Cargo 期望原始檔存放在 src 目錄中。專案根目錄只存放 README、license 資訊、組態檔和其他跟程式碼無關的檔案。使用 Cargo 幫助你保持專案乾淨整潔,一切井井有條。
如果沒有使用 Cargo 開始專案,比如我們建立的 Hello,world! 專案,可以將其轉化為一個 Cargo 專案:將程式碼放入 src 目錄,並建立一個合適的 Cargo.toml 檔案。
①、構建專案
cargo bulid
這個命令會建立一個可執行檔案 target/debug/hello_cargo (在 Windows 上是 target\debug\hello_cargo.exe),而不是放在當前目錄下。
②、執行
執行執行上一步生成的可執行檔案即可。
如果一切順利,終端上應該會列印出 Hello, world!
。首次執行 cargo build
時,也會使 Cargo 在專案根目錄建立一個新檔案:Cargo.lock。這個檔案記錄專案依賴的實際版本。這個專案並沒有依賴,所以其內容比較少。
原則上自己永遠也不需要碰這個檔案,讓 Cargo 處理它就行了。
我們剛剛使用 cargo build
構建了專案,並使用 ./target/debug/hello_cargo
執行了程式,也可以使用 cargo run
在一個命令中同時編譯並執行生成的可執行檔案:
注意這一次並沒有出現表明 Cargo 正在編譯 hello_cargo
的輸出。Cargo 發現檔案並沒有被改變,就直接執行了二進位制檔案。如果修改了原始檔的話,Cargo 會在執行之前重新構建專案,並會出現像這樣的輸出:
cargo check 該命令可以快速檢查程式碼確保其可以進行編譯,但是不產生可執行檔案。
為什麼你會不需要可執行檔案呢?
通常 cargo check
要比 cargo build
快得多,因為它省略了生成可執行檔案的步驟。如果你在編寫程式碼時持續的進行檢查,cargo check
會加速開發!為此很多 Rustaceans 編寫程式碼時定期執行 cargo check
確保它們可以編譯。當準備好使用可執行檔案時才執行 cargo build
。
當專案最終準備好釋出時,可以使用 cargo build --release
來優化編譯專案。這會在 target/release 而不是 target/debug 下生成可執行檔案。這些優化可以讓 Rust 程式碼執行的更快,不過啟用這些優化也需要消耗更長的編譯時間。這也就是為什麼會有兩種不同的設定:一種是為了開發,你需要經常快速重新構建;
另一種是為使用者構建最終程式,它們不會經常重新構建,並且希望程式執行得越快越好。
如果你在測試程式碼的執行時間,請確保執行 cargo build --release
並使用 target/release 下的可執行檔案進行測試。
對於簡單專案, Cargo 並不比 rustc
提供了更多的優勢,不過隨著開發的深入,其優勢會越來越大。對於擁有多個 crate 的複雜專案,交給 Cargo 來協調構建將簡單的多。
所以我們在開發過程中要將 Cargo 當做習慣。