成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Rust學習筆記:基礎概念介紹

開發 前端
這篇文章為學習Rust語言打下了基礎。我們探討了安裝Rust、運行程序的替代方案、基本工具以及Rust中可用的原始數據類型的概述。

Rust背景

讓我們從Rust語言的背景開始,探索它的起源。Rust最初是Mozilla研究院在2006年的一個個人項目。第一個穩定的公開版本發布于2015年5月,但在此之前Mozilla已經在生產軟件中使用了Rust。2021年,Rust基金會成立,其憲章是管理Rust發布路線圖和語言治理。多年來,許多大公司(如亞馬遜、谷歌、微軟、Meta等)采用Rust進行系統和應用程序開發。截至撰寫本文時,當前的發布版本是1.74.0。

Rust被認為是一種重要的語言,主要原因是它的執行速度、內存管理/安全性以及并發能力。

與其他語言相比,Rust程序免受以下問題的困擾:

  • 懸空指針
  • 數據競爭
  • 緩沖區溢出
  • 迭代器失效

當你開始使用Rust時,我發現最令人沮喪但同時也最有益的能力是,編譯器幾乎會引導你編寫正確的代碼。但它非常挑剔。Rust是一種靜態且強類型的語言。變量類型必須在編譯時已知,試圖將一種類型的變量賦值給另一種類型的變量會導致編譯錯誤。編譯器會提供盡可能多的信息,甚至是解決方案。

下面是一個嘗試將字符串傳遞給無符號整數變量的人為示例。

不用擔心上面的代碼,現在只關注以下幾行,解釋究竟發生了什么。它告訴我們問題出現在第3行,以及具體的問題是什么。我們將在本文的后續部分以及未來的文章中進一步探討為什么會發生這種類型錯誤。

3 | let j : u32 = i;
  | — — ^ expected `u32`, found `String`

Rust安裝指南

在探索Rust的過程中,我們會發現其工具鏈非常出色,從安裝開始就不例外。

Rustup

Rustup 是安裝 Rust 的工具,它允許用戶在穩定版、測試版和夜間版編譯器構建之間切換,并且可以在每個類別中保持更新到新版本。它在Rust支持的所有平臺上運行。我們將探討提供的文檔,Rustup 有自己的書籍可以在這里找到。

訪問 https://rustup.rs/,它會嘗試檢測您的操作系統并展示安裝Rust的方法。在我的Mac上,它檢測到Unix系統并提供了curl安裝方法。但使用Homebrew安裝會更簡單。

brew install rustup

安裝完成后,運行以下命令來初始化您的Rust環境。

rustup-init

然后通過運行以下命令來驗證。

rustc --version

您可以通過運行以下命令來確保擁有最新版本。

rustup upgrade

如果有最新版本可用,它將安裝該版本。Rust的升級周期相對較頻繁,因此您可能需要比使用其他語言時更頻繁地運行此命令。

如果您想知道像rustc、cargo和rustup這樣的工具安裝在哪里,請查看 $HOME/.cargo/bin 目錄。

Visual Studio Code

雖然有幾種IDE可用于Rust,但我發現Visual Studio Code非常好用。假設您已經使用rustup安裝了Rust,并且安裝了Visual Studio Code,您會想安裝“rust-analyzer”擴展。我還安裝了“rust”擴展。

在Mac上,您還需要運行以下命令來啟用從命令行啟動VS Code。在VS Code中通過運行以下命令來完成此操作。

通過??P打開命令面板,并鍵入shell command來找到Shell Command:

在執行“Install ‘code’ command in PATH”命令之前,先使用“Uninstall ‘code’ command in PATH”命令。

執行該命令后,您就可以在任何文件夾中簡單地鍵入 code . 來打開VS Code并開始編輯該文件夾中的文件。

Rust Playground

在Rust的入門討論中,如果不提到這個對語言學習者來說神奇的工具,那就不完整了。如果你想嘗試運行Rust代碼,卻不想安裝它,或者你想快速測試一些代碼,可以使用Rust Playground:https://play.rust-lang.org/。這是一個功能齊全的Rust環境,允許你交互、調試甚至分享你的Rust代碼。

Rust Playground擁有很多優秀的功能。這包括訪問用于格式化或審查Rust代碼的工具(我們將在下面探討這些)。如你所見,它甚至能輕松地與他人分享代碼,比如,通過點擊這個鏈接:

https://play.rust-lang.org/?versinotallow=stable&mode=debug&editinotallow=2021&gist=94762255ffdfc1bf6ca26a6ec10154b9

Cargo

Cargo是Rust的構建系統和包管理器。Cargo為你處理許多任務,如構建代碼、下載代碼依賴的庫以及構建這些依賴。我發現使用Cargo是管理Rust項目最簡單的方式。

