Linux的層級架構(gòu)
每個操作系統(tǒng)都有一個內(nèi)核,內(nèi)核封裝了底層硬件設(shè)備管理、內(nèi)存管理、網(wǎng)絡(luò)數(shù)據(jù)協(xié)議轉(zhuǎn)化和收發(fā)傳輸、文件系統(tǒng)讀寫等。從這個圖可以看到,內(nèi)核將系統(tǒng)硬件與應(yīng)用程序進程連接起來,隱藏了上層下層交互的一些細節(jié),各司其職。
這些分層包括:
用戶空間程序
編譯器
終端
防火墻
系統(tǒng)調(diào)用的跨平臺API(特定于平臺的系統(tǒng)調(diào)用包裝API)
Rust標準庫
libc(或等效的API)
kernel,操作系統(tǒng)的核心模塊
系統(tǒng)資源
內(nèi)存
文件系統(tǒng)
網(wǎng)絡(luò)
硬件和其他設(shè)備(包括鍵盤、鼠標、監(jiān)視器、磁盤驅(qū)動器)
Rust的標準庫的功能劃分
而Rust標準庫,很好的利用了操作系統(tǒng)內(nèi)核提供的API。
Rust標準庫是Rust程序進入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)用,以實現(xiàn)管理和操作各種系統(tǒng)資源(如圖)。
libc(或其變體)為類UNIX操作系統(tǒng)上的系統(tǒng)調(diào)用提供了一個包裝器,如Linux內(nèi)核實現(xiàn)了POSIX標準指定的數(shù)百個POSIX API(對于Windows,系統(tǒng)調(diào)用有等效的API,也實現(xiàn)了POSIX標準[1])。
作為標準庫,Rust標準庫是跨平臺的,Rust標準庫的系統(tǒng)調(diào)用的細節(jié)是從Rust開發(fā)人員那里抽象出來的。Rust也支持不依賴于標準庫的運行方式(no_std 方式),Rust直接操控底層硬件(如應(yīng)用在嵌入式系統(tǒng)開發(fā)場景),此時Rust就做了操作系統(tǒng)本身的工作。
對于大部分軟件開發(fā)工程師而言,他們用Rust主要開發(fā)應(yīng)用層軟件,也就是運行在用戶空間的程序。它們基于標準庫編寫,實現(xiàn)各種業(yè)務(wù)功能。應(yīng)用層的軟件并非所有模塊和函數(shù)都涉及到系統(tǒng)調(diào)用(例如一些用于操作字符串和處理錯誤的函數(shù),就無需調(diào)用系統(tǒng)調(diào)用)。
Rust標準庫包括幾大領(lǐng)域的模塊,包括四大類:
第一類,Rust語言原語
即Rust Language Primitives:Rust 語言的基本元素或基本類型(如下圖)。
如有符號整數(shù)、布爾值、浮點數(shù)、字符、字符串、數(shù)組、元組、切片。這些由Rust編譯器負責實現(xiàn)。
Rust標準包括原語,并在它們之上構(gòu)建。
第二類,alloc crate
與堆分配值的內(nèi)存分配相關(guān)的類型、函數(shù)和特征。
包括集合(Vec、String等集合)、智能指針類型(Box
第三類,core crate
作為Rust標準庫的基礎(chǔ)。充當Rust語言與標準庫之間的鏈接,提供在Rust原語之上實現(xiàn)的類型、特征、常量和函數(shù),并為所有Rust代碼提供基礎(chǔ)構(gòu)建塊,它是跨平臺的,沒有任何指向操作系統(tǒng)或其他外部依賴的鏈接。由于較少直接用到core crate,所以本文不做過多介紹。
第四類,模塊(標準庫的其他crate)
是標準庫的一部分,模塊crate包括針對并發(fā)、I/O,文件系統(tǒng)、網(wǎng)絡(luò)、異步I/O、錯誤處理等功能,以及與特定操作系統(tǒng)相關(guān)的函數(shù),Rust的官網(wǎng)對std有專門的文檔[2]。例如
為用戶程序在多個線程上并發(fā)運行的功能在std::thread模塊中;
用于處理同步I/O的功能在std::io模塊中提供;
針對特定os的模塊,主要在std::os模塊中實現(xiàn)。
下圖展示了Rust標準庫各個領(lǐng)域功能涉及到的具體std模塊(如std::io、std::os等)
以下著重對第四類的主要 crate 做一介紹,并附上文檔地址
Rust的并發(fā)控制相關(guān)模塊 conurrency:
模塊名 | 說明 |
---|---|
std::env 模塊[3] | 包含與環(huán)境變量交互的功能,包括讀取、設(shè)置和刪除環(huán)境變量。 |
std::sync 模塊[4] | 提供了用于實現(xiàn)線程安全共享狀態(tài)的同步原語,如互斥鎖(Mutex)、原子操作(Atomic)和條件變量(Condvar)。 |
std::thread 模塊[5] | 提供了創(chuàng)建和管理線程的功能,包括線程的創(chuàng)建、 join、spawn 和同步。 |
std::process 模塊[6] | 提供了與操作系統(tǒng)進程交互的功能,包括運行外部命令、啟動新進程以及與進程進行通信。 |
Rust的內(nèi)存管理相關(guān)模塊 memory management:
模塊名 | 說明 |
---|---|
std::alloc 模塊[7] | 提供了內(nèi)存分配器的功能,包括分配和釋放動態(tài)內(nèi)存。 |
std::convert 模塊[8] | 提供了用于不同類型之間轉(zhuǎn)換的工具函數(shù)。 |
std::ptr 模塊[9] | 提供了對指針的操作和轉(zhuǎn)換功能,包括對裸指針的操作。 |
std::borrow 模塊[10] | 提供了用于管理借用的功能,包括&和&mut借用運算符的實現(xiàn)。 |
std::default 模塊[11] | 提供了默認 trait 實現(xiàn)的功能,用于為不提供具體實現(xiàn)的類型提供默認行為。 |
std::rc 模塊[12] | 提供了引用計數(shù)(Reference Counting)的功能,用于實現(xiàn)線程安全的共享內(nèi)存。 |
std::cell 模塊[13] | 提供了可變性的 Cell 和 RefCell 類型,用于在多線程環(huán)境下安全地共享可變狀態(tài)。 |
std::mem 模塊[14] | 提供了與內(nèi)存相關(guān)的功能,包括內(nèi)存布局、內(nèi)存對齊和內(nèi)存操作。 |
std::clone 模塊[15] | 提供了用于實現(xiàn)克?。–lone) trait 的功能,用于復制和克隆復雜的數(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)的功能,包括對 ASCII 字符的操作和轉(zhuǎn)換。 |
std::fmt 模塊[20] | 提供了格式化輸出的功能,包括對各種數(shù)據(jù)類型的格式化和打印。 |
std::num 模塊[21] | 提供了對數(shù)字類型的抽象和操作,包括整數(shù)、浮點數(shù)和復數(shù)等。 |
std::cmp 模塊[22] | 提供了用于比較和排序值的工具,包括比較運算符的實現(xiàn)和排序函數(shù)。 |
std::hash 模塊[23] | 提供了用于計算哈希值的功能,包括對各種數(shù)據(jù)類型的哈希函數(shù)實現(xiàn)。 |
std::ops 模塊[24] | 提供了一些基本的運算符和操作符的實現(xiàn),包括數(shù)學運算符、比較運算符和邏輯運算符等。 |
std::iter 模塊[25] | 提供了迭代器(Iterator)的功能,包括創(chuàng)建和操作迭代器的方法,以及一些常見的迭代器類型。 |
Rust的錯誤處理相關(guān)模塊 Error handling:
模塊名 | 說明 |
---|---|
std::error 模塊[26] | 提供了錯誤處理的功能,包括定義錯誤類型和處理錯誤的方法。 |
std::panic 模塊[27] | 提供了恐慌(Panic)機制,用于處理不可恢復的錯誤情況。 |
std::option 模塊[28] | 提供了 Option 類型,用于表示可能存在或不存在的值,用于處理可能出現(xiàn)空值的情況。 |
std::result 模塊[29] | 提供了 Result 類型,用于表示成功或失敗的情況,通常用于處理可能出現(xiàn)錯誤的函數(shù)返回值。 |
Rust的編譯處理相關(guān)模塊 compiler:
模塊名 | 說明 |
---|---|
std::hint 模塊[30] | 提供了一些用于編譯器提示的宏,用于影響編譯器的優(yōu)化行為。 |
std::primitive 模塊[31] | 提供了一些基本的類型和函數(shù),用于處理數(shù)字、字符和布爾值等基本數(shù)據(jù)類型。 |
std::prelude 模塊[32] | 包含了一些基本的函數(shù)和宏,這些函數(shù)和宏在 Rust 標準庫中被廣泛使用,并且在每個 Rust 程序中自動導入。 |
Rust的跨語言調(diào)用相關(guān)模塊:FFI
模塊名 | 說明 |
---|---|
std::ffi 模塊[33] | 提供了與外部函數(shù)接口(Foreign Function Interface,F(xiàn)FI)相關(guā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)操作、進程管理和系統(tǒng)信息等。 |
Rust的時間處理模塊:
模塊名 | 說明 |
---|---|
std::time 模塊[37] | 提供了與時間和日期相關(guān)的功能,包括時間的表示、解析、轉(zhuǎn)換和計算等。 |
-
模塊
+關(guān)注
關(guān)注
7文章
2695瀏覽量
47431 -
Linux
+關(guān)注
關(guān)注
87文章
11292瀏覽量
209318 -
Rust
+關(guān)注
關(guān)注
1文章
228瀏覽量
6598
原文標題:Rust的標準庫的功能劃分
文章出處:【微信號:Rust語言中文社區(qū),微信公眾號:Rust語言中文社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論