OS: Windows 10
Editor: Visual Studio Code
Rust version: 1.63.0
不知不覺今年是參加鐵人賽已經第三年了,當初是我朋友邀請我的,但今年好像只剩我一個人了...
一個人也沒關係!今年決定來學一門新語言 - Rust,從18年開始看著他日漸成熟,是時候再來會會它了。
我使用的是Windows系統,所以進入官網點選立即開始之後,就會導到Windows版本的頁面。
依據你作業系統的位元,跟著他的指示,就安裝完畢了!裝完之後,下指令看是不是安裝完成,選擇預設的情況會把套件路徑設置到你的PATH
環境變數裡。
打開CMD輸入:
rustc --version
查看是否安裝成功。
然後根據使用的Editor安裝建議的Plugin,我使用的是VS Code,連結的話在上面官網-立即開始的其他工具。
接下來就可以開始所有程式語言的第一堂課 - Hello, World! 了。
cargo是rust的專案管理與套件管理器,輸入:
cago new [project-name]
就可以新增專案了。
用官網給出的範例:
cago new hello-rust
就快速把一個Hello, World!
的範例建立出來了。
由於有裝git
,下cargo new
的時候也把git
跟.gitignore
初始化了。
還有一個Cargo.toml
的文件,這個就是管理套件和專案的config文件了。
然後再來就是建置了,官方給的教學是
cargo run
這表示了編譯跟執行,如果只是要編譯的話:
cargo build
之後就會再專案資料夾裡看到target
的資料夾,裡面放的是執行檔跟編譯期間的中間文件,還有一個Cargo.lock
的文件,這個下面會解釋。
再接著,如果要把build target
清除的話,下:
cargo clean
上面說到,編譯的時候產生了一個Cargo.lock
的文件,這裡就用官網最後的一個範例做解釋。
跟著說明把ferris-says
這個第三方套件加到我們的Cargo.toml
裡面
會長這樣
[package]
name = "hello-rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
ferris-says = "0.2"
然後再到main.rs
加入
use ferris_says::say;
表示引用這個module,然後編譯,就可以看到Cargo.lock
多了很多東西,下面是我的環境下產生的:
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "basic"
version = "0.1.0"
dependencies = [
"ferris-says",
]
[[package]]
name = "ferris-says"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9515ec2dd9606ec230f6b2d1f25fd9e808a2f2af600143f7efe7e5865505b7aa"
dependencies = [
"smallvec",
"textwrap",
"unicode-width",
]
[[package]]
name = "smallvec"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
[[package]]
name = "smawk"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f67ad224767faa3c7d8b6d91985b78e70a1324408abcb1cfcc2be4c06bc06043"
[[package]]
name = "textwrap"
version = "0.13.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd05616119e612a8041ef58f2b578906cc2531a6069047ae092cfb86a325d835"
dependencies = [
"smawk",
"unicode-width",
]
[[package]]
name = "unicode-width"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3ed742d4ea2bd1176e236172c8429aaf54486e7ac098db29ffe6529e0ce50973"
這些是ferris-says
引用的套件,他會如大多的套件管理器一樣,把有用到的相依套件下載下來。
下面是完整範例:
use ferris_says::say; // from the previous step
use std::io::{stdout, BufWriter};
fn main() {
let stdout = stdout();
let message = String::from("Hello fellow Rustaceans!");
let width = message.chars().count();
let mut writer = BufWriter::new(stdout.lock());
say(message.as_bytes(), width, &mut writer).unwrap();
}
編譯之後,可以得到一個更酷炫的Hello, World!
最後,可以到ferris-says
的Cargo.toml
比對看看,確實我們的Hello, World!
範例增加了這些套件。