Rust 從入門到精通03-helloworld

2022-08-02 12:06:19

安裝完成 Rust 之後,我們可以編寫 Rust 的 Hello Word。這裡介紹兩種方式,一種是rust原生方式,一種是利用 cargo 工具(重要)

1、rustc 方式

1.1 建立專案目錄

rust 執行不關心程式碼存放的目錄,我們可以任意選擇一個合適的位置,建立一個目錄。

比如:我們建立一個目錄名稱為 rust_helloword

mkdir rust_helloword

1.2 編寫rust程式

rust 的原始檔字尾是 .rs 。所以我們在第一個建立的專案目錄下,建立一個 main.rs 檔案。

然後在 main.rs 檔案中寫入如下程式碼:

fn main(){
    println!("Hello World!");
}

1.3 編譯並執行 rust 程式

在建立的 main.rs 檔案目錄下,輸入如下命令:

①、編譯

rustc main.rs

執行之後,會在當前目錄下生成一個 main 的可執行檔案。

PS:windows 是生成 main.exe 可執行檔案;Linux/Mac 是生成 main 檔案。

②、執行

./main

執行之後會在視窗列印出 Hello World!

至此,我們完成了第一個 Rust 程式的編寫。

2、cargo方式

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 來啟動專案,會簡單很多。

2.1 檢查cargo安裝

注意:在安裝 rust 時,我們是安裝的 rustup,這會自動安裝 Cargo,所以我們這裡不介紹如何安裝 cargo。

cargo --version

出現如下介面:

分別是 cargo 【版本號】(【雜湊碼】 【釋出時間】)

2.2 建立專案

輸入如下命令:

cargo new hello_cargo

該命令會自動建立一個 hello_cargo 目錄,裡面包含兩個檔案和一個目錄:一個 Cargo.toml 檔案,一個 src 目錄,以及位於 src 目錄中的 main.rs 檔案。

2.3 檔案介紹

①、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 檔案。

2.4 構建並執行專案

①、構建專案

cargo bulid

這個命令會建立一個可執行檔案 target/debug/hello_cargo (在 Windows 上是 target\debug\hello_cargo.exe),而不是放在當前目錄下。

②、執行

執行執行上一步生成的可執行檔案即可。

如果一切順利,終端上應該會列印出 Hello, world!。首次執行 cargo build 時,也會使 Cargo 在專案根目錄建立一個新檔案:Cargo.lock。這個檔案記錄專案依賴的實際版本。這個專案並沒有依賴,所以其內容比較少。

原則上自己永遠也不需要碰這個檔案,讓 Cargo 處理它就行了。

2.5 cargo run

我們剛剛使用 cargo build 構建了專案,並使用 ./target/debug/hello_cargo 執行了程式,也可以使用 cargo run 在一個命令中同時編譯並執行生成的可執行檔案:

注意這一次並沒有出現表明 Cargo 正在編譯 hello_cargo 的輸出。Cargo 發現檔案並沒有被改變,就直接執行了二進位制檔案。如果修改了原始檔的話,Cargo 會在執行之前重新構建專案,並會出現像這樣的輸出:

2.6 cargo check

cargo check 該命令可以快速檢查程式碼確保其可以進行編譯,但是不產生可執行檔案。

為什麼你會不需要可執行檔案呢?

通常 cargo check 要比 cargo build 快得多,因為它省略了生成可執行檔案的步驟。如果你在編寫程式碼時持續的進行檢查,cargo check 會加速開發!為此很多 Rustaceans 編寫程式碼時定期執行 cargo check 確保它們可以編譯。當準備好使用可執行檔案時才執行 cargo build

2.7 釋出(release)構建

當專案最終準備好釋出時,可以使用 cargo build --release 來優化編譯專案。這會在 target/release 而不是 target/debug 下生成可執行檔案。這些優化可以讓 Rust 程式碼執行的更快,不過啟用這些優化也需要消耗更長的編譯時間。這也就是為什麼會有兩種不同的設定:一種是為了開發,你需要經常快速重新構建;

另一種是為使用者構建最終程式,它們不會經常重新構建,並且希望程式執行得越快越好。

如果你在測試程式碼的執行時間,請確保執行 cargo build --release 並使用 target/release 下的可執行檔案進行測試。

3、總結

對於簡單專案, Cargo 並不比 rustc 提供了更多的優勢,不過隨著開發的深入,其優勢會越來越大。對於擁有多個 crate 的複雜專案,交給 Cargo 來協調構建將簡單的多。

所以我們在開發過程中要將 Cargo 當做習慣。