深入RUST标准库内核(一)标准库内容概述

本书摘自《深入RUST标准库》,已经全网发售,恳请支持

深入RUST标准库内核

  • 引言
  • 概述
    • 本书目的
    • 目标读者
    • 本书约定
  • RUST标准库体系概述
    • core库
      • 编译器内置intrinsics函数
      • 基本Trait
        • 运算符(ops)Trait
        • 编译器内部实现的派生宏 Trait
        • Iterator
        • 类型转换Trait
        • 字符串Trait
        • 异步编程Trait
        • 内存相关Trait
      • 基本数据类型
      • 数组、切片及Range
      • Option/Result/Marker等关键的语言级别Enum类型
      • RUST内存相关类型及内容
      • RUST字符串相关库
      • RUST时间库
    • alloc库
    • std库
    • 小结

引言

RUST无疑是编程语言史中最难学的高级语言,在仅依靠静态编译的前提下实现一门安全的编程语言,这是必须付出的代价。无论如何,成为一门编程语言的老手的最佳办法就是深入分析,学习,理解优秀的代码,那RUST标准库的代码必然是不可绕过的最佳教材。另外,掌握RUST也必然意味对标准库的熟练掌握,深入了解标准库接口后面的秘密无疑能帮助我们更好的掌握如何使用标准库。

概述

本书目的

本书主要是对RUST标准库代码进行分析,希望通过对标准库的学习,分析,能让读者对RUST代码的编写技巧,规则有更好的理解,为读者成为RUST老手奠定基础。

目标读者

本书不适合初级程序员,本书针对的最佳对象是资深的C/C++程序员, 转学RUST。本书也适合已经采用RUST编写了一段时间程序,但希望对RUST有更深的了解,尤其是希望进行操作系统内核编程或通用编程框架编程的程序员。对于Java/python/go等语言的资深程序员,本书可以作为RUST与其他语言相比较的一个参考。阅读本书之前,读者最好已经学习过官方教程,中文翻译版链接如下RUST程序设计语言。本书不是标准库参考手册,如需要参考手册,中文翻译版链接如下RUST标准库参考手册。本书难度应该属于死灵书级别,中文翻译版死灵书链接如下RUST秘典

本书约定

对于代码的解析,以代码中文注释的方式放在本书的代码中。

RUST标准库体系概述

RUST语言的设计目标是操作系统内核级的系统编程语言,保证高性能,同时又具备现代编程语言的语法特点, 在编译阶段就保证内存安全,并发安全,分支安全等安全性。
现代高级语言的标准库实际上是语言的一个组成部分,很多语言的特性实际是由标准库实现。但RUST与其他采用GC方案的语言不同,其他语言编程目标是在操作系统之上运行的用户态程序,只需要考虑一种模型。RUST的编程目标要加上操作系统内核,需要考虑内核与用户态两种模型。C语言在解决这个问题的方法是只提供用户态的标准库,操作系统内核的库由个操作系统自行实现。
RUST的现代语言特性决定了标准库无法象C语言那样把操作系统内核及用户态程序区分成完全独立的两个部分,所以只能更细致的设计,做模块化的处理。RUST标准库体系分为三个模块:语言核心库–core库; 动态数据容器类型–alloc库;用户态 std库。

core库

RUST语言核心库,适用于操作系统内核及用户态,包括RUST的基础类型,基本Trait, 类型行为函数,其他函数等内容。core库是硬件架构和操作系统无关的可移植库。主要内容:

编译器内置intrinsics函数

包括内存操作函数,算数函数,位操作函数等, 这些函数通常与CPU硬件架构紧密相关,且一般需要汇编来提供最佳性能。 intrinsic函数实际上也是对CPU指令的屏蔽层。

基本Trait

推荐这个链接
本节给出core库中的Trait一览

运算符(ops)Trait

主要是各种用于表达式的RUST符号重载,包括算数计算符号,逻辑运算符号,位操作符号,解引用(*)符号, [index]数组下标符号, ../start..end/start../start..=end/..end/..=end Range符号, ?号,||{…}闭包符号等,RUST原则是所有的运算符号都要能重载, 所以所有运算操作都定义了重载Trait。

编译器内部实现的派生宏 Trait

如果类型结构中的每一个变量都实现了该Trait, 则此结构的该Trait可通过派生宏实现
Clone, Copy: Copy浅复制,Clone提供深复制
Debug: 类型的格式化输出
Default: 类型的default值,
Eq, Ord,PartialEQ, PartialOrd: 实现后可以对类型的变量做大,小,相等比较
Sync, Send: 实现此Trait的类型变量的引用可以安全在线程间共享
Hash: 实现结构的整体Hash值,这个Trait Hash是因为复杂才被加入,意义没有前面的大

Iterator

迭代器,RUST基础构架之一,也是RUST所有学习资料的重点。不赘述,本书后面章节将关注其代码实现。

类型转换Trait

AsRef, AsMut, From,Into,TryFrom,TryInto, FloatToInt, FromStr

