【Rust】從零開始的rust學習嗷

Rust

  • Rust是什么?
  • 安裝rust
    • 在Linux或者Mac OS:
    • 在Windows:
    • 更新與卸載
  • rust起步
    • 寫我們的第一個程序,hello world
    • cargo
      • 使用cargo創建項目
      • cargo基本命令

才來實習,由于部門使用的SDK是rust語言,所以先淺淺進行rust學習與記錄。

Rust是什么?

Rust 程序設計語言的本質實際在于 賦能(empowerment):無論你現在編寫的是何種代碼,Rust 能讓你在更為廣泛的編程領域走得更遠,寫出自信。(這一點并不顯而易見)
舉例來說,那些“系統層面”的工作涉及內存管理、數據表示和并發等底層細節。從傳統角度來看,這是一個神秘的編程領域,只為浸潤多年的極少數人所觸及,也只有他們能避開那些臭名昭著的陷阱。即使謹慎的實踐者,亦唯恐代碼出現漏洞、崩潰或損壞。
Rust 破除了這些障礙:它消除了舊的陷阱,并提供了伴你一路同行的友好、精良的工具。 想要 “深入” 底層控制的程序員可以使用 Rust,無需時刻擔心出現崩潰或安全漏洞,也無需因為工具鏈不靠譜而被迫去了解其中的細節。更妙的是,語言設計本身會自然而然地引導你編寫出可靠的代碼,并且運行速度和內存使用上都十分高效。
已經在從事編寫底層代碼的程序員可以使用 Rust 來提升信心。例如,在 Rust 中引入并行是相對低風險的操作,因為編譯器會替你找到經典的錯誤。同時你可以自信地采取更加激進的優化,而不會意外引入崩潰或漏洞。
但 Rust 并不局限于底層系統編程。它表達力強、寫起來舒適,讓人能夠輕松地編寫出命令行應用、網絡服務器等各種類型的代碼——在本書中就有這兩者的簡單示例。使用 Rust 能讓你把在一個領域中學習的技能延伸到另一個領域:你可以通過編寫網頁應用來學習 Rust,接著將同樣的技能應用到你的 Raspberry Pi(樹莓派)上。
本書全面介紹了 Rust 為用戶賦予的能力。其內容平易近人,致力于幫助你提升 Rust 的知識,并且提升你作為程序員整體的理解與自信。歡迎你加入 Rust 社區,讓我們準備深入學習 Rust 吧!
—— Nicholas Matsakis 和 Aaron Turon

rust相比起C/C++等傳統語言,擁有著卓越的、天生的內存安全性。相對于C#等帶有垃圾回收機制的語言來講,它遵循了零開銷抽象(Zero-Cost Abstraction)規則,并為開發者保留了最大的底層控制能力。rust是一種專注于安全、并發和性能的系統級編程語言。

安裝rust

本地安裝與文檔

在Linux或者Mac OS:

curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh

如果是安裝成功,會顯示信息:

Rust is installed now. Great!

另外,你還需要一個 鏈接器(linker),這是 Rust 用來將其編譯的輸出連接到一個文件中的程序。很可能你已經有一個了。如果你遇到了鏈接器錯誤,請嘗試安裝一個 C 編譯器,它通常包括一個鏈接器。C 編譯器也很有用,因為一些常見的 Rust 包依賴于 C 代碼,因此需要安裝一個 C 編譯器。
在 macOS 上,你可以通過運行以下命令獲得 C 語言編譯器:

xcode-select --install

直接復制輸入就好了。

在Windows:

在 Windows 上,前往 官方教程并按照說明安裝 Rust。

要獲取構建工具,你需要安裝 Visual Studio 2022。當被問及需要安裝什么工作負載(Workload)的時候,請確保勾選了以下內容:
“使用 C++ 的桌面開發”(“Desktop Development with C++”)
Windows 10(或 11)SDK
英語語言包,以及其他你所需要的語言包

檢驗一下:

rustc --version

當版本號顯示出來,就代表你成功了。

更新與卸載

rustup update

一行搞定更新。

rustup self uninstall

一行搞定卸載。

如果你需要查看文檔,就執行下面這一行在瀏覽器打開

rustup self uninstall

rust起步

寫我們的第一個程序,hello world

