欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Rust語言的新手了解和學(xué)習(xí)入門啟蒙教程

 更新時(shí)間:2024年12月14日 14:46:23   作者:余識-  
這篇文章主要介紹了rust的特點(diǎn)、安裝、項(xiàng)目結(jié)構(gòu)、IDE環(huán)境配置、代碼運(yùn)行,講解了如何安裝Rust編譯器,創(chuàng)建和運(yùn)行第一個(gè)Rust程序,并對Rust語言的特點(diǎn)和優(yōu)勢作了說明,包括內(nèi)存安全、高效性能、并發(fā)性、社區(qū)支持和統(tǒng)一包管理等,是新手了解和學(xué)習(xí)Rust語言的啟蒙教程

一、前言

近些年來不斷有新的語言崛起,比如當(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í)的,比如windowslinux、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)擊“馬上開始”:

image-20231206193937035

之后就是下載Rust的安裝器,由于目前一般都是64位的電腦,所以選擇第二個(gè)即可:

image-20231206194027536

下載后,點(diǎn)擊運(yùn)行這個(gè)程序,等待其安裝完畢。

由于我原本就安裝了VS2022,所以它并沒有提示我安裝任何東西,如果你沒有安裝VS,則可能要你安裝上方提示的Microsoft C++生成工具,確認(rèn)安裝即可。

安裝完成后,運(yùn)行命令:cargo --version

image-20231206194112051

能打印出版本則說明安裝成功了,不會(huì)進(jìn)入控制臺(tái)的可以參考文章:程序員必懂的常識

第一次使用你可能就會(huì)覺得有些疑惑,明明安裝的是Rust,這里怎么是Cargo命令呢?

這一點(diǎn)可以看官網(wǎng)說明:

image-20231206194211413

簡單來說就是Cargo是Rust語言的包管理軟件,后面我們開發(fā)Rust時(shí),使用的也基本都是這個(gè)命令。

四、第一個(gè)Rust程序

我們可以通過命令cargo new projectName來創(chuàng)建一個(gè)Rust項(xiàng)目。

比如運(yùn)行cargo new hello-world

image-20231206194316435

然后它就會(huì)為我們在當(dāng)前目錄中生成一個(gè)項(xiàng)目文件夾:

image-20231206194354353

這里簡單對其介紹一下:

.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)容:

image-20231206194452154

對于你想要用到的庫,直接寫在[dependencies]項(xiàng)的下面即可,后面我會(huì)再對其進(jìn)行詳細(xì)介紹。

然后來到src這個(gè)存放rust代碼的目錄里面:

image-20231206194546688

這里面默認(rèn)有一個(gè)main.rs文件,其中后綴.rs便是rust的簡寫,這個(gè)文件是rust項(xiàng)目中不可或缺的,因?yàn)樗鼘⒆鳛檎麄€(gè)項(xiàng)目的入口文件。

注意:不可更改這個(gè)文件的名稱!否則后面的編譯將會(huì)直接失?。?/p>

同樣的,我們?nèi)匀豢梢杂糜浭卤敬蜷_它:

image-20231206194609879

