【Rust開發】Rust快速入門,開發出Rust的第一個Hello World

在這里插入圖片描述

?? 歡迎大家來到景天科技苑??

🎈🎈 養成好習慣,先贊后看哦~🎈🎈

🏆 作者簡介:景天科技苑
🏆《頭銜》:大廠架構師,華為云開發者社區專家博主,阿里云開發者社區專家博主,CSDN全棧領域優質創作者,掘金優秀博主,51CTO博客專家等。
🏆《博客》:Python全棧,Golang開發,Rust開發,云原生開發,PyQt5和Tkinter桌面開發,小程序開發,人工智能,js逆向,App逆向,網絡系統安全,數據分析,Django,fastapi,flask等框架,云原生K8S,linux,shell腳本等實操經驗,網站搭建,數據庫等分享。

所屬的專欄:Rust語言通關之路
景天的主頁:景天科技苑

在這里插入圖片描述

文章目錄

  • Rust開發入門
    • 1、rust簡介
    • 2、安裝rust
    • 3、第一個HelloWorld
      • 3.1 創建項目目錄
      • 3.2 編寫并運行 Rust 程序
      • 3.3 分析 Rust 程序
    • 4、cargo
      • 4.1 使用 Cargo 創建項目
      • 4.2 構建并運行 Cargo 項目
      • 4.3 發布(release)構建
      • 4.4 把 Cargo 當作習慣
    • 5、總結

Rust開發入門

1、rust簡介

官網:https://www.rust-lang.org/
在這里插入圖片描述

Rust于2015年發布第一個穩定版本
連續四年stackoverflow的最受歡迎的語言
特點:
高性能,媲美C/C++,可以做嵌入式開發
沒有GC,同時也不需要手工管理內存(所有權機制)
沒有野指針,當多個指針指向同一個對象,當通過其中一個指針見將對象刪除時,剩余指向該對象的指針就成了野指針。就訪問不到對象了,再訪問就會報空指針錯誤
并發安全
集所有語言之大成者

2、安裝rust

直接官網下載
Windows版的,直接下載exe文件,雙擊按提示安裝
在這里插入圖片描述

linux版本的,直接執行一條命令安裝

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

這個命令下載一個腳本并開始 rustup 工具的安裝,這會安裝最新穩定版 Rust。過程中可能會提示你輸入密碼。如果安
裝成功,將會出現如下內容:
Rust is installed now. Great!
在這里插入圖片描述

當然,如果你不信任采用 curl URL | sh 來安裝軟件,請隨意下載、檢查和運行這個腳本。
此安裝腳本自動將 Rust 加入系統 PATH 環境變量中,在下一次登陸時生效。如果你希望立刻就開始使用 Rust 而不重啟
終端,在 shell 中運行如下命令手動將 Rust 加入系統 PATH 變量:

source $HOME/.cargo/env

檢查是否安裝成功

rustc --version

在這里插入圖片描述

另外,你需要一個某種類型的連接器(linker)。可能他們已經安裝了,不過當嘗試編譯 Rust 程序并得到表明連接器無
法執行的錯誤時,你需要自行安裝一個。可以安裝一個 C 編譯器,因為它通常帶有正確的連接器。查看對應平臺的文檔
了解如何安裝 C 編譯器。一些常見的 Rust 包會依賴 C 代碼并因此也會需要 C 編譯器,所以目前無論如何安裝它都是值
得的。

卸載 Rust
在任何時候如果您想卸載 Rust,您可以運行 rustup self uninstall。

3、第一個HelloWorld

現在安裝好了 Rust,讓我們來編寫第一個 Rust 程序。當學習一門新語言的時候,使用該語言在屏幕上打印 “Hello,world!” 是一項傳統,這里我們將遵循這個傳統!
創建項目目錄
首先以創建一個存放 Rust 代碼的目錄開始。Rust 并不關心代碼的位置,不過對于本書的練習和項目來說,我們建議你在
home 目錄中創建一個 projects 目錄,并將你的所有項目置于此處。

3.1 創建項目目錄

打開終端并輸入如下命令創建一個 projects 目錄并在 projects 目錄中為 “Hello, world!” 創建一個目錄。
對于 Linux 和 macOS,輸入:

cd ~
mkdir projects
cd ~/projects
mkdir hello_world
cd hello_world

3.2 編寫并運行 Rust 程序

接下來,新建一個叫做 main.rs 的源文件。Rust 源代碼總是以 .rs 后綴結尾。如果文件名包含多個單詞,使用下劃線分隔它們。
例如 my_program.rs,而不是 myprogram.rs。
現在打開剛創建的 main.rs 文件,輸入如下代碼。
文件名: main.rs