(這里是對于Linux、macOS 和 Windows PowerShell的命令,后面的部分也都默認是在這幾類而不是Windows CMD,后續就不再說明了)

mkdir ~/projects	#在home目錄建一個projects目錄(文件夾)
cd ~/projects	#進入projects
mkdir hello_world	#在projects建一個hello_world目錄(文件夾)
cd hello_world	#進入hello_world

接下來在hello_world目錄內創建一個源文件,命名為 main.rs。Rust 源文件總是以 .rs 擴展名結尾。如果文件名包含多個單詞,那么按照命名習慣,應當使用下劃線來分隔單詞。例如命名為 hello_world.rs,而不是 helloworld.rs。

  • 創建源文件:
touch main.rs

進入文本編輯:

vim main.rs

按a進入插入模式,然后把我們的源代碼放進去:

fn main() {println!("Hello, world!");
}

然后Ctrl + X完成保存,再按ESC退出插入模式。
最后進行保存:

:wq #按冒號+wq,進行修改后保存
#如果是未進行過修改直接退出,那就是:q

接下來對這個main.rs進行編譯和運行

rustc main.rs
./main

輸入上面兩行,如果出現了"Hello,world!",那么恭喜你,已經成功走進了rust的大門!

語法其實對于有基礎的同學來說,看起來也很熟悉。
不過要注意:

  • 這里的print是帶的,這種實際上是rust的宏,并不是調用函數哦, println()才是函數。
  • 注意rust使用四個空格作為縮進而不是制表符tab

cargo

如果使用前面部分介紹的官方安裝包的話,則自帶了 Cargo。如果通過其他方式安裝的話,可以在終端輸入如下命令檢查是否安裝了 Cargo:

cargo --version

能顯示版本號證明已經安裝。

使用cargo創建項目

  1. 回到 projects 目錄
  2. 創建目錄與項目并進入(cd)
cargo new hello_cargo
cd hello_cargo
  1. 請自行選用文本編輯器打開 Cargo.toml 文件。它應該看起來如下所示:
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html[dependencies]

這個文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,這是 Cargo 配置文件的格式。

第一行,[package],是一個片段(section)標題,表明下面的語句用來配置一個包。隨著我們在這個文件增加更多的信息,還將增加其他片段(section)。

接下來的三行設置了 Cargo 編譯程序所需的配置:項目的名稱、項目的版本以及要使用的 Rust 版本。附錄 E 會介紹 edition 的值。

最后一行,[dependencies],是羅列項目依賴的片段的開始。在 Rust 中,代碼包被稱為 crates。這個項目并不需要其他的 crate,不過在第二章的第一個項目會用到依賴,那時會用得上這個片段。

現在打開 src/main.rs 看看:

文件名:src/main.rs

fn main() {println!("Hello, world!");
}

Cargo 為你生成了一個 “Hello, world!” 程序,正如我們之前編寫的示例 1-1!目前為止,我們的項目與 Cargo 生成項目的區別是 Cargo 將代碼放在 src 目錄,同時項目根目錄包含一個 Cargo.toml 配置文件。

Cargo 期望源文件存放在 src 目錄中。項目根目錄只存放 README、license 信息、配置文件和其他跟代碼無關的文件。使用 Cargo 幫助你保持項目干凈整潔,一切井井有條。

如果沒有使用 Cargo 開始項目,比如我們創建的 Hello,world! 項目,可以將其轉化為一個 Cargo 項目。將代碼放入 src 目錄,并創建一個合適的 Cargo.toml 文件。

cargo基本命令

  1. 編譯并執行
cargo run    #編譯形成可執行文件并運行
  1. 如果是只編譯
cargo build

由于默認的構建方法是調試構建(debug build),Cargo 會將可執行文件放在名為 debug 的目錄中。

所以要執行的話

./target/debug/hello_cargo

選擇執行正確的路徑下的文件就好,到這里的效果就相當于cargo run了。

所以平時沒有特殊需求,就直接cargo run

  1. 不編譯但確認可編譯
cargo check

check的意義是讓你確認你編寫的代碼沒有語法上的錯誤,平時就check檢錯,當你真正要執行代碼的時候,再build或者run就好。

