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

    文章

    2678

    浏览量

    47376
  • Linux
    +关注

    关注

    87

    文章

    11236

    浏览量

    209024
  • Rust
    +关注

    关注

    1

    文章

    228

    浏览量

    6581

原文标题:Rust的标准库的功能划分

文章出处:【微信号:Rust语言中文社区,微信公众号:Rust语言中文社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    如何使用Rust连接Redis

    Redis是一款快速、开源、键值存储数据,被广泛应用于缓存、发布/订阅系统、定时任务等场景中。Rust提供了很多Redis的客户端,本教程将会介绍如何使用Rust连接Redis,以
    的头像 发表于 09-19 16:22 2245次阅读

    如何使用Rust语言操作Chrome浏览器的SQLite数据

    的浏览器,它使用SQLite数据来存储浏览器的历史记录、书签、密码等数据。在本教程中,我们将介绍如何使用Rust语言操作Chrome浏览器的SQLite数据。 基础用法 在开始之前,我们需要安装
    的头像 发表于 09-19 16:28 2426次阅读

    Rust GUI实践之Rust-Qt模块

    开发者创建高质量的应用程序,包括图形界面、网络、数据等方面。 Rust-Qt 的优势在于 Rust 语言的安全性和高性能,以及 Qt 框架的强大功能和跨平台性。使用
    的头像 发表于 09-30 16:43 1555次阅读

    如何在Rust中连接和使用MySQL数据

    MySQL是一个广泛使用的关系型数据Rust作为一门相对较新的系统级编程语言,具有C语言般的高性能、安全、并发等特性,因此与MySQL一起使用是一种非常有趣的选择。在本教程中,我们将手把手地展示
    的头像 发表于 09-30 17:05 1629次阅读

    如何使用Rust标准和structopt来处理控制台参数

    Rust是一种安全、高效的系统编程语言,其标准以及外部提供了很多处理控制台参数的方式。在本篇文章中,我们将分别介绍如何使用Rust
    的头像 发表于 09-20 11:13 1284次阅读

    Rust的多线程编程概念和使用方法

    Rust是一种强类型、高性能的系统编程语言,其官方文档中强调了Rust标准具有良好的并发编程支持。Thread是Rust中的一种并发编程
    的头像 发表于 09-20 11:15 936次阅读

    如何利用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 3951次阅读

    Rust GUI 发展现状

    Rust GUI 发展现状 最近有一篇关于 Rust GUI 的博客,这不,kas 这个  Another GUI toolkit  框架也针对 Rust 的 GUI 框架现状进行了
    的头像 发表于 12-21 15:00 2611次阅读

    Chromium正式开始支持Rust

      Chromium 正式开始支持 Rust 目前的支持只是第一阶段,在C++代码中使用Rust写的第三方(编译成.so)。估计明年Chromium的二进制发行文件中会包含rust
    的头像 发表于 01-14 10:04 954次阅读

    Rust的内部工作原理

    : google发布的 libtracecmd Rust wrapper 这个是libtracecmd的Rust wrapper,它允许编写程序来分析由trace-cmd 生成的Linux的ftrace数据。 github地址
    的头像 发表于 06-14 10:34 776次阅读
    <b class='flag-5'>Rust</b>的内部工作原理

    基于Rust的Log日志介绍

    Rust是一门系统级编程语言,因其安全性、高性能和并发性而备受欢迎。在Rust应用程序中,日志记录是一项非常重要的任务,因为它可以帮助开发人员了解应用程序的运行情况并解决问题。Rust的Log
    的头像 发表于 09-19 14:49 3431次阅读

    FastTime-纯Rust编写的高并发快速时间

    FastTime, 纯Rust编写的快速时间, 并发: 2800万+/秒. 一、组件
    的头像 发表于 11-06 09:23 614次阅读

    基于Rust的嵌入式符合ACID的键值数据

    surrealkv -- 基于 Rust 的 low level、版本化、嵌入式、符合 ACID 的键值数据
    的头像 发表于 12-28 11:29 868次阅读