衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Rust的標(biāo)準(zhǔn)庫的功能劃分

jf_wN0SrCdH ? 來源:Rust語言中文社區(qū) ? 2023-10-29 17:17 ? 次閱讀

Linux的層級(jí)架構(gòu)

每個(gè)操作系統(tǒng)都有一個(gè)內(nèi)核,內(nèi)核封裝了底層硬件設(shè)備管理、內(nèi)存管理、網(wǎng)絡(luò)數(shù)據(jù)協(xié)議轉(zhuǎn)化和收發(fā)傳輸、文件系統(tǒng)讀寫等。從這個(gè)圖可以看到,內(nèi)核將系統(tǒng)硬件與應(yīng)用程序進(jìn)程連接起來,隱藏了上層下層交互的一些細(xì)節(jié),各司其職。

eb77a7f2-7632-11ee-939d-92fbcf53809c.png

這些分層包括:

用戶空間程序

編譯器

終端

防火墻

系統(tǒng)調(diào)用的跨平臺(tái)API(特定于平臺(tái)的系統(tǒng)調(diào)用包裝API)

Rust標(biāo)準(zhǔn)庫

libc(或等效的API)

kernel,操作系統(tǒng)的核心模塊

系統(tǒng)資源

內(nèi)存

文件系統(tǒng)

網(wǎng)絡(luò)

硬件和其他設(shè)備(包括鍵盤、鼠標(biāo)、監(jiān)視器、磁盤驅(qū)動(dòng)器

Rust的標(biāo)準(zhǔn)庫的功能劃分

而Rust標(biāo)準(zhǔn)庫,很好的利用了操作系統(tǒng)內(nèi)核提供的API。

Rust標(biāo)準(zhǔn)庫是Rust程序進(jìn)入Linux操作系統(tǒng)內(nèi)核函數(shù)的主要接口,它在內(nèi)部使用libc(在Windows系統(tǒng)使用其他等效的庫)來調(diào)用內(nèi)核提供的系統(tǒng)調(diào)用。

從Rust程序中發(fā)起系統(tǒng)調(diào)用,以實(shí)現(xiàn)管理和操作各種系統(tǒng)資源(如圖)。

eb8ba572-7632-11ee-939d-92fbcf53809c.png

libc(或其變體)為類UNIX操作系統(tǒng)上的系統(tǒng)調(diào)用提供了一個(gè)包裝器,如Linux內(nèi)核實(shí)現(xiàn)了POSIX標(biāo)準(zhǔn)指定的數(shù)百個(gè)POSIX API(對(duì)于Windows,系統(tǒng)調(diào)用有等效的API,也實(shí)現(xiàn)了POSIX標(biāo)準(zhǔn)[1])。

作為標(biāo)準(zhǔn)庫,Rust標(biāo)準(zhǔn)庫是跨平臺(tái)的,Rust標(biāo)準(zhǔn)庫的系統(tǒng)調(diào)用的細(xì)節(jié)是從Rust開發(fā)人員那里抽象出來的。Rust也支持不依賴于標(biāo)準(zhǔn)庫的運(yùn)行方式(no_std 方式),Rust直接操控底層硬件(如應(yīng)用在嵌入式系統(tǒng)開發(fā)場景),此時(shí)Rust就做了操作系統(tǒng)本身的工作。

對(duì)于大部分軟件開發(fā)工程師而言,他們用Rust主要開發(fā)應(yīng)用層軟件,也就是運(yùn)行在用戶空間的程序。它們基于標(biāo)準(zhǔn)庫編寫,實(shí)現(xiàn)各種業(yè)務(wù)功能。應(yīng)用層的軟件并非所有模塊和函數(shù)都涉及到系統(tǒng)調(diào)用(例如一些用于操作字符串和處理錯(cuò)誤的函數(shù),就無需調(diào)用系統(tǒng)調(diào)用)。

Rust標(biāo)準(zhǔn)庫包括幾大領(lǐng)域的模塊,包括四大類:

第一類,Rust語言原語

即Rust Language Primitives:Rust 語言的基本元素或基本類型(如下圖)。

如有符號(hào)整數(shù)、布爾值、浮點(diǎn)數(shù)、字符、字符串、數(shù)組、元組、切片。這些由Rust編譯器負(fù)責(zé)實(shí)現(xiàn)。

eb96e126-7632-11ee-939d-92fbcf53809c.png

Rust標(biāo)準(zhǔn)包括原語,并在它們之上構(gòu)建。

第二類,alloc crate

與堆分配值的內(nèi)存分配相關(guān)的類型、函數(shù)和特征。

包括集合(Vec、String等集合)、智能指針類型(Box)、引用計(jì)數(shù)指針(Rc)和原子引用計(jì)數(shù)指針(Arc))。