% cargo --version
cargo 1.74.0 (ecb9851af 2023-10-18)

這是我當前系統上的結果,因為我正在運行Rust 1.74.0。

Cargo允許高效管理新項目,讓我向你展示我覺得有用的流程。

cargo new hello_cargo

cd hello_cargo

code .

這將創建一個帶有依賴管理文件、git文件的新項目,切換到那個目錄,然后用VS Code打開那個文件夾。

創建的依賴管理文件名為Cargo.toml。toml是Cargo的配置格式。

[package]
name = "hello_cargo"
version = "0.1.0"
edition = "2021"

# 詳細信息請見 https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]

Cargo希望你的源文件位于src目錄內。

如果你通過其他方式開始一個項目,可以通過確保項目代碼在src目錄內,并創建一個適當的Cargo.toml文件(如上所示),輕松將其轉換為使用Cargo的項目。

常用的Cargo命令包括:

# 清理項目的構建產物
cargo clean

# 檢查是否能編譯,但不進行構建
cargo check

# 構建項目
cargo build

# 構建不帶調試信息的發布版本
cargo build --release

# 運行項目
cargo run

# 打開包含項目文檔的頁面(包括任何///注釋)
cargo doc --open

# 自動修復代碼問題
cargo fix

Crate(箱)

在Rust中,crate是編譯器一次考慮的最小代碼單元。crate有兩種形式:二進制crate和庫crate。二進制crate是你可以編譯成可執行文件的程序,比如命令行程序或服務器。這些程序有一個叫做main的函數。Crate可以包含模塊,這些模塊可能在其他文件中定義。

庫crate沒有main函數,它們不編譯成可執行文件。相反,它們定義的功能旨在與多個項目共享。

包(package)是一個或多個crate的捆綁,提供一組功能。包含一個Cargo.toml文件,描述如何構建這些crate。

在本系列后續文章中,我們將看到如何將應用程序分割成不同的crate、包和模塊的示例。

工具

rustfmt

rustfmt是一個工具,用于根據社區代碼風格指南格式化Rust代碼。它是非常可配置的,你可以創建一個名為rustfmt.toml的文件,并設置這里找到的任何參數來格式化你的代碼。

直接運行:

rustfmt main.rs

由于我發現Cargo是所有命令行工具的首選選項,我只需簡單運行:

cargo fmt

注意,rustfmt也是Rust Playground中TOOLS下的一個選項。

clippy

Clippy工具是一組靜態代碼分析規則的集合,用于標記編程錯誤、bug、風格錯誤和可疑結構。Clippy用于分析你的代碼,以便你可以捕捉常見錯誤并改進你的Rust代碼。

它可以通過輸入以下命令簡單運行:

cargo clippy

注意,clippy也是Rust Playground中TOOLS下的一個選項。

Primitive Types

在本文的最后一部分,我們將探討Rust支持的原始類型(primitive types)。

Rust中最簡單的類型被稱為原始類型。這些包括數字、字符和字符串。我們將從整數類型開始,即沒有小數點的整數。整數類型分為有符號和無符號兩種。

有符號整數類型以字母‘i’開頭,大小范圍從8到128,如下所示。

  • i8
  • i16
  • i32
  • i64
  • i128

無符號整數類型以字母‘u’開頭,大小范圍同樣從8到128,如下所示。

  • u8
  • u16
  • u32
  • u64
  • u128

Rust使用usize作為索引的大小。usize是用于索引的最佳大小,因為索引不能為負數,允許在大型索引空間中靈活使用,并且需要適應32位計算機。

只要源變量中的內容能夠適應目標變量類型的最大值,你就可以在不同整數類型之間進行賦值。下面是一個例子。如果將第二行改為128,則第四行將失敗,因為i8類型的最大值是127,而我們聲明它為i8。

fn main() {
    let mut i = 127;
    let j: i8 = 12;
    i = j;
    println!("{}", i)
}

我們將在后面討論mut關鍵字的使用,但現在只需知道它允許在聲明后對i進行賦值。默認情況下,變量是不可變的(不允許被更改)。

如果未聲明類型,則整數的默認大小為i32,所以上面的變量i將是i32類型。

浮點數是帶有小數點的數字。10.5是一個浮點數,而2是一個整數。就像整數一樣,它們由諸如f32或f64之類的類型定義。也像整數一樣,如果環境支持,f64是默認的浮點數類型。

字符(char)類型始終使用4個字節。但字符串不同,單個字符不總是使用4個字節。當字符是字符串的一部分(而不是char類型)時,字符串被編碼為使用每個字符所需的最少內存量。

字符的大小和字符串的變化如下面的代碼片段所示。

use std::time::{Instant};

