精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Rust的標準庫的功能劃分

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

Linux的層級架構

每個操作系統都有一個內核,內核封裝了底層硬件設備管理、內存管理、網絡數據協議轉化和收發傳輸、文件系統讀寫等。從這個圖可以看到,內核將系統硬件與應用程序進程連接起來,隱藏了上層下層交互的一些細節,各司其職。

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

這些分層包括:

用戶空間程序

編譯器

終端

防火墻

系統調用的跨平臺API(特定于平臺的系統調用包裝API)

Rust標準庫

libc(或等效的API)

kernel,操作系統的核心模塊

系統資源

內存

文件系統

網絡

硬件和其他設備(包括鍵盤、鼠標、監視器、磁盤驅動器

Rust的標準庫的功能劃分

而Rust標準庫,很好的利用了操作系統內核提供的API。

Rust標準庫是Rust程序進入Linux操作系統內核函數的主要接口,它在內部使用libc(在Windows系統使用其他等效的庫)來調用內核提供的系統調用。

從Rust程序中發起系統調用,以實現管理和操作各種系統資源(如圖)。

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

libc(或其變體)為類UNIX操作系統上的系統調用提供了一個包裝器,如Linux內核實現了POSIX標準指定的數百個POSIX API(對于Windows,系統調用有等效的API,也實現了POSIX標準[1])。

作為標準庫,Rust標準庫是跨平臺的,Rust標準庫的系統調用的細節是從Rust開發人員那里抽象出來的。Rust也支持不依賴于標準庫的運行方式(no_std 方式),Rust直接操控底層硬件(如應用在嵌入式系統開發場景),此時Rust就做了操作系統本身的工作。

對于大部分軟件開發工程師而言,他們用Rust主要開發應用層軟件,也就是運行在用戶空間的程序。它們基于標準庫編寫,實現各種業務功能。應用層的軟件并非所有模塊和函數都涉及到系統調用(例如一些用于操作字符串和處理錯誤的函數,就無需調用系統調用)。

Rust標準庫包括幾大領域的模塊,包括四大類:

第一類,Rust語言原語

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

如有符號整數、布爾值、浮點數、字符、字符串、數組、元組、切片。這些由Rust編譯器負責實現。

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

Rust標準包括原語,并在它們之上構建。

第二類,alloc crate

與堆分配值的內存分配相關的類型、函數和特征。

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

第三類,core crate

作為Rust標準庫的基礎。充當Rust語言與標準庫之間的鏈接,提供在Rust原語之上實現的類型、特征、常量和函數,并為所有Rust代碼提供基礎構建塊,它是跨平臺的,沒有任何指向操作系統或其他外部依賴的鏈接。由于較少直接用到core crate,所以本文不做過多介紹。

第四類,模塊(標準庫的其他crate)

是標準庫的一部分,模塊crate包括針對并發、I/O,文件系統、網絡、異步I/O、錯誤處理等功能,以及與特定操作系統相關的函數,Rust的官網對std有專門的文檔[2]。例如

為用戶程序在多個線程上并發運行的功能在std::thread模塊中;

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

針對特定os的模塊,主要在std::os模塊中實現。

下圖展示了Rust標準庫各個領域功能涉及到的具體std模塊(如std::io、std::os等)

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

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

Rust的并發控制相關模塊 conurrency:

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

Rust的內存管理相關模塊 memory management:

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

Rust的文件系統操作相關模塊 File system:

模塊名 說明
std::fs 模塊[17] 提供了與文件系統操作相關的功能,包括文件和目錄的創建、讀取、寫入和刪除等操作。
std::path 模塊[18] 提供了與文件路徑相關的功能,包括路徑的解析、構造和操作。

Rust的數據處理相關模塊 data processing:

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

Rust的錯誤處理相關模塊 Error handling:

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

Rust的編譯處理相關模塊 compiler:

模塊名 說明
std::hint 模塊[30] 提供了一些用于編譯器提示的宏,用于影響編譯器的優化行為。
std::primitive 模塊[31] 提供了一些基本的類型和函數,用于處理數字、字符和布爾值等基本數據類型。
std::prelude 模塊[32] 包含了一些基本的函數和宏,這些函數和宏在 Rust 標準庫中被廣泛使用,并且在每個 Rust 程序中自動導入。

Rust的跨語言調用相關模塊:FFI

模塊名 說明
std::ffi 模塊[33] 提供了與外部函數接口(Foreign Function Interface,FFI)相關的功能,用于與其他語言或庫進行交互。

Rust的網絡處理功能模塊 Networking:

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

Rust的IO處理模塊:

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

Rust的OS特定的功能模塊:

模塊名 說明
std::os 模塊[36] 提供了與操作系統相關的功能,包括文件系統操作、進程管理和系統信息等。

Rust的時間處理模塊:

模塊名 說明
std::time 模塊[37] 提供了與時間和日期相關的功能,包括時間的表示、解析、轉換和計算等。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 模塊
    +關注

    關注

    7

    文章

    2672

    瀏覽量

    47342
  • Linux
    +關注

    關注

    87

    文章

    11230

    瀏覽量

    208934
  • Rust
    +關注

    關注

    1

    文章

    228

    瀏覽量

    6572

原文標題:Rust的標準庫的功能劃分

文章出處:【微信號:Rust語言中文社區,微信公眾號:Rust語言中文社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何使用Rust連接Redis

    Redis是一款快速、開源、鍵值存儲數據,被廣泛應用于緩存、發布/訂閱系統、定時任務等場景中。Rust提供了很多Redis的客戶端,本教程將會介紹如何使用Rust連接Redis,以
    的頭像 發表于 09-19 16:22 ?2225次閱讀

    如何使用Rust語言操作Chrome瀏覽器的SQLite數據

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

    Rust GUI實踐之Rust-Qt模塊

    開發者創建高質量的應用程序,包括圖形界面、網絡、數據等方面。 Rust-Qt 的優勢在于 Rust 語言的安全性和高性能,以及 Qt 框架的強大功能和跨平臺性。使用
    的頭像 發表于 09-30 16:43 ?1530次閱讀

    如何在Rust中連接和使用MySQL數據

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

    如何使用Rust標準和structopt來處理控制臺參數

    Rust是一種安全、高效的系統編程語言,其標準以及外部提供了很多處理控制臺參數的方式。在本篇文章中,我們將分別介紹如何使用Rust
    的頭像 發表于 09-20 11:13 ?1266次閱讀

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

    Rust是一種強類型、高性能的系統編程語言,其官方文檔中強調了Rust標準具有良好的并發編程支持。Thread是Rust中的一種并發編程
    的頭像 發表于 09-20 11:15 ?927次閱讀

    如何利用C語言去調用rust靜態

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

    Rust代碼中加載靜態時,出現錯誤 ` rust-lld: error: undefined symbol: malloc `怎么解決?

    我正在 MCUXpresso IDE 中創建一個靜態。我正在使用 redlib 在我的代碼中導入 ` [i]stdlib.h`。它成功地構建了一個靜態。但是,靜態中未定義一些標準
    發表于 06-09 08:44

    Rust相比Go的優劣勢

    Rust可以做內聯匯編,Go不行(Rust的SIMD也在開發中,這種事情你不會用Go做)。
    發表于 06-29 11:19 ?3947次閱讀

    Rust GUI 發展現狀

    Rust GUI 發展現狀 最近有一篇關于 Rust GUI 的博客,這不,kas?這個? Another GUI toolkit ?框架也針對 Rust 的 GUI 框架現狀進行了
    的頭像 發表于 12-21 15:00 ?2598次閱讀

    Chromium正式開始支持Rust

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

    Rust的內部工作原理

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

    基于Rust的Log日志介紹

    Rust是一門系統級編程語言,因其安全性、高性能和并發性而備受歡迎。在Rust應用程序中,日志記錄是一項非常重要的任務,因為它可以幫助開發人員了解應用程序的運行情況并解決問題。Rust的Log
    的頭像 發表于 09-19 14:49 ?3408次閱讀

    FastTime-純Rust編寫的高并發快速時間

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

    基于Rust的嵌入式符合ACID的鍵值數據

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的鍵值數據
    的頭像 發表于 12-28 11:29 ?863次閱讀