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

2023-05-16

本书github链接:
inside-rust-std-library
本书前面章节:
深入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完美的实现了对各种硬件架构平台的兼容,对各种操作系统平台的兼容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深入RUST标准库内核(一)标准库内容概述 的相关文章

随机推荐

  • maven镜像源及代理配置

    在公司使用网络一般需要设置代理 xff0c 我在idea中创建springboot工程时 xff0c 发现依赖下载不了 xff0c 原以为只要浏览器设置代理 xff0c 其他的网络访问都会走代理 xff0c 经过查资料设置了以下几个地方后工
  • IDEA SpotBugs代码安全审计插件

    IDEA SpotBugs代码安全审计插件 在寻找idea代码审计插件的时候 xff0c 发现Findbugs已经停止更新 xff0c 无法在idea2020 01版本运行 xff0c 由此找到SpotBugs SpotBugs介绍 Spo
  • 洛谷P1233 木棍加工

    题目描述 一堆木头棍子共有n根 xff0c 每根棍子的长度和宽度都是已知的 棍子可以被一台机器一个接一个地加工 机器处理一根棍子之前需要准备时间 准备时间是这样定义的 xff1a 第一根棍子的准备时间为1分钟 xff1b 如果刚处理完长度为
  • 如何用python写一个计算日期间隔的程序?

    如何用python写一个计算日期间隔的程序 xff1f 文章目录 如何用python写一个计算日期间隔的程序 xff1f 前言问题梳理问题解决写在后面 前言 为什么想起来写一个这样的程序呢 xff1f 前几天聊天的时候 xff0c 突然想计
  • Ubuntu 中软件包缓存文件损坏问题

    终端输入 xff1a sudo apt get update 出现如下问题 解决方法 xff1a 输入 sudo rm rf var lib apt lists
  • linux开机自启系统服务的大致原理

    Linux启动系统服务 init启动 init读取 etc inittab文件 xff0c 获取运行等级 span class token comment The default runlevel 启动时的运行等级 span id 5 in
  • apache2 配置https

    配置Apache2 https 开启ssl模块 span class token function sudo span a2enmod ssl 启用ssl站点 span class token function sudo span a2en
  • JAVA对数字+字符串,中文一二三四等特殊格式字符串进行特殊排序

    提示 xff1a 对数字 43 字符串 中文一二三四 格式字符串去重 排序 重组 可以对customSort 类的46 53行进行修改 查看新排序效果 代码如下 xff08 示例 xff09 1 SortTest 类 xff1a span
  • Linux安装Jenkins

    手把手教你在Linux上安装jenkins xff0c 废话不多说 xff0c 直接上教程 1 xff0c 用windows到官网下载jenkins 2 346 1 1 noarch rpm xff0c 下载链接 xff1a https w
  • 舵机控制(STM32F103C8T6)

    前言 本文是以STM32F103C8T6作为主控芯片 xff0c 通过PB6端口输出PWM xff0c 实现控制180 舵机 一 舵机控制原理 xff08 一 xff09 概述 舵机是一种位置伺服驱动器器 xff0c 是一种带有输出轴的小装
  • 设计模式详解:建造者模式

    今天来看一下创建新模式中的第五种模式 xff1a 建造者模式 仍然是先看两张图 xff0c 复习模式类型 xff0c 加深记忆 定义 xff1a 建造者模式 xff1a 将一个复杂对象的构建与它的表示分离 xff0c 使得同样的构建过程可以
  • 动态数码管显示(STM32F103C8T)

    一 前言 本实验是通过使用STM32F103C8T6作为主控 xff0c 八段数码 xff08 共阴极 xff09 是通过74HC245双向缓冲器控制数段选 xff0c 74HC138译码器控制位选 每个数码管显示与位号相对应的数字 xff
  • 取字模软件的使用

    1 点击运行 取字模软件 EXE 2 输入文本 xff0c 完成后按Ctrl 43 Enter按键结束输入 xff0c 如下图 3 设置字体显示的大小16 16 xff0c 如下图 xff1a 4 设置字体格式 xff0c 字体大小 xff
  • 51单片机应用篇-- --数码管60秒计时,独立按键可调

    开篇先说一句废话 本旺名字叫萨摩耶 xff0c xff0c Please 叫我旺财 xff0c xff0c xff0c 哈哈 xff0c 招财进宝嘛 xff01 缘由 本来按照我的学习计划 xff0c 我现在应该是单片机的学习过程 xff0
  • SOLIDWORKS生成URDF文件后部分文件散乱分布

    问题 xff1a SOLIDWORKS生成URDF文件在正确配置关节坐标系的情况下 xff0c 依然出现了部分零件散乱分布的情况 xff0c 例如图所示 xff1a 问题原因 xff1a 同样的零件多次装配 解决办法 xff1a 要插入同一
  • Matlab笔记:Matlab function生成C代码并运行

    1 Matlab函数 xff0c 输入 x y z roll pitch yaw xff0c 输出out为8 6的数组 2 点击Matlab coder 3 选择要生成的函数 4 定义输入类型 xff0c 输入的六个数选择double数值
  • matlab接收ROS发布的话题通信数据并实时画图

    版本说明 matlab R2021b ROS noetic matlab与ROS通信连接 在matlab和ROS连接之前 xff0c 需要先运行ROS核心 xff0c 记录ROS端的IP地址 再查找并记录matlab端 xff08 我这里是
  • simulink联合STM32CubeMX开发串口通信程序

    摘要 使用SIMULINK联合STM32CubeMX生成STM32F407串口发送数据代码 xff0c 发送的数据为正弦函数波形 再用SIMULINK写一个串口接收数据模型 xff0c 接收来自STM32发送的数据 xff0c 最后绘制出波
  • element 默认主题样式

    使用方法 span class token keyword import span ElementUI span class token keyword from span span class token string 39 elemen
  • 深入RUST标准库内核(一)标准库内容概述

    本书github链接 inside rust std library 本书前面章节 xff1a 深入RUST标准库内核 xff08 序言 深入RUST标准库内核 引言概述本书目的目标读者本书约定 RUST标准库体系概述core库编译器内置i