Rust 從入門到精通03-helloworld

安裝完成 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 英文文檔://doc.rust-lang.org/cargo/

cargo中文文檔://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 當做習慣。