0. Rust的源文件
像c語言的源文件我們以".c"為后綴,c++以".cpp"為后綴,java以".java"為后綴。Rust的源文件也不例外,它們總是以".rs"為后綴名。和Java的多個單詞用駝峰命名規(guī)則不同,Rust語言多個單詞我們通常用下劃線進(jìn)行連接(hello_world.rs)。
1. Hello world!
我們學(xué)習(xí)任何語言,都是從Hello world開始的。當(dāng)然我們學(xué)習(xí)Rust也不例外。
首先執(zhí)行以下命令:
$ cd ~
$ mkdir hello_world
$ cd hello_world
我們在用戶跟目錄下創(chuàng)建了 hello_world 文件夾,緊接著我們進(jìn)入到我們創(chuàng)建的文件夾目錄中,接下來我們來創(chuàng)建一個 main.rs 源文件,內(nèi)容為:
fn main() {
println!("Hello world!");
}
保存文件,只需要輸入如下命令:
$ rustc main.rs
$ ./main
Hello world!
我們就可以在命令行窗口內(nèi)看到我們輸出的 Hello world!字符串了。
2.來看看我們具體都做了哪些事情
fn main() {
}
這幾行代碼定義了一個Rust函數(shù)。和其他語言一樣,Rust也是以main函數(shù)為程序的入口。
在main函數(shù)中:
println!("Hello world!");
這里和我在學(xué)習(xí)c語言和Java編程語言時不太一樣,在c語言中,我們的hello world程序首先要引入相關(guān)的頭文件。
#include <stdio.h>
之后,我們在程序中調(diào)用:
printf("Hello world!\n");
但是在我們剛才編寫的Rust代碼中,細(xì)心的同學(xué)可以發(fā)現(xiàn),在 "println"之后有一個 "!"。這其實是一個Rust宏,現(xiàn)在我們只需要記住,在Rust代碼中我們見到"!"的時候,就代表調(diào)用了一個宏而不是一個普通函數(shù)。
和Java、c語言一樣,Rust代碼以 ";"作為語句結(jié)束。
3. 編譯和運行
在運行一個Rust程序之前,我們必須編譯它。可以輸入 rustc 命令來使用Rust編譯器
$ rustc main.rs
在執(zhí)行完這一步后,我們用 ls 命令可以發(fā)現(xiàn):
$ ls
main main.rs
其中main文件就是我們編譯后的可執(zhí)行文件了。這個時候,我們使用命令:
$ ./main
就可以讓我們的程序運行起來。
Rust 是一種 預(yù)編譯語言(ahead-of-time compiled language),程序編譯好后,把它給任何人,他們都不需要安裝 Rust 就可運行。
4. Cargo
Cargo 是 Rust 的構(gòu)建系統(tǒng)和包管理工具,它負(fù)責(zé)三個工作:
- 構(gòu)建代碼
- 下載依賴庫
- 編譯代碼
絕大部分 Rust 項目使用 Cargo,我們可以使用命令:
$ cargo --version
來檢查Cargo的安裝配置情況,如果你是使用Rust官方安裝包的話,Rust自帶了Cargo。
使用Cargo構(gòu)建一個項目通常需要做三件事:
- 將源文件放到正確的目錄
- 刪除舊的可執(zhí)行文件
- 創(chuàng)建一個Cargo配置文件
回到我們的 hello_world 目錄
$ mkdir src
$ mv main.rs src/main.rs
$ rm main
在 hello_world 目錄下創(chuàng)建一個 Cargo.toml 文件(大小寫敏感,否則Cargo識別不到)。這個文件使用TOML(Tom's Obvious, Minimal Language)格式。 TOML 類似于 INI,不過有一些額外的改進(jìn)之處,并且被用作 Cargo 的配置文件。配置內(nèi)容如下:
[package]
name = "hello world"
version = "0.0.1"
authors = ["your name"]
第一行的[package]表明下面的語句用來配置一個包。隨著我們在這個文件增加更多的信息,我們會增加其他部分,不過現(xiàn)在,我們只有包配置。
另外三行設(shè)置了 Cargo 編譯你的程序所需要知道的三個配置:包的名字,版本,和作者。
Ok,保存完成后,我們執(zhí)行以下命令:
$ cargo build
Compiling hello_world v0.0.1 (file:///Users/zhaoliangtai/rust_projects/hello_world)
$ ./target/debug/hello_world
Hello world!
執(zhí)行完成后我們可以看到,我們程序已經(jīng)運行起來了。和Android開發(fā)者在使用gradle的時候類似,默認(rèn)為我們生成了debug程序。當(dāng)然我們也可以使用命令:
$ cargo run
來直接構(gòu)建、編譯、運行我們的程序。
Cargo 檢查任何項目文件是否被修改,并且只會在你上次構(gòu)建后修改了他們才重新構(gòu)建。
我們也可以使用:
$ cargo build --release
來優(yōu)化編譯項目,這些優(yōu)化可以讓 Rust 代碼運行的更快,不過啟用他們會讓程序花更長的時間編譯。這也是為何這是兩種不同的配置,一個為了開發(fā),另一個構(gòu)建提供給用戶的最終程序(和gradle很像)。
5. Cargo.lock是什么?
細(xì)心的同學(xué)可能發(fā)現(xiàn)了,在我們配置完配置文件并執(zhí)行Cargo命令后,在我們的項目根目錄下多了一個 "Cargo.lock" 文件
[[package]]
name = "hello_world"
version = "0.0.1"
Cargo 用Cargo.lock文件跟蹤你程序的依賴。這里是 Hello World 項目的Cargo.lock文件。這個項目并沒有依賴,所以內(nèi)容有一點稀少。
6. 創(chuàng)建新Cargo項目的簡單方法
$ cargo new hello_world --bin
這個命令傳遞了--bin參數(shù)因為我們的目標(biāo)是直接創(chuàng)建一個可執(zhí)行程序,而不是一個庫。可執(zhí)行文件通常叫做二進(jìn)制文件(因為它們位于/usr/bin,如果你使用 Unix 系統(tǒng)的話)。