Rust語言的新手了解和學(xué)習(xí)入門啟蒙教程
一、前言
近些年來不斷有新的語言崛起,比如當(dāng)下非?;鸬膅o語言,不過相比于C++,go語言確實(shí)是非常簡單的。
而rust
作為一名新興語言,與go又有些許不同,因?yàn)樗哪繕?biāo)是對標(biāo)系統(tǒng)級開發(fā),也就是試圖動(dòng)搖C、C++這兩位縱橫編程界數(shù)十年的老大哥位置。
比如我們最常用的windows
系統(tǒng),就是用C/C++語言開發(fā)的,也正因如此,我們才能用C++在VS中非常方便的調(diào)用win API函數(shù)。
而同樣的,越是涉及到底層,需要控制的細(xì)節(jié)就會(huì)越多,即使是這位試圖通過簡便語法、便利包管理、安全可靠等良好特性脫穎而出的rust語言,也同樣不例外。
目前來看,rust語言最大的缺陷是誕生時(shí)間太短,生態(tài)還不夠完善。
比如當(dāng)你想要用rust寫GUI程序,就很麻煩,因?yàn)楣俜侥壳斑€沒有推出GUI庫。
但這并非是無法解決的,rust同樣意識到了這個(gè)問題,所以它提供了簡便的方式讓你可以直接在代碼中調(diào)用C語言開發(fā)的庫。
這意味著只要是用C語言開發(fā)的庫,你就能用rust語言調(diào)用它進(jìn)行開發(fā)!
比如你可以使用rust綁定C開發(fā)的FLTK、GTK等GUI庫就可以進(jìn)行開發(fā)GUI程序了,當(dāng)然也有正在發(fā)展的庫,比如egui、iced、tauri等等。
個(gè)人目前最推薦的是Tauri,不過前提是你需要會(huì)web前端:初識Tauri。
而rust帶來的代碼安全、便捷的開發(fā)又是C語言所無法比擬的,所以我預(yù)測要不了多少年,隨著Rust生態(tài)的不斷完善,會(huì)取代很大一部分C/C++的份額。
不過想要徹底將C/C++取代,短時(shí)間內(nèi)還是有點(diǎn)不現(xiàn)實(shí)的,比如windows
、linux
、mac
三大操作系統(tǒng)以及各種C/C++開源庫的代碼量是一個(gè)非常恐怖的數(shù)字,想要徹底替換,絕非一朝一夕之功。
同時(shí)需要注意:學(xué)習(xí)rust前,你最好對C/C++語言有一定的了解,否則rust里面的很多概念你都可能無法理解。
對于剛剛?cè)腴T編程的同學(xué),我依舊建議你先學(xué)C/C++語言,學(xué)成之后再來學(xué)rust:初識C++。
二、Rust簡介
參考百度百科:
Rust語言在2006年作為 Mozilla 員工 Graydon Hoare 的私人項(xiàng)目出現(xiàn),而 Mozilla 于 2009 年開始贊助這個(gè)項(xiàng)目。第一個(gè)有版本號的 Rust 編譯器于2012 年 1 月發(fā)布。Rust 1.0 是第一個(gè)穩(wěn)定版本,于 2015年5月15日發(fā)布。
可以看到,Rust是2015才對外開放穩(wěn)定版本的,距今不到10年,根據(jù)目前程序員對Rust這門語言的普遍評價(jià)來說,現(xiàn)在學(xué)習(xí)Rust,還有機(jī)會(huì)享受到這門語言在不久的將來可能會(huì)帶來的福利。
事實(shí)上現(xiàn)在在國內(nèi)的招聘市場上,與rust語言相關(guān)的崗位已經(jīng)開始變多了。
那么具體來說,Rust
能為開發(fā)人員帶來哪些便利呢?
主要有以下幾點(diǎn):
內(nèi)存安全:
Rust 中的所有內(nèi)存訪問都經(jīng)過了編譯器的嚴(yán)格檢查,并且在運(yùn)行時(shí)不會(huì)出現(xiàn)空指針異?;驍?shù)據(jù)競爭等問題。這意味著 Rust代碼具有更高的可靠性和安全性,可以避免常見的安全漏洞。
而C/C++中則時(shí)常需要擔(dān)心指針、內(nèi)存問題,尤其是在大型項(xiàng)目中,非常容易因此出現(xiàn)各種各樣的Bug。
高效性能:
Rust具有與 C 和 C++ 相當(dāng)?shù)男阅埽⒉捎昧爽F(xiàn)代語言的特性和設(shè)計(jì)理念,如智能指針、閉包和模式匹配等。這使得 Rust很適合編寫高性能、低延遲的系統(tǒng)級應(yīng)用程序和庫。
并發(fā)性:
Rust的所有權(quán)系統(tǒng)和借用規(guī)則使其易于編寫線程安全的代碼,即使在多線程環(huán)境下也可以保持高效率和可靠性。C/C++中則完全需要自己進(jìn)行控制。
社區(qū)支持:
Rust擁有活躍的社區(qū),在crates上提供了許多開源庫、工具和框架,可以大幅度提升開發(fā)效率。
C/C++雖然學(xué)習(xí)的人很多,但卻幾乎沒有官方的、活躍的社區(qū)可以供大家交流,都是在各搞各的。
統(tǒng)一包管理
C/C++中,最讓人詬病的便是包管理了,想要用一個(gè)包,還需要自己下載、安裝、配置等等。
而Rust則直接提供了一個(gè)統(tǒng)一的包管理程序,只需要寫一行代碼,就能自動(dòng)為你下載配置好你所需要的一切,并且還提供對應(yīng)的文檔,使用起來非常方便!
綜上,你便能看出Rust的優(yōu)勢所在了。
Python語言之所以能火,有很多原因,而其中相當(dāng)大的一個(gè)原因就是Python有一個(gè)統(tǒng)一的包管理程序pip
,可以很方便的下載各種第三方包,而不需要像C/C++那樣自己配置。
而一旦學(xué)會(huì)了Rust,即使是作為較為底層的開發(fā)人員,我們同樣也能享受到這種便利了!
這是學(xué)習(xí)C/C++所無法想象的,雖然目前有一個(gè)vcpkg
包管理庫很不錯(cuò),但這畢竟不是標(biāo)準(zhǔn)委員會(huì)推出的,而是微軟帶頭組織的一個(gè)開源項(xiàng)目,如果不會(huì)科學(xué)上網(wǎng),中國幾乎也無法使用。
三、安裝Rust編譯器
與C/C++一樣,Rust也是一門編譯型語言,也就是說,Rust的代碼必須要先編譯成為二進(jìn)制程序之后才能運(yùn)行。
比如window
系統(tǒng)中我們最??吹降?code>.exe二進(jìn)制可執(zhí)行程序。
而python則是解釋性語言,無需編譯,只要有python的解釋器,就能一行一行的解釋代碼然后執(zhí)行,這同樣也是影響python運(yùn)行速度的一大原因。
一般在瀏覽器中直接搜索Rust
,出現(xiàn)的第一個(gè)就是Rust的官網(wǎng)了,不過我這里也還是放一下它的官網(wǎng)地址,可以直接點(diǎn)擊查看:Rust
然后點(diǎn)擊“馬上開始”:
之后就是下載Rust的安裝器,由于目前一般都是64位的電腦,所以選擇第二個(gè)即可:
下載后,點(diǎn)擊運(yùn)行這個(gè)程序,等待其安裝完畢。
由于我原本就安裝了VS2022
,所以它并沒有提示我安裝任何東西,如果你沒有安裝VS,則可能要你安裝上方提示的Microsoft C++生成工具,確認(rèn)安裝即可。
安裝完成后,運(yùn)行命令:cargo --version
能打印出版本則說明安裝成功了,不會(huì)進(jìn)入控制臺(tái)的可以參考文章:程序員必懂的常識
第一次使用你可能就會(huì)覺得有些疑惑,明明安裝的是Rust
,這里怎么是Cargo
命令呢?
這一點(diǎn)可以看官網(wǎng)說明:
簡單來說就是Cargo
是Rust語言的包管理軟件,后面我們開發(fā)Rust
時(shí),使用的也基本都是這個(gè)命令。
四、第一個(gè)Rust程序
我們可以通過命令cargo new projectName
來創(chuàng)建一個(gè)Rust項(xiàng)目。
比如運(yùn)行cargo new hello-world
:
然后它就會(huì)為我們在當(dāng)前目錄中生成一個(gè)項(xiàng)目文件夾:
這里簡單對其介紹一下:
.git
:這是一個(gè)隱藏文件夾,用于git
軟件實(shí)現(xiàn)版本管理,學(xué)習(xí)rust期間一般用不著,不用管。src
:這是存放代碼的地方,以后我們寫的rust代碼就放在這個(gè)文件夾里面。.gitignore
:這同樣是git使用的,用于忽略哪些類型文件,不進(jìn)行版本管理,一般同樣不用管Cargo.toml
:這個(gè)文件就很重要了,cargo
作為rust的包管理程序,就是通過這個(gè)文件知道你這個(gè)項(xiàng)目中需要哪些依賴庫的
注意:git
并不是rust
的一部分,而是一個(gè)所有語言通用的版本控制工具,比如知名的github
,便是用的git進(jìn)行版本管理,不會(huì)的可以參考git詳解。
用記事本打開Cargo.toml
,就能看到下面這樣的內(nèi)容:
對于你想要用到的庫,直接寫在[dependencies]
項(xiàng)的下面即可,后面我會(huì)再對其進(jìn)行詳細(xì)介紹。
然后來到src
這個(gè)存放rust代碼的目錄里面:
這里面默認(rèn)有一個(gè)main.rs
文件,其中后綴.rs
便是rust
的簡寫,這個(gè)文件是rust
項(xiàng)目中不可或缺的,因?yàn)樗鼘⒆鳛檎麄€(gè)項(xiàng)目的入口文件。
注意:不可更改這個(gè)文件的名稱!否則后面的編譯將會(huì)直接失?。?/p>
同樣的,我們?nèi)匀豢梢杂糜浭卤敬蜷_它:
這里寫的是一個(gè)函數(shù):
fn
:rust中的關(guān)鍵字,即為function
的簡寫,代表后面跟著的是一個(gè)函數(shù)。main
: 這個(gè)函數(shù)的名稱,這里不可更改!因?yàn)檫@是程序的入口函數(shù),程序?qū)倪@個(gè)函數(shù)開始順序執(zhí)行內(nèi)部的代碼。()
:與前面的函數(shù)名、fn
關(guān)鍵字、后面緊跟的{}
組成一個(gè)完整的函數(shù)簽名,最簡單的函數(shù)就是:fn name(){}
{}
:函數(shù)體,即這個(gè)函數(shù)要執(zhí)行的代碼,比如這里填寫的是println!("Hello, world!");
,就是說要打印出 “hello world”
這個(gè)字符串。
println!
是一個(gè)rust
中的宏,用于簡化我們輸出一個(gè)字符串到控制臺(tái)的步驟。
如果你學(xué)過C/C++、python、java等等其它語言,前期學(xué)習(xí)過程中可以直接把它當(dāng)作一個(gè)print
函數(shù)即可,只是要注意它的后面先有一個(gè)!
、然后才是()
。
這里同時(shí)要注意,每一個(gè)語句的結(jié)尾用的英文符號;
,不用則會(huì)報(bào)錯(cuò),這一點(diǎn)和C/C++保持一致。
現(xiàn)在回到控制臺(tái),進(jìn)入這個(gè)文件夾,然后來運(yùn)行這段代碼試一試,運(yùn)行代碼的命令為cargo run
:
然后就可以看到它成功運(yùn)行并打印出了Hello World!
字符串。
如果你學(xué)過C/C++,會(huì)發(fā)現(xiàn)到目前為止,rust
比C/C++
會(huì)稍稍復(fù)雜一點(diǎn),畢竟C/C++
只需要一個(gè)源代碼文件就能輸出hello world
了,而rust
卻一上來就給我們生成了這么多文件。
但很快你就會(huì)發(fā)現(xiàn)rust這樣做的好處,尤其是在后面開發(fā)項(xiàng)目時(shí)。
前面我們說了,rust是一個(gè)編譯型的語言,所以會(huì)編譯成二進(jìn)制后才能運(yùn)行,我們可以在下面的目錄中找到這個(gè)生成的exe
程序:
不過直接點(diǎn)擊它運(yùn)行是不行的,因?yàn)榍懊娴拇a中我們只寫了一個(gè)打印字符串的代碼,打印完程序就結(jié)束了,所以你只能看到一個(gè)黑影閃過,后面我們會(huì)想辦法解決這個(gè)問題。
上面提到的這個(gè)cargo run
命令即為編譯并運(yùn)行當(dāng)前項(xiàng)目的意思,可如果我只想編譯,不運(yùn)行呢?
那就可以使用命令cargo build
,其默認(rèn)構(gòu)建的是Debug
版本,即可調(diào)試版本,直觀的來說就是生成的exe
程序會(huì)稍微比較大。
我們也可以構(gòu)建Release
版本,使用命令:cargo build --release
,直觀來說,這個(gè)命令生成的可執(zhí)行文件會(huì)較小:
如果你還是覺得它比較大,那么我們還可以使用一些工具來進(jìn)一步壓縮它,可以讓它只有幾十kb
,有興趣的可以了解一下upx
工具。
五、 IDE環(huán)境
從上面我們可以看到,即使是只用記事本,也是可以開發(fā)的,但那實(shí)在是太麻煩了,所以我們需要一個(gè)IDE環(huán)境,就像VS那樣,有代碼提示,可以極大提高我們的開發(fā)效率。
個(gè)人推薦VSCode
這款編輯器,它也是目前最受歡迎的一個(gè)編輯器。
可以通過以下鏈接進(jìn)行前往官網(wǎng)下載:vs code
可以選擇自己合適的版本下載安裝即可,上圖箭頭指示的是我安裝的版本:x64 系統(tǒng)安裝
但其實(shí)各個(gè)版本區(qū)別不大,看自己的喜好了。
注意:下載安裝完成后, 可能需要重啟一下電腦才能繼續(xù)進(jìn)行下面的步驟。
在控制臺(tái)中進(jìn)入這個(gè)文件夾,然后輸入:code .
這個(gè)code命令是vs code
提供的命令,用于讓VSCode這個(gè)軟件打開一個(gè)文件夾。
而后面緊跟的 .
,指代的就是當(dāng)前目錄,意思就是用VScode打開當(dāng)前目錄,目錄相關(guān)介紹可以參考文章:路徑詳解
然后你就能看到這個(gè)rust項(xiàng)目項(xiàng)目文件夾在VSCode中被打開了:
但VScode只是一個(gè)編輯器,所以我們還需要安裝rust插件,來打造這個(gè)編輯器成為一個(gè)IDE,方法也很簡單。
點(diǎn)擊左邊的插件選項(xiàng),然后在上面輸入rust進(jìn)行搜索,然后安裝rust-analyzer
即可:
這樣就完成了rust的開發(fā)環(huán)境的配置,現(xiàn)在當(dāng)你輸出前幾個(gè)字符時(shí),就會(huì)自動(dòng)彈出代碼提示:
這時(shí),你只需要按Enter
鍵就可以自動(dòng)幫你填充代碼。
并且運(yùn)行代碼的方式也變簡單了,只需要點(diǎn)擊main函數(shù)上面的按鈕,就可以直接運(yùn)行:
同時(shí)你也可以直接點(diǎn)擊Debug
進(jìn)入調(diào)試狀態(tài):
不會(huì)調(diào)試的可以參考文章:調(diào)試。
六、初識包管理
配置好IDE后,我們再來試一下rust官網(wǎng)提供的一個(gè)示例,來看看rust的包管理有多好用。
比如我想要在終端打印出下面這個(gè)圖案:
這里就用到了ferris-says
這個(gè)庫,首先來到前面提到的Cargo.toml
文件,然后在[dependencies]
項(xiàng)添加一下這個(gè)庫:
后面的數(shù)字是這個(gè)庫的版本號,Ctrl+S
保存后,vscode就會(huì)自動(dòng)給我們拉取這個(gè)庫包到本地。
你可能也注意到了不知道什么時(shí)候,項(xiàng)目文件夾中多了一個(gè)Cargo.lock
文件。
這個(gè)文件用于記錄我們當(dāng)前項(xiàng)目用到的所有庫以及依賴,是由cargo自動(dòng)管理的,我們無需操心。
現(xiàn)在來到代碼中,讓我們來使用一下這個(gè)庫
use ferris_says::say; // from the previous step use std::io::{stdout, BufWriter}; fn main() { let stdout = stdout(); let message = String::from("Hello https://www.kucoding.com"); let width = message.chars().count(); let mut writer = BufWriter::new(stdout.lock()); say(message.as_bytes(), width, &mut writer).unwrap(); }
第一次看上去,你可能會(huì)感覺怎么有點(diǎn)復(fù)雜?。?/p>
因?yàn)檫@一小段代碼就涉及到了rust中相當(dāng)多的概念,所以我暫時(shí)并不會(huì)講解這段代碼的邏輯,你可以自己隨意更改這段代碼里面的字符串:"Hello https://www.kucoding.com"
然后運(yùn)行上面這段代碼,就能在終端看到輸出的圖案了。
而這個(gè)庫的下載安裝位置默認(rèn)為當(dāng)前用戶文件夾的.Cargo
文件夾中
至于庫代碼上層的這個(gè)文件夾,則是代表著倉庫名,你的可能是github
之類的,這個(gè)不一定相同。
七、總結(jié)
主要介紹了rust的特點(diǎn)、安裝、項(xiàng)目結(jié)構(gòu)、IDE環(huán)境配置、代碼運(yùn)行。
主要有以下幾個(gè)命令需要稍微記憶一下:
cargo new
:新建一個(gè)rust項(xiàng)目cargo run
:直接運(yùn)行代碼cargo build
:只編譯代碼,不運(yùn)行,默認(rèn)編譯的為debug
版本cargo build --release
:編譯為release
版本
同時(shí)還可以使用upx工具減小最終編譯程序的體積。
到此這篇關(guān)于Rust語言的新手了解和學(xué)習(xí)入門啟蒙教程的文章就介紹到這了,更多相關(guān)Rust語言入門教程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
vscode搭建rust開發(fā)環(huán)境的圖文教程
本文主要介紹了vscode搭建rust開發(fā)環(huán)境的圖文教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08Rust用宏實(shí)現(xiàn)參數(shù)可變的函數(shù)的實(shí)現(xiàn)示例
本文主要介紹了Rust用宏實(shí)現(xiàn)參數(shù)可變的函數(shù)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03