fn main(){println!("hello, world!")
}

保存文件,并回到終端窗口。在 Linux 或 macOS 上,輸入如下命令編譯并運行文件:
rustc main.rs
如果報一下錯誤,就需要安裝gcc
在這里插入圖片描述

yum install gcc -y

安裝完成后編譯,生成可執行文件
在這里插入圖片描述

運行程序

[root@jingtian01 hello_world ]#./main

在這里插入圖片描述

不管使用何種系統,字符串 Hello, world! 應該打印到終端。如果沒有看到這些輸出,回到 “故障排除” 部分查找尋求幫助的方式。
如果 Hello, world! 出現了,恭喜你!你已經正式編寫了一個 Rust 程序。現在你成為了一名 Rust 程序員!歡迎!

3.3 分析 Rust 程序

現在,讓我們回過頭來仔細看看 “Hello, world!” 程序中到底發生了什么。這是拼圖的第一片:

fn main() {
}

這幾行定義了一個 Rust 函數。 main 函數是特殊的:它是每個可執行的 Rust 程序所首先執行的代碼。
第一行代碼聲明了一個叫做 main 的函數,它沒有參數也沒有返回值。如果有參數的話,它們的名稱應該出現在括號中,位于 ( 和 ) 之間。
還須注意函數體被包裹在花括號中, { 和 } 之間。Rust 要求所有函數體都要用花括號包裹起來(有些語言,當函數體只有一行時可以省略花括號,但在 Rust 中是不行的)。
一般來說,將左花括號與函數聲明置于同一行并以空格分隔,是良好的代碼風格。
如果你希望在 Rust 項目中保持一種標準風格, rustfmt 會將代碼格式化為特定的風格。
rustfmt main.rs
在這里插入圖片描述

在 main() 函數中是如下代碼:
println!(“Hello, world!”);

這行代碼完成這個簡單程序的所有工作:在屏幕上打印文本。這里有四個重要的細節需要注意。
首先 Rust 使用 4 個空格的縮進風格,而不是 1 個制表符(tab)。
第二, println! 調用了一個 Rust 宏(macro)。如果是調用函數,則應輸入 println (沒有 ! )。你只需記住,當看到符號 ! 的時候,就意味著調用的是宏而不是普通函數。
第三, “Hello, world!” 是一個 字符串。我們把這個字符串作為一個參數傳遞給 println! ,字符串將被打印到屏幕上。
第四,該行以分號結尾( ; ),這代表一個表達式的結束和下一個表達式的開始。大部分 Rust 代碼行以 ; 結尾。

4、cargo

僅僅使用 rustc 編譯簡單程序是沒問題的,不過隨著項目的增長,你可能需要控制你項目的方方面面,并且更容易地將
代碼分享給其它人或項目。接下來,我們要介紹一個叫做 Cargo 的工具,它會幫助你編寫真實世界中的 Rust 程序。