當項目最終準備好發布時,可以使用 cargo build --release 來優化編譯項目。這會在 target/release 而不是 target/debug 下生成可執行文件。這些優化可以讓 Rust 代碼運行的更快,不過啟用這些優化也需要消耗更長的編譯時間。這也就是為什么會有兩種不同的配置:一種是為了開發,你需要經常快速重新構建;另一種是為用戶構建最終程序,它們不會經常重新構建,并且希望程序運行得越快越好。如果你在測試代碼的運行時間,請確保運行 cargo build --release 并使用 target/release 下的可執行文件進行測試。

其實,要在任何已存在的項目上工作時,可以使用如下命令通過 Git 檢出代碼,移動到該項目目錄并構建:

$ git clone example.org/someproject
$ cd someproject
$ cargo build

到這里,我們對rust的構建和運行已經了解了,可以開始我們的rust之路了。

摘選自:
Rust程序設計語言中文版

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/163188.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/163188.shtml
英文地址,請注明出處:http://en.pswp.cn/news/163188.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C/C++---------------LeetCode第1436. 旅行終點站

旅行的終點站 題目及要求哈希算法在main內使用 題目及要求 給你一份旅游線路圖,該線路圖中的旅行線路用數組 paths 表示,其中 paths[i] [cityAi, cityBi] 表示該線路將會從 cityAi 直接前往 cityBi 。請你找出這次旅行的終點站,即沒有任何可…

【SpringMVC】 參數傳遞

一.項目目錄 SpringBoot項目創建之后會生成很多目錄 刪除不需要的這四個文件/目錄 目錄 二.Spring MVC 和 MVC Spring MVC(Spring Web MVC) Spring Web MVC 是?個 Web 框架 MVC : Model View Controller 它是一種思想 , 它把一個項目分成了三個部分. View視圖層 界面顯示…

python+pytest接口自動化:token關聯登錄這樣做,阿里p8都直呼牛逼!!!

在PC端登錄公司的后臺管理系統或在手機上登錄某個APP時,經常會發現登錄成功后,返回參數中會包含token,它的值為一段較長的字符串,而后續去請求的請求頭中都需要帶上這個token作為參數,否則就提示需要先登錄。 這其實就…

如何在Linux系統上檢測GPU顯存和使用情況?

如何在Linux系統上檢測GPU顯存和使用情況? 在Linux系統上,你可以使用一些命令行工具來檢測GPU顯存和使用情況。以下是一些常用的方法: 1. 使用nvidia-smi(僅適用于NVIDIA GPU) 如果你使用的是NVIDIA的顯卡&#xff0…

【前端】vue3+ts+vite,el-table表格渲染記錄重復情況

給自己一個目標,然后堅持一段時間,總會有收獲和感悟! 在使用vue的過程中,總會遇到一些有疑問的地方,總結就能夠加深印象,下次再出現的時候也有個參考的地方。 目錄 一、常見屬性二、重復原因三、高階用法3.…

Claude 發布2.1 版本,重大升級更新來看看有什么新功能?

11 月 23 日消息,OpenAI 競爭對手 Anthropic 日前推出了 Claude 2.1 聊天機器人及對應同名 AI 模型Claude 2.1,本文將總結Claude 2.1的主要功能。 增強的處理能力 上下文處理量大幅提升:Claude 2.1 現在能處理高達 200K上下文標記&#xff…

2、單片機及開發板介紹

單片機介紹 單片機,英文Micro Controller Unit,簡稱:MCU 內部集成:CPU、RAM(隨機存儲器)、ROM(只讀存儲器)、定時器、中斷系統、通訊接口等 作用:信息采集(傳感器)、處理&#xff0…

uniapp 適配部分IPhone手機底部安全距離

部分 IOS 機型,比如 Iphone X 的屏幕底部有一條“小黑線”區域,uniapp 項目中我們可以使用CSS的 env(safe-area-inset-bottom) 語句來自適配 IOS 的底部安全區域高度,這個語句會返回該機型的底部安全區域高度(單位 px)…

ffmpeg播放器實戰(播放器流程)