字符串Trait

此处略,后面章节单独做分析

异步编程Trait

此处略,后面章节单独分析

内存相关Trait

此处略,后面章节单独分析

基本数据类型

包括整数类型,浮点类型,布尔类型,字符类型,单元类型,内容主要是实现运算符Trait, 类型转换Trait, 派生宏Trait等,字符类型包括对unicode,ascii的不同编码的处理。整数类型有大小端变换的处理。

数组、切片及Range

这些类型对Iterator Trait, 运算符Trait, 类型转换Trait, 派生宏Trait的实现。同时,实现了基于这些数据结构的一些操作函数。这些函数可具体参考std库说明文档,都是熟悉的内容。后继对于RUST实现中的一些特殊点将专节说明。

Option/Result/Marker等关键的语言级别Enum类型

RUST安全特性的重点,也是各种学习资料的重点,不赘述,后面章节将关注其一些代码实现

RUST内存相关类型及内容

alloc, mem, ptr等模块,RUST的内存操作,后继章节重点详述。

RUST字符串相关库

字符串str,string,fmt, panic, debug, log等

RUST时间库

Duration等

alloc库

alloc库主要实现需要进行动态堆内存申请的智能指针类型,集合类型及他们的行为,函数,Trait等内容,仅建立在core库模块之上。std会对alloc模块库的内容做重新的封装。alloc库适用于操作系统内核及用户态程序。
包括:
1.基本内存申请;Allocator Trait; Allocator的实现结构Global
2.基础智能指针:Box, Rc,
3.动态数组内存类型: RawVec, Vec
4.字符串类型:&str, String
5.并发编程指针类型: Arc
6.指针内访问类型: Cell, RefCell
还有些其他类型,一般仅在标准库内部使用,后文在需要的时候再介绍及分析。

std库

std是在操作系统支撑下运行的只适用于用户态程序的库,core库实现的内容基本在std库也有对应的实现。其他内容主要是将操作系统系统调用封装为适合rust特征的结构和Trait,包括:
1.进程,线程库
2.网络库
3.文件操作库
4.环境变量及参数
5.互斥与同步库,读写锁
6.定时器
7.输入输出的数据结构,
8.系统事件,对epoll,kevent等的封装
可以将std库看做基本常用的容器类型及操作系统封装库。

小结

RUST的目标和现代编程语言的特点决定了它的库需要仔细的模块化设计。RUST的alloc库及std库都是基于core库。RUST的库设计非常巧妙和仔细,使得RUST完美的实现了对各种硬件架构平台的兼容,对各种操作系统平台的兼容。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果需要在没有网络连接的环境下进行 Rust 内核开发,可以使用离线安装的方式,下面是具体步骤: 1. 下载 Rust 工具链 首先,在有网络连接的环境下,需要下载 Rust 工具链的离线安装包。可以从 Rust 官网下载对应平台的离线安装包:https://www.rust-lang.org/tools/install 下载完成后,将安装包保存到本地。 2. 安装 Rust 工具链 将 Rust 工具链的离线安装包拷贝到目标机器上,执行安装命令: ``` ./rustup-init --no-modify-path -y --default-toolchain none ``` 这将会安装 Rust 工具链,并且不会修改环境变量 PATH。 3. 配置 Rust 工具链 为了构建内核,需要使用 `xargo` 工具,因此需要将 Rust 工具链配置为使用 `xargo` 工具。可以使用以下命令配置 Rust 工具链: ``` rustup toolchain link kernel /path/to/rustc --no-self-update --force ``` 其中,`/path/to/rustc` 是 Rust 工具链的安装路径,可以使用绝对路径或相对路径,`kernel` 是自定义的 Rust 工具链名称。 4. 安装 `xargo` 工具 `xargo` 是一个 Rust 工具,可以用于构建 Rust 内核。使用以下命令安装 `xargo` 工具: ``` cargo install --force --path /path/to/xargo ``` 其中,`/path/to/xargo` 是 `xargo` 工具的源代码路径。 5. 安装 Rust 标准库 默认情况下,Rust 工具链是不包含 Rust 标准库的,需要手动安装。可以使用以下命令安装 Rust 标准库: ``` rustup component add rust-src --toolchain kernel ``` 其中,`--toolchain` 参数指定了要安装的 Rust 工具链。如果没有指定该参数,默认会使用当前的 Rust 工具链。 安装完成后,就可以使用 `xargo` 工具进行构建了,例如: ``` xargo build --target x86_64-unknown-none --release --no-default-features --features myfeature ``` 其中,`--target` 参数指定了目标平台,`x86_64-unknown-none` 表示 x86_64 架构的裸机环境。`--release` 参数表示使用优化编译。`--no-default-features` 参数表示不使用 Rust 标准库的默认特性,`--features myfeature` 参数可以指定使用特定的 Rust 标准库特性。 以上就是在离线环境下配置 Rust 工具链、`xargo` 工具、Rust 标准库的步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

任成珺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值