第三類,core crate

作為Rust標(biāo)準(zhǔn)庫的基礎(chǔ)。充當(dāng)Rust語言與標(biāo)準(zhǔn)庫之間的鏈接,提供在Rust原語之上實(shí)現(xiàn)的類型、特征、常量和函數(shù),并為所有Rust代碼提供基礎(chǔ)構(gòu)建塊,它是跨平臺(tái)的,沒有任何指向操作系統(tǒng)或其他外部依賴的鏈接。由于較少直接用到core crate,所以本文不做過多介紹。

第四類,模塊(標(biāo)準(zhǔn)庫的其他crate)

是標(biāo)準(zhǔn)庫的一部分,模塊crate包括針對(duì)并發(fā)、I/O,文件系統(tǒng)、網(wǎng)絡(luò)、異步I/O、錯(cuò)誤處理等功能,以及與特定操作系統(tǒng)相關(guān)的函數(shù),Rust的官網(wǎng)對(duì)std有專門的文檔[2]。例如

為用戶程序在多個(gè)線程上并發(fā)運(yùn)行的功能在std::thread模塊中;

用于處理同步I/O的功能在std::io模塊中提供;

針對(duì)特定os的模塊,主要在std::os模塊中實(shí)現(xiàn)。

下圖展示了Rust標(biāo)準(zhǔn)庫各個(gè)領(lǐng)域功能涉及到的具體std模塊(如std::io、std::os等)

eba18e32-7632-11ee-939d-92fbcf53809c.png

以下著重對(duì)第四類的主要 crate 做一介紹,并附上文檔地址

Rust的并發(fā)控制相關(guān)模塊 conurrency:

模塊名 說明
std::env 模塊[3] 包含與環(huán)境變量交互的功能,包括讀取、設(shè)置和刪除環(huán)境變量。
std::sync 模塊[4] 提供了用于實(shí)現(xiàn)線程安全共享狀態(tài)的同步原語,如互斥鎖(Mutex)、原子操作(Atomic)和條件變量(Condvar)。
std::thread 模塊[5] 提供了創(chuàng)建和管理線程的功能,包括線程的創(chuàng)建、 join、spawn 和同步。
std::process 模塊[6] 提供了與操作系統(tǒng)進(jìn)程交互的功能,包括運(yùn)行外部命令、啟動(dòng)新進(jìn)程以及與進(jìn)程進(jìn)行通信

Rust的內(nèi)存管理相關(guān)模塊 memory management:

模塊名 說明
std::alloc 模塊[7] 提供了內(nèi)存分配器的功能,包括分配和釋放動(dòng)態(tài)內(nèi)存。
std::convert 模塊[8] 提供了用于不同類型之間轉(zhuǎn)換的工具函數(shù)。
std::ptr 模塊[9] 提供了對(duì)指針的操作和轉(zhuǎn)換功能,包括對(duì)裸指針的操作。
std::borrow 模塊[10] 提供了用于管理借用的功能,包括&和&mut借用運(yùn)算符的實(shí)現(xiàn)。
std::default 模塊[11] 提供了默認(rèn) trait 實(shí)現(xiàn)的功能,用于為不提供具體實(shí)現(xiàn)的類型提供默認(rèn)行為。
std::rc 模塊[12] 提供了引用計(jì)數(shù)(Reference Counting)的功能,用于實(shí)現(xiàn)線程安全的共享內(nèi)存。
std::cell 模塊[13] 提供了可變性的 Cell 和 RefCell 類型,用于在多線程環(huán)境下安全地共享可變狀態(tài)。
std::mem 模塊[14] 提供了與內(nèi)存相關(guān)的功能,包括內(nèi)存布局、內(nèi)存對(duì)齊和內(nèi)存操作。
std::clone 模塊[15] 提供了用于實(shí)現(xiàn)克隆(Clone) trait 的功能,用于復(fù)制和克隆復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。
std::pin 模塊[16] 提供了 Pin 類型,用于固定借用的生命周期,以避免懸垂指針和數(shù)據(jù)競爭問題。