1.流程圖 1.main窗口創建程序窗口 程序窗口構造函數執行下面內容 2.開啟播放 3.開啟解碼 4.開啟渲染 5.反饋給ui 本文福利, 免費領取C音視頻學習資料包學習路線大綱、技術視頻/代碼,內容包括(音視頻開發,面試題,FFmpeg…

Linux C++ 服務器端這條線怎么走?一年半能做出什么?

Linux C 服務器端這條線怎么走?一年半能做出什么? 既然你是在校學生,而且編程語言和數據結構的基礎還不錯,我認為應該在《操作系統》和《計算機體系結構》這兩門課上下功夫,然后才去讀編程方面的 APUE、UNP 等書。 最…

【深度學習】如何選擇神經網絡的超參數

1. 神經網絡的超參數分類 神經網路中的超參數主要包括: 1. 學習率 η 2. 正則化參數 λ 3. 神經網絡的層數 L 4. 每一個隱層中神經元的個數 j 5. 學習的回合數Epoch 6. 小批量數據 minibatch 的大小 7. 輸出神經元的編碼方式 8. 代價函數的選擇 9. 權重初始化的方法 …

C語言哈希查找

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> #define MAXKEY 1000 typedef struct Info_s {int num;char name[30];int age;char addr[30]; }Info_t, *pInfo_t; //哈希函數 int hash(char *key) {int h 0…

軟件測試之安全測試

軟件安全測試是指對軟件的安全性能和安全缺陷進行檢測和評估的過程&#xff0c;目的是保證軟件的安全性和穩定性&#xff0c;防止軟件受到惡意攻擊或者泄露敏感信息。 軟件安全測試要怎么測&#xff0c;主要取決于軟件的安全需求、風險和威脅。 在這我準備了一份軟件測試視頻…

C語言--給定一個數組,把第一項的值減去第二項的值,第二項的值減去第三項的值,第三項的值減去第四項的值,依次類推。放到一個新的數組中,并打印新的數組

一.題目描述&#xff1a; 給定一個數組&#xff0c;把第一項的值減去第二項的值&#xff0c;第二項的值減去第三項的值&#xff0c;第三項的值減去第四項的值&#xff0c;依次類推。放到一個新的數組中&#xff0c;并打印新的數組。 比如&#xff1a;輸入一個數組是5&#xff…

SA實戰 ·《SpringCloud Alibaba實戰》第14章-服務網關加餐:SpringCloud Gateway核心技術

大家好,我是冰河~~ 一不小心《SpringCloud Alibaba實戰》專欄都更新到第14章了,再不上車就跟不上了,小伙伴們快跟上啊! 在《SpringCloud Alibaba實戰》專欄前面的文章中,我們實現了用戶微服務、商品微服務和訂單微服務之間的遠程調用,并且實現了服務調用的負載均衡。也基…

Nginx結合cpolar實現內網穿透多個Windows Web站點端口

文章目錄 1. 下載windows版Nginx2. 配置Nginx3. 測試局域網訪問4. cpolar內網穿透5. 測試公網訪問6. 配置固定二級子域名7. 測試訪問公網固定二級子域名 1. 下載windows版Nginx 進入官方網站(http://nginx.org/en/download.html)下載windows版的nginx 下載好后解壓進入nginx目…

[autojs]利用console實現懸浮窗日志輸出

"ui"; ui.layout(<vertical><button id"autoFloatWindow" text"開啟懸浮窗" textSize"15sp" /><button id"autoService" text"開啟無障礙服務" textSize"15sp" /><button id"…

vue中怎么根據選擇的名稱 生成印章圖片

項目中需要根據選擇的印章名稱&#xff0c;動態生成印章 &#xff0c;印章下方顯示當前的日期 代碼如下 <template><div><label for"name">選擇名稱&#xff1a;</label><select id"name" v-model"selectedName">…

技術面時,一定要掌握這3個關鍵點

前言 現在有這么多優秀的測試工程師&#xff0c;大家都知道技術面試是不可避免的一個環節&#xff0c;一般技術面試官都會通過自己的方式去考察你的技術功底與基礎理論知識。 如果你參加過一些大廠面試&#xff0c;肯定會遇到一些這樣的問題&#xff1a; 1、看你項目都用到了…

機器學習/sklearn 筆記:K-means,kmeans++,MiniBatchKMeans

1 K-means介紹 1.0 方法介紹 KMeans算法通過嘗試將樣本分成n個方差相等的組來聚類&#xff0c;該算法要求指定群集的數量。它適用于大量樣本&#xff0c;并已在許多不同領域的廣泛應用領域中使用。KMeans算法將一組樣本分成不相交的簇&#xff0c;每個簇由簇中樣本的平均值描…