fn main() {
    let now = Instant::now();
    println!("Size of a char: {}", std::mem::size_of::<char>());
    println!("Size of a: {}", "a".len());
    println!("Size of ?: {}", "?".len());
    println!("Size of 國: {}", "國".len());
    println!("Size of : {}", "".len());
    let now2 = Instant::now();
    println!("==> {} ms", now2.duration_since(now).as_micros());
}

結果如下。請注意,還添加了一些代碼來顯示微秒級的運行時長。

Size of a char: 4
Size of a: 1
Size of ?: 2
Size of 國: 3
Size of : 4
==> 6773 ms

請注意,.len()方法返回的是字節數,而不是字母數。

上面的例子展示了如何從Instant庫中包含一個標準庫函數,now()。這是在頂部使用use關鍵字包含的。

每種類型的詳細信息可以在這里找到。

https://doc.rust-lang.org/reference/types.html

總結

這篇文章為學習Rust語言打下了基礎。我們探討了安裝Rust、運行程序的替代方案、基本工具以及Rust中可用的原始數據類型的概述。在下一節中,我們將探討內存管理的重要話題,以及借用(borrowing)、遮蔽(shadowing)、所有權(ownership)以及不可變性等概念。理解這些概念,其中一些是Rust獨有的,對于精通這種語言至關重要。

Rust的內存管理是其核心特性之一,不同于傳統語言如C或C++中的手動內存管理,Rust通過所有權系統自動處理內存,旨在減少內存泄漏和其他常見錯誤。在Rust中,每一個值都有一個被稱為其“所有者”的變量,值在任何時候都只能有一個所有者。當所有者離開作用域時,值將被丟棄。

借用是Rust中另一個重要概念。它允許我們創建指向數據的引用,但不取得所有權。這意味著數據可以被多個部分的代碼安全地訪問,而不會引起數據競爭或其他問題。

遮蔽則允許我們重新使用變量名。這意味著你可以在同一個作用域內聲明一個新的同名變量,新變量會“遮蔽”掉舊變量。

不可變性是Rust的另一個核心概念。在Rust中,默認情況下,所有變量都是不可變的。這增加了代碼的安全性和清晰性。當然,如果需要,你可以通過使用mut關鍵字明確指定可變性。

通過了解和掌握這些概念,你將能夠更有效地編寫Rust代碼,并充分利用Rust提供的安全和性能優勢。

在我們的下一篇文章中,我們將深入探討這些概念,并通過實際示例來展示它們在Rust編程中的應用。我們還將探討Rust的錯誤處理機制和模式匹配,這是Rust提供的另一組強大功能。

責任編輯:姜華 來源: 今日頭條
相關推薦

2009-08-13 11:10:32

C#基礎概念

2010-07-27 15:42:18

AdobeFlex

2009-11-05 11:31:00

WCF綁定

2022-12-09 07:13:20

2010-07-13 14:16:56

Perl控制流

2017-03-21 11:02:59

基礎深度學習備忘錄

2009-08-13 10:52:03

C#基礎概念

2020-05-08 13:44:26

Spark架構RDD

2023-05-29 16:25:59

Rust函數

2011-08-04 14:58:37

Objective-C Cocoa NSString

2010-07-21 17:00:58

bada接口

2023-06-15 17:00:11

Rust循環

2011-03-08 10:27:25

MongoDB介紹安裝

2024-11-08 09:19:28

2009-07-09 16:24:48

JDK學習筆記Java語言基礎

2010-07-23 13:16:07

Perl

2010-06-18 09:57:46

C#UML基礎

2009-07-14 17:01:24

JDBC基礎

2010-03-05 10:24:33

2010-03-05 10:50:17

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产综合一区二区 | 国产精品国产成人国产三级 | 草久在线视频 | m豆传媒在线链接观看 | 午夜欧美a级理论片915影院 | 亚洲精品在线观看网站 | h视频免费观看 | 国产.com| 日日夜夜天天综合 | 在线日韩| 国产69久久精品成人看动漫 | 亚洲高清在线免费观看 | 91文字幕巨乱亚洲香蕉 | 精品久久久久久亚洲精品 | 亚洲精品二区 | 亚洲国产一区视频 | 99久久国产综合精品麻豆 | 日韩在线一区二区三区 | 色婷婷综合网站 | 成人影院av | 精品欧美 | 男人天堂国产 | 情侣av| 一区二区蜜桃 | 国产精品久久久久久久午夜片 | 国精产品一区二区三区 | 午夜精品在线观看 | 欧美黑人一区二区三区 | 999免费网站 | 国产福利资源在线 | 中文成人在线 | 国偷自产av一区二区三区 | 日韩精品中文字幕一区二区三区 | zzzwww在线看片免费 | 久热国产精品视频 | 一区二区三区视频免费观看 | 九九精品在线 | 欧洲精品久久久久毛片完整版 | 亚洲成人一级片 | 久久精品二区亚洲w码 | 午夜影院在线观看免费 |