這里寫的是一個(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

image-20231206194744354

然后就可以看到它成功運(yùn)行并打印出了Hello World!字符串。

如果你學(xué)過C/C++,會(huì)發(fā)現(xiàn)到目前為止,rustC/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程序:

image-20231206194829190

不過直接點(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ì)較小:

image-20231206195029894

如果你還是覺得它比較大,那么我們還可以使用一些工具來進(jìn)一步壓縮它,可以讓它只有幾十kb,有興趣的可以了解一下upx工具。

五、 IDE環(huán)境

從上面我們可以看到,即使是只用記事本,也是可以開發(fā)的,但那實(shí)在是太麻煩了,所以我們需要一個(gè)IDE環(huán)境,就像VS那樣,有代碼提示,可以極大提高我們的開發(fā)效率。

個(gè)人推薦VSCode這款編輯器,它也是目前最受歡迎的一個(gè)編輯器。

可以通過以下鏈接進(jìn)行前往官網(wǎng)下載:vs code

image-20231206195214739

可以選擇自己合適的版本下載安裝即可,上圖箭頭指示的是我安裝的版本:x64 系統(tǒng)安裝

但其實(shí)各個(gè)版本區(qū)別不大,看自己的喜好了。

注意:下載安裝完成后, 可能需要重啟一下電腦才能繼續(xù)進(jìn)行下面的步驟。

在控制臺(tái)中進(jìn)入這個(gè)文件夾,然后輸入:code .

image-20231206195258082

這個(gè)code命令是vs code提供的命令,用于讓VSCode這個(gè)軟件打開一個(gè)文件夾。

而后面緊跟的 .,指代的就是當(dāng)前目錄,意思就是用VScode打開當(dāng)前目錄,目錄相關(guān)介紹可以參考文章:路徑詳解

然后你就能看到這個(gè)rust項(xiàng)目項(xiàng)目文件夾在VSCode中被打開了:

image-20231206195407399

但VScode只是一個(gè)編輯器,所以我們還需要安裝rust插件,來打造這個(gè)編輯器成為一個(gè)IDE,方法也很簡單。

點(diǎn)擊左邊的插件選項(xiàng),然后在上面輸入rust進(jìn)行搜索,然后安裝rust-analyzer即可:

image-20231206195605879

這樣就完成了rust的開發(fā)環(huán)境的配置,現(xiàn)在當(dāng)你輸出前幾個(gè)字符時(shí),就會(huì)自動(dòng)彈出代碼提示:

image-20231206195637196

這時(shí),你只需要按Enter鍵就可以自動(dòng)幫你填充代碼。

并且運(yùn)行代碼的方式也變簡單了,只需要點(diǎn)擊main函數(shù)上面的按鈕,就可以直接運(yùn)行:

image-20231206195752641

同時(shí)你也可以直接點(diǎn)擊Debug進(jìn)入調(diào)試狀態(tài):

image-20240218214704070

不會(huì)調(diào)試的可以參考文章:調(diào)試。

六、初識包管理

配置好IDE后,我們再來試一下rust官網(wǎng)提供的一個(gè)示例,來看看rust的包管理有多好用。

比如我想要在終端打印出下面這個(gè)圖案:

image-20231206200441060

這里就用到了ferris-says這個(gè)庫,首先來到前面提到的Cargo.toml文件,然后在[dependencies]項(xiàng)添加一下這個(gè)庫:

image-20231206200216706

后面的數(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文件夾中

image-20231206200659690

至于庫代碼上層的這個(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)文章

  • RUST語言函數(shù)的定義與調(diào)用方法

    RUST語言函數(shù)的定義與調(diào)用方法

    定義一個(gè)RUST函數(shù)使用fn關(guān)鍵字,下面通過本文給大家介紹RUST語言函數(shù)的定義與調(diào)用方法,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • rust?zip異步壓縮與解壓的代碼詳解

    rust?zip異步壓縮與解壓的代碼詳解

    在使用actix-web框架的時(shí)候,如果使用zip解壓任務(wù)將會(huì)占用一個(gè)工作線程,因?yàn)閦ip庫是同步阻塞的,想用異步非阻塞需要用另一個(gè)庫,下面介紹下rust?zip異步壓縮與解壓的示例,感興趣的朋友一起看看吧
    2024-04-04
  • 在Rust中編寫自定義Error的詳細(xì)代碼

    在Rust中編寫自定義Error的詳細(xì)代碼

    Result<T, E> 類型可以方便地用于錯(cuò)誤傳導(dǎo),Result<T, E>是模板類型,實(shí)例化后可以是各種類型,但 Rust 要求傳導(dǎo)的 Result 中的 E 是相同類型的,所以我們需要編寫自己的 Error 類型,本文給大家介紹了在Rust中編寫自定義Error的詳細(xì)代碼,需要的朋友可以參考下
    2024-01-01
  • rust引用和借用的使用小結(jié)

    rust引用和借用的使用小結(jié)

    在rust中,引用的語法非常簡單。通過&來取引用,通過*來解引用,這篇文章主要介紹了rust引用和借用的使用小結(jié),總的來說,借用規(guī)則,同一時(shí)刻,你只能擁有要么一個(gè)可變引用,?要么任意多個(gè)不可變引用,具體內(nèi)容詳情跟隨小編一起看看吧
    2023-01-01
  • rust類型轉(zhuǎn)換的實(shí)現(xiàn)

    rust類型轉(zhuǎn)換的實(shí)現(xiàn)

    Rust是類型安全的語言,因此在Rust中做類型轉(zhuǎn)換不是一件簡單的事,本文主要介紹了rust類型轉(zhuǎn)換的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • vscode搭建rust開發(fā)環(huán)境的圖文教程

    vscode搭建rust開發(fā)環(huán)境的圖文教程

    本文主要介紹了vscode搭建rust開發(fā)環(huán)境的圖文教程,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • Rust中泛型的學(xué)習(xí)筆記

    Rust中泛型的學(xué)習(xí)筆記

    在Rust語言中,泛型是一種強(qiáng)大的工具,它允許我們編寫可復(fù)用且靈活的代碼,本文主要介紹了Rust中泛型的學(xué)習(xí)筆記,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 詳解Rust中泛型的使用

    詳解Rust中泛型的使用

    泛型是一種在編寫代碼時(shí)不指定具體類型,而在使用時(shí)再確定類型的編程技巧,本文將詳細(xì)介紹?Rust?中泛型的相關(guān)概念和用法,希望對大家有所幫助
    2023-06-06
  • 如何使用Rust寫個(gè)猜數(shù)字游戲

    如何使用Rust寫個(gè)猜數(shù)字游戲

    這篇文章主要介紹了Rust寫個(gè)猜數(shù)字游戲,本項(xiàng)目通過動(dòng)手實(shí)踐,介紹了Rust新概念:let、match、函數(shù)、使用外部 crate 等,接下來的文章,你會(huì)繼續(xù)深入學(xué)習(xí)這些概念,并且介紹大部分編程語言都有的概念,如變量、數(shù)據(jù)類型和函數(shù),以及如何在 Rust 中使用它們,需要的朋友可以參考下
    2023-12-12
  • Rust用宏實(shí)現(xiàn)參數(shù)可變的函數(shù)的實(shí)現(xiàn)示例

    Rust用宏實(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

最新評論