Rust的文件系統(tǒng)操作相關(guān)模塊 File system:

模塊名 說明
std::fs 模塊[17] 提供了與文件系統(tǒng)操作相關(guān)的功能,包括文件和目錄的創(chuàng)建、讀取、寫入和刪除等操作。
std::path 模塊[18] 提供了與文件路徑相關(guān)的功能,包括路徑的解析、構(gòu)造和操作。

Rust的數(shù)據(jù)處理相關(guān)模塊 data processing:

模塊名 說明
std::ascii 模塊[19] 提供了與 ASCII 碼相關(guān)的功能,包括對(duì) ASCII 字符的操作和轉(zhuǎn)換。
std::fmt 模塊[20] 提供了格式化輸出的功能,包括對(duì)各種數(shù)據(jù)類型的格式化和打印。
std::num 模塊[21] 提供了對(duì)數(shù)字類型的抽象和操作,包括整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)等。
std::cmp 模塊[22] 提供了用于比較和排序值的工具,包括比較運(yùn)算符的實(shí)現(xiàn)和排序函數(shù)。
std::hash 模塊[23] 提供了用于計(jì)算哈希值的功能,包括對(duì)各種數(shù)據(jù)類型的哈希函數(shù)實(shí)現(xiàn)。
std::ops 模塊[24] 提供了一些基本的運(yùn)算符和操作符的實(shí)現(xiàn),包括數(shù)學(xué)運(yùn)算符、比較運(yùn)算符和邏輯運(yùn)算符等。
std::iter 模塊[25] 提供了迭代器(Iterator)的功能,包括創(chuàng)建和操作迭代器的方法,以及一些常見的迭代器類型。

Rust的錯(cuò)誤處理相關(guān)模塊 Error handling:

模塊名 說明
std::error 模塊[26] 提供了錯(cuò)誤處理的功能,包括定義錯(cuò)誤類型和處理錯(cuò)誤的方法。
std::panic 模塊[27] 提供了恐慌(Panic)機(jī)制,用于處理不可恢復(fù)的錯(cuò)誤情況。
std::option 模塊[28] 提供了 Option 類型,用于表示可能存在或不存在的值,用于處理可能出現(xiàn)空值的情況。
std::result 模塊[29] 提供了 Result 類型,用于表示成功或失敗的情況,通常用于處理可能出現(xiàn)錯(cuò)誤的函數(shù)返回值。

Rust的編譯處理相關(guān)模塊 compiler:

模塊名 說明
std::hint 模塊[30] 提供了一些用于編譯器提示的宏,用于影響編譯器的優(yōu)化行為。
std::primitive 模塊[31] 提供了一些基本的類型和函數(shù),用于處理數(shù)字、字符和布爾值等基本數(shù)據(jù)類型。
std::prelude 模塊[32] 包含了一些基本的函數(shù)和宏,這些函數(shù)和宏在 Rust 標(biāo)準(zhǔn)庫中被廣泛使用,并且在每個(gè) Rust 程序中自動(dòng)導(dǎo)入。

Rust的跨語言調(diào)用相關(guān)模塊:FFI

模塊名 說明
std::ffi 模塊[33] 提供了與外部函數(shù)接口(Foreign Function Interface,F(xiàn)FI)相關(guān)的功能,用于與其他語言或庫進(jìn)行交互。

Rust的網(wǎng)絡(luò)處理功能模塊 Networking:

模塊名 說明
std::net 模塊[34] 提供了與網(wǎng)絡(luò)編程相關(guān)的功能,包括網(wǎng)絡(luò)協(xié)議、套接字(Socket)和網(wǎng)絡(luò)地址等。

Rust的IO處理模塊:

模塊名 說明
std::io 模塊[35] 提供了與輸入輸出相關(guān)的功能,包括文件操作、緩沖、讀寫數(shù)據(jù)等。