Cargo 是 Rust 的構建系統和包管理器。大部分 Rustacean 們使用 Cargo 來管理他們的 Rust 項目,因為它可以為你處理很多任務,比如構建代碼、下載依賴庫并編譯這些庫。(我們把代碼所需要的庫叫做 依賴(dependencies)。
最簡單的 Rust 程序,比如我們剛剛編寫的,并沒有任何依賴。所以如果使用 Cargo 來構建 “Hello, world!” 項目,將只會
用到 Cargo 構建代碼那部分的功能。隨著編寫的程序更加復雜,你會添加依賴,如果你一開始就使用 Cargo 的話,添加依賴將會變得簡單許多。
由于絕大部分 Rust 項目使用 Cargo,接下來的部分將假設你也使用 Cargo。如果使用 “安裝” 部分介紹的官方安裝包
的話,則自帶了 Cargo。如果通過其他方式安裝的話,可以在終端輸入如下命令檢查是否安裝了 Cargo:
cargo --version
在這里插入圖片描述

4.1 使用 Cargo 創建項目

讓我們使用 Cargo 來創建一個新項目,然后看看與上面的 hello_world 項目有什么不同。
回到 projects 目錄(或者任何你放置代碼的目錄)。接著并在任何操作系統下運行:

cargo new hello_cargo --bin
cd hello_cargo

在這里插入圖片描述

第一行命令新建了名為 hello_cargo 的二進制可執行程序。傳遞給 cargo new 的 --bin 參數生成一個可執行程序(通常就叫做 二進制文件,binary),而不是一個庫。
項目的名稱被定為 hello_cargo ,同時 Cargo 在一個同名目錄中創建項目文件。
在這里插入圖片描述

進入 hello_cargo 目錄并列出文件。將會看到 Cargo 生成了兩個文件和一個目錄:一個 Cargo.toml 文件和一個 src 目
錄,main.rs 文件位于 src 目錄中。它也在 hello_cargo 目錄初始化了一個 git 倉庫,以及一個 .gitignore 文件。
在這里插入圖片描述

請隨意使用任何文本編輯器打開 Cargo.toml 文件。

[root@jingtian01 hello_cargo ]#cat Cargo.toml 
[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2024"[dependencies]

這個文件使用 TOML (Tom’s Obvious, Minimal Language) 格式,這是 Cargo 的配置文件的格式。
第一行, [package] ,是一個部分標題,表明下面的語句用來配置一個包。隨著我們在這個文件增加更多的信息,還將增加其他部分。
接下來的三行設置了 Cargo 編譯程序所需的配置:項目的名稱、版本,它們告訴 Cargo 需要編譯這個項目。
Cargo 從環境中獲取你的名稱和 email 信息,所以如果這些信息不正確,請修改并保存此文件。
最后一行, [dependencies] ,是項目依賴列表(我們稱呼 Rust 代碼包為 crate)部分的開始。
在 Rust 中,代碼包被稱為
crates。這個項目并不需要任何其他的 crate,現在打開 src/main.rs 看看:

[root@jingtian01 src ]#cat main.rs 
fn main() {println!("Hello, world!");
}

Cargo 為你生成了一個 “Hello World!” 程序,正如我們之前示例中編寫的那個!目前為止,之前項目與 Cargo 生成項目的區別是 Cargo 將代碼放在 src 目錄,
同時項目根目錄包含一個 Cargo.toml 配置文件
Cargo 期望源文件位于 src 目錄。項目根目錄只留給 README、license 信息、配置文件和其他跟代碼無關的文件。使用Cargo 幫助你保持項目干凈整潔,一切井井有條。
如果沒有用 Cargo 開始項目,比如 hello_world 目錄中的項目,可以將其轉化為一個 Cargo 項目。將代碼放入 src 目錄,并創建一個合適的 Cargo.toml 文件。

4.2 構建并運行 Cargo 項目

現在讓我們看看通過 Cargo 構建和運行 “Hello, world!” 程序有什么不同。在 hello_cargo,輸入下面的命令來構建項目:

[root@jingtian01 hello_cargo ]#cargo buildCompiling hello_cargo v0.1.0 (/root/projects/hello_cargo)Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.19s

在這里插入圖片描述

這個命令會創建 target/debug/hello_cargo(或者在 Windows 上是 target\debug\hello_cargo.exe)可執行文件,而不是在目前目錄。
可以通過這個命令運行可執行文件:

[root@jingtian01 hello_cargo ]#./target/debug/hello_cargo 
Hello, world!

如果一切順利, Hello, world! 應該打印在終端上。首次運行 cargo build 時也會使 Cargo 在項目根目錄創建一個新文件:Cargo.lock。
這個文件記錄項目依賴的實際版本。這個項目并沒有依賴,所以其內容比較少。你自己永遠也不需要碰這個文件,讓 Cargo 處理它就行了。
我們剛剛使用 cargo build 構建了項目并使用 ./target/debug/hello_cargo 運行了程序,也可以使用 cargo run 在一個命令中同時編譯并運行生成的可執行文件:

[root@jingtian01 hello_cargo ]#cargo runFinished `dev` profile [unoptimized + debuginfo] target(s) in 0.00sRunning `target/debug/hello_cargo`
Hello, world!

在這里插入圖片描述

注意這一次并沒有出現表明 Cargo 正在編譯 hello_cargo 的輸出。Cargo 發現文件并沒有被改變,就直接運行了二進制文
件。如果修改了源文件的話,Cargo 會在運行之前重新構建項目。

Cargo 還提供了一個叫 cargo check 的命令。該命令快速檢查代碼確保其可以編譯但并不產生可執行文件:
[root@jingtian01 hello_cargo ]#cargo check
在這里插入圖片描述

為什么你會不需要可執行文件呢?通常 cargo check 要比 cargo build 快得多,因為它省略了生成可執行文件的步驟。
如果編寫代碼時持續的進行檢查, cargo check 會加速開發!為此很多 Rustaceans 編寫代碼時運行 cargo check 定期運行
cargo check 確保它們可以編譯。當準備好使用可執行文件時運行 cargo build 。

作為目前所學的關于 Cargo 內容的回顧:
可以使用 cargo build 或 cargo check 構建項目。
可以使用 cargo run 一步構建并運行項目。
有別于將構建結果放在與源碼相同的目錄,Cargo 會將其放到 target/debug 目錄。
Cargo 的一個額外的優點是不管你使用什么操作系統其命令都是一樣的。所以從此以后本書將不再為 Linux 和 macOS 以及 Windows 提供相應的命令。

4.3 發布(release)構建

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

4.4 把 Cargo 當作習慣

對于簡單項目, Cargo 并不比 rustc 提供了更多的優勢,不過隨著開發的深入終將證明其價值。
對于擁有多個 crate 的復雜項目,讓 Cargo 來協調構建將簡單的多。
即便 hello_cargo 項目十分簡單,它現在也使用了很多你之后的 Rust 生涯將會用得上的實用工具。其實對于任何你想要
從事的項目,可以使用如下命令通過 Git 檢出代碼,移動到該項目目錄并構建:

5、總結

你已經準備好迎來 Rust 之旅的偉大開始!在本文中,你學習了如何:
使用 rustup 安裝最新穩定版的 Rust
跟新到新版的 Rust
打開本地安裝的文檔
直接通過 rustc 編寫并運行 “Hello, world!” 程序
使用 Cargo 風格創建并運行新項目
現在是一個通過構建更大的項目來熟悉讀寫 Rust 代碼的好時機。

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

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

相關文章

Google Chrome下載受限制的解決方案【方法指南】

在國內使用網絡時,部分用戶在嘗試訪問Google Chrome官網下載谷歌瀏覽器時,常常遇到網頁無法打開或文件下載失敗的情況。這種下載受限制的問題多由網絡訪問政策或DNS解析異常導致。為了正常獲取Google Chrome的最新版安裝程序,用戶需要通過一些…

使用 new EventSource 實現前端實時通信

示例: eventSource單向通信 1. 什么是 EventSource? EventSource 是瀏覽器提供的一種實現服務器推送(Server-Sent Events,簡稱 SSE)功能的 API。它是基于 HTTP 協議的單向通信機制,可以通過服務器將實時數…

Android Input——查找并添加目標窗口(七)

在 Android 輸入系統中,InputDispatcher 的核心職責之一是將輸入事件正確地傳遞到目標窗口。上一篇文章我們介紹到 InputDispatcher 事件分發調用到 findFocusedWindowTargetsLocked() 函數查找焦點窗口,并將焦點窗口添加到目標窗口,這里我們繼續往下看。 一、獲取焦點窗口…

Spring Boot中Spring MVC相關配置的詳細描述及表格總結

以下是Spring Boot中Spring MVC相關配置的詳細描述及表格總結: Spring MVC 配置項詳解 1. 異步請求配置 spring.mvc.async.request-timeout 描述:設置異步請求的超時時間(單位:毫秒)。默認值:未設置&…

HTTP GET 和 POST 請求有什么區別

HTTP 的 GET 和 POST 請求是兩種常見的 HTTP 請求方法,它們有不同的特點和應用場景。以下是它們的主要區別: 1. 用途 GET:用于從服務器獲取數據或資源。GET 請求會附帶查詢參數在 URL 中,通常用于請求數據,如加載網頁…

從入門到精通【MySQL】 聯合查詢

文章目錄 📕摘要📕1. 多表聯合查詢時MySQL內部原理??1.1 實例:一個完整的聯合查詢過程 📕2. 內連接📕3. 外連接📕4. 自連接📕5. 子查詢??5.1 單行子查詢??5.2 多行子查詢??5.3 多列子查…

高可用之戰:Redis Sentinal(哨兵模式)

參考:Redis系列24:Redis使用規范 - Hello-Brand - 博客園 1 背景 在我們的《Redis高可用之戰:主從架構》篇章中,介紹了Redis的主從架構模式,可以有效的提升Redis服務的可用性,減少甚至避免Redis服務發生完…

加密≠安全:文件夾密碼遺忘背后的數據丟失風險與應對

在數字化時代,保護個人隱私和數據安全變得尤為重要。許多人選擇對重要文件夾進行加密,以防止未經授權的訪問。然而,一個常見且令人頭疼的問題也隨之而來——文件夾加密密碼遺忘。當你突然發現自己無法訪問那些加密的文件夾時,那種…

WPS宏開發手冊——附錄

目錄 系列文章7、附錄 系列文章 使用、工程、模塊介紹 JSA語法 JSA語法練習題 Excel常用Api Excel實戰 常見問題 附錄 7、附錄 顏色序列:在excel中設置顏色,只能設置顏色序號,不能直接設置rgb顏色 1、黑色 (Black)…

C++基礎精講-02

文章目錄 1.C/C申請、釋放堆空間的方式對比1.1C語言申請、釋放堆空間1.2C申請、釋放堆空間1.2.1 new表達式申請數組空間 1.3回收空間時的注意事項1.4malloc/free 和 new/delete 的區別 2.引用2.1 引用的概念2.2 引用的本質2.3 引用與指針的聯系與區別2.4 引用的使用場景2.4.1 引…

Spring Boot MongoDB 分頁工具類封裝 (新手指南)

Spring Boot MongoDB 分頁工具類封裝 (新手指南) 目錄 引言&#xff1a;為何需要分頁工具類&#xff1f;工具類一&#xff1a;PaginationUtils - 簡化 Pageable 創建 設計目標代碼實現 (PaginationUtils.java)如何使用 PaginationUtils 工具類二&#xff1a;PageResponse<…

MyBatis的緩存、逆向工程、使用PageHelper、使用PageHelper

一、MyBatis的緩存 緩存&#xff1a;cache 緩存的作用&#xff1a;通過減少IO的方式&#xff0c;來提高程序的執行效率。 mybatis的緩存&#xff1a;將select語句的查詢結果放到緩存&#xff08;內存&#xff09;當中&#xff0c;下一次還是這條select語句的話&#xff0c;直…

java中的JNI調用c庫

1. 簡單demo 如果是在某個項目中有包名就需要自己找ai問問去改寫下cmd命令去編譯執行等 java文件&#xff08;HelloJNI.java&#xff09; public class HelloJNI {// 聲明 native 方法public native void sayHello();// 加載本地庫static {System.loadLibrary("hello&quo…

人工智能:GPT技術應用與未來展望

GPT(Generative Pre-trained Transformer)作為自然語言處理領域的代表性技術,近年來在各行業的實際應用中展現出廣泛潛力。結合其技術特性與行業需求,以下是GPT的主要應用場景、案例分析及未來挑戰的總結: 一、核心應用領域與案例 文本生成與內容創作 自動化內容生產:GPT…

前端筆記-ECMAScript語法概覽

更多詳細可以查看1.1 ES6 教程 | 菜鳥教程 這里我將大概記錄ES與JS大概不一樣的部分&#xff0c;方便聯合記憶。 歷史與關系 ECMAScript&#xff1a;是一種由 Ecma 國際組織制定的腳本語言規范&#xff0c;它是 JavaScript 的標準化版本。ECMAScript 為 JavaScript 提供了語…

操作主機的管理

1.在AD林范圍內&#xff0c;有哪幾個操作主機角色 架構主機&#xff08;Schema Master&#xff09; 功能&#xff1a;負責整個AD林中所有對象和屬性的定義&#xff0c;是唯一可以更新目錄架構的DC。架構更新會從架構主機復制到目錄林中的所有其他域控制器。 作用范圍&#xf…

【Linux】網絡編程

目錄 端口號 網絡字節序 socket編程 接口 sockaddr結構 udp網絡程序 創建套接字 綁定 接收 發送 客戶端需要綁定嗎&#xff1f; 客戶端執行方法 本地環回地址 終端文件 代碼 tcp網絡程序 SOCK_STREAM 監聽 查詢網絡信息 獲取新連接 地址轉換函數 客戶端綁…

Go 語言中的select是做什么的

Go 語言中的 select 是做什么的 在 Go 語言中&#xff0c;select 語句是用于處理多個通道&#xff08;channel&#xff09;操作的一種控制結構。它類似于 switch 語句&#xff0c;但專門用于并發編程&#xff0c;允許 Goroutine 在多個通道上等待操作&#xff08;發送或接收&a…

智慧班牌系統解決方案,SaaS智慧電子班牌云平臺

智慧班牌系統解決方案 系統概述 智慧班牌是智慧校園建設不斷發展的產物&#xff0c;是教育信息化改革的載體。通過智慧班牌可以高效便捷傳遞各種知識信息和通知信息、及時反饋課堂信息、實現班級的透明化管理。智慧班牌將學生平安考勤、異常出勤情況及時反饋至家長、老師&…

利用大模型和聚類算法找出 Excel 文件中重復或相似度高的數據,并使用 FastAPI 進行封裝的詳細方案

以下是一個利用大模型和聚類算法找出 Excel 文件中重復或相似度高的數據,并使用 FastAPI 進行封裝的詳細方案: 方案流程 數據讀取:從 Excel 文件中讀取數據。文本向量化:使用大模型將文本數據轉換為向量表示。聚類分析:運用聚類算法對向量進行分組,將相似度高的數據歸為…