Rust的OS特定的功能模塊:

模塊名 說明
std::os 模塊[36] 提供了與操作系統(tǒng)相關(guān)的功能,包括文件系統(tǒng)操作、進(jìn)程管理和系統(tǒng)信息等。

Rust的時(shí)間處理模塊:

模塊名 說明
std::time 模塊[37] 提供了與時(shí)間和日期相關(guān)的功能,包括時(shí)間的表示、解析、轉(zhuǎn)換和計(jì)算等。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 模塊
    +關(guān)注

    關(guān)注

    7

    文章

    2733

    瀏覽量

    47744
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11345

    瀏覽量

    210382
  • Rust
    +關(guān)注

    關(guān)注

    1

    文章

    230

    瀏覽量

    6664

原文標(biāo)題:Rust的標(biāo)準(zhǔn)庫的功能劃分

文章出處:【微信號(hào):Rust語言中文社區(qū),微信公眾號(hào):Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用Rust連接Redis

    Redis是一款快速、開源、鍵值存儲(chǔ)數(shù)據(jù),被廣泛應(yīng)用于緩存、發(fā)布/訂閱系統(tǒng)、定時(shí)任務(wù)等場景中。Rust提供了很多Redis的客戶端,本教程將會(huì)介紹如何使用Rust連接Redis,以
    的頭像 發(fā)表于 09-19 16:22 ?2494次閱讀

    如何使用Rust語言操作Chrome瀏覽器的SQLite數(shù)據(jù)

    的瀏覽器,它使用SQLite數(shù)據(jù)來存儲(chǔ)瀏覽器的歷史記錄、書簽、密碼等數(shù)據(jù)。在本教程中,我們將介紹如何使用Rust語言操作Chrome瀏覽器的SQLite數(shù)據(jù)。 基礎(chǔ)用法 在開始之前,我們需要安裝
    的頭像 發(fā)表于 09-19 16:28 ?2554次閱讀

    Rust GUI實(shí)踐之Rust-Qt模塊

    開發(fā)者創(chuàng)建高質(zhì)量的應(yīng)用程序,包括圖形界面、網(wǎng)絡(luò)、數(shù)據(jù)等方面。 Rust-Qt 的優(yōu)勢(shì)在于 Rust 語言的安全性和高性能,以及 Qt 框架的強(qiáng)大功能和跨平臺(tái)性。使用
    的頭像 發(fā)表于 09-30 16:43 ?1665次閱讀

    如何在Rust中連接和使用MySQL數(shù)據(jù)

    MySQL是一個(gè)廣泛使用的關(guān)系型數(shù)據(jù)Rust作為一門相對(duì)較新的系統(tǒng)級(jí)編程語言,具有C語言般的高性能、安全、并發(fā)等特性,因此與MySQL一起使用是一種非常有趣的選擇。在本教程中,我們將手把手地展示
    的頭像 發(fā)表于 09-30 17:05 ?1769次閱讀

    如何使用Rust標(biāo)準(zhǔn)和structopt來處理控制臺(tái)參數(shù)

    Rust是一種安全、高效的系統(tǒng)編程語言,其標(biāo)準(zhǔn)以及外部提供了很多處理控制臺(tái)參數(shù)的方式。在本篇文章中,我們將分別介紹如何使用Rust
    的頭像 發(fā)表于 09-20 11:13 ?1409次閱讀

    Rust的多線程編程概念和使用方法

    Rust是一種強(qiáng)類型、高性能的系統(tǒng)編程語言,其官方文檔中強(qiáng)調(diào)了Rust標(biāo)準(zhǔn)具有良好的并發(fā)編程支持。Thread是Rust中的一種并發(fā)編程
    的頭像 發(fā)表于 09-20 11:15 ?1025次閱讀

    如何利用C語言去調(diào)用rust靜態(tài)

    感覺比較合適。但如果把主要工作切過來,感覺Rust目前又太荒蕪了,而且上面的問題也同樣存在。嘗試了解到Rust可以編譯成靜態(tài),于是動(dòng)了只用Rust實(shí)現(xiàn)其中一小部分
    發(fā)表于 06-21 10:27

    Rust代碼中加載靜態(tài)時(shí),出現(xiàn)錯(cuò)誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    我正在 MCUXpresso IDE 中創(chuàng)建一個(gè)靜態(tài)。我正在使用 redlib 在我的代碼中導(dǎo)入 ` [i]stdlib.h`。它成功地構(gòu)建了一個(gè)靜態(tài)。但是,靜態(tài)中未定義一些標(biāo)準(zhǔn)
    發(fā)表于 06-09 08:44

    Rust相比Go的優(yōu)劣勢(shì)

    Rust可以做內(nèi)聯(lián)匯編,Go不行(Rust的SIMD也在開發(fā)中,這種事情你不會(huì)用Go做)。
    發(fā)表于 06-29 11:19 ?4021次閱讀

    Rust GUI 發(fā)展現(xiàn)狀

    Rust GUI 發(fā)展現(xiàn)狀 最近有一篇關(guān)于 Rust GUI 的博客,這不,kas?這個(gè)? Another GUI toolkit ?框架也針對(duì) Rust 的 GUI 框架現(xiàn)狀進(jìn)行了
    的頭像 發(fā)表于 12-21 15:00 ?2686次閱讀

    Chromium正式開始支持Rust

    ? Chromium 正式開始支持 Rust 目前的支持只是第一階段,在C++代碼中使用Rust寫的第三方(編譯成.so)。估計(jì)明年Chromium的二進(jìn)制發(fā)行文件中會(huì)包含rust
    的頭像 發(fā)表于 01-14 10:04 ?1024次閱讀

    Rust的內(nèi)部工作原理

    : google發(fā)布的 libtracecmd Rust wrapper 這個(gè)是libtracecmd的Rust wrapper,它允許編寫程序來分析由trace-cmd 生成的Linux的ftrace數(shù)據(jù)。 github地址
    的頭像 發(fā)表于 06-14 10:34 ?839次閱讀
    <b class='flag-5'>Rust</b>的內(nèi)部工作原理

    基于Rust的Log日志介紹

    Rust是一門系統(tǒng)級(jí)編程語言,因其安全性、高性能和并發(fā)性而備受歡迎。在Rust應(yīng)用程序中,日志記錄是一項(xiàng)非常重要的任務(wù),因?yàn)樗梢詭椭_發(fā)人員了解應(yīng)用程序的運(yùn)行情況并解決問題。Rust的Log
    的頭像 發(fā)表于 09-19 14:49 ?3572次閱讀

    FastTime-純Rust編寫的高并發(fā)快速時(shí)間

    FastTime, 純Rust編寫的快速時(shí)間, 并發(fā): 2800萬+/秒. 一、組件
    的頭像 發(fā)表于 11-06 09:23 ?688次閱讀

    基于Rust的嵌入式符合ACID的鍵值數(shù)據(jù)

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數(shù)據(jù)
    的頭像 發(fā)表于 12-28 11:29 ?914次閱讀
    皇冠足球比分| 百家乐官网桌码合| 三公百家乐玩法| 海盐县| 德州扑克 玩法| 新彩百家乐的玩法技巧和规则| 百家乐赌场老千| G3百家乐官网的玩法技巧和规则 | k7娱乐城开户| 威尼斯人娱乐场官网是多少| 百家乐官网是个什么样的游戏| 江口县| 百家乐外挂程式| 网络百家乐官网诈骗| 鼎丰娱乐城| 网上赌博| 乐中百家乐的玩法技巧和规则 | tt娱乐城网站| 谈大发888风水和运气| 大发888微信公众号2| 大发888真人网址的微博| 百家乐庄闲庄庄闲| 百家乐线上真人游戏| 百家乐官网破解分| 百家乐官网计划软件| 百家乐官网三路法| 百家乐官网推二八杠| 赌场百家乐官网赢钱| 百家乐官网龙虎台布作弊技巧| 基础百家乐官网博牌| 百家乐官网游戏什么时间容易出对 | 赙彩百家乐游戏规则| 七胜百家乐官网娱乐平台| 单机棋牌游戏下载| 墨玉县| 百家乐官网盈利分析路单| 哪个百家乐官网网站信誉好| 百家乐官网贴士介绍| 百家乐电投网站| 死海太阳城酒店| 大发888免费下载|