赞
踩
本书摘自《深入RUST标准库》,已经全网发售,恳请支持
RUST无疑是编程语言史中最难学的高级语言,在仅依靠静态编译的前提下实现一门安全的编程语言,这是必须付出的代价。无论如何,成为一门编程语言的老手的最佳办法就是深入分析,学习,理解优秀的代码,那RUST标准库的代码必然是不可绕过的最佳教材。另外,掌握RUST也必然意味对标准库的熟练掌握,深入了解标准库接口后面的秘密无疑能帮助我们更好的掌握如何使用标准库。
本书主要是对RUST标准库代码进行分析,希望通过对标准库的学习,分析,能让读者对RUST代码的编写技巧,规则有更好的理解,为读者成为RUST老手奠定基础。
本书不适合初级程序员,本书针对的最佳对象是资深的C/C++程序员, 转学RUST。本书也适合已经采用RUST编写了一段时间程序,但希望对RUST有更深的了解,尤其是希望进行操作系统内核编程或通用编程框架编程的程序员。对于Java/python/go等语言的资深程序员,本书可以作为RUST与其他语言相比较的一个参考。阅读本书之前,读者最好已经学习过官方教程,中文翻译版链接如下RUST程序设计语言。本书不是标准库参考手册,如需要参考手册,中文翻译版链接如下RUST标准库参考手册。本书难度应该属于死灵书级别,中文翻译版死灵书链接如下RUST秘典
对于代码的解析,以代码中文注释的方式放在本书的代码中。
RUST语言的设计目标是操作系统内核级的系统编程语言,保证高性能,同时又具备现代编程语言的语法特点, 在编译阶段就保证内存安全,并发安全,分支安全等安全性。
现代高级语言的标准库实际上是语言的一个组成部分,很多语言的特性实际是由标准库实现。但RUST与其他采用GC方案的语言不同,其他语言编程目标是在操作系统之上运行的用户态程序,只需要考虑一种模型。RUST的编程目标要加上操作系统内核,需要考虑内核与用户态两种模型。C语言在解决这个问题的方法是只提供用户态的标准库,操作系统内核的库由个操作系统自行实现。
RUST的现代语言特性决定了标准库无法象C语言那样把操作系统内核及用户态程序区分成完全独立的两个部分,所以只能更细致的设计,做模块化的处理。RUST标准库体系分为三个模块:语言核心库–core库; 动态数据容器类型–alloc库;用户态 std库。
RUST语言核心库,适用于操作系统内核及用户态,包括RUST的基础类型,基本Trait, 类型行为函数,其他函数等内容。core库是硬件架构和操作系统无关的可移植库。主要内容:
包括内存操作函数,算数函数,位操作函数等, 这些函数通常与CPU硬件架构紧密相关,且一般需要汇编来提供最佳性能。 intrinsic函数实际上也是对CPU指令的屏蔽层。
推荐这个链接
本节给出core库中的Trait一览
主要是各种用于表达式的RUST符号重载,包括算数计算符号,逻辑运算符号,位操作符号,解引用(*)符号, [index]数组下标符号, ../start..end/start../start..=end/..end/..=end
Range符号, ?号,||{…}闭包符号等,RUST原则是所有的运算符号都要能重载, 所以所有运算操作都定义了重载Trait。
如果类型结构中的每一个变量都实现了该Trait, 则此结构的该Trait可通过派生宏实现
Clone, Copy: Copy浅复制,Clone提供深复制
Debug: 类型的格式化输出
Default: 类型的default值,
Eq, Ord,PartialEQ, PartialOrd: 实现后可以对类型的变量做大,小,相等比较
Sync, Send: 实现此Trait的类型变量的引用可以安全在线程间共享
Hash: 实现结构的整体Hash值,这个Trait Hash是因为复杂才被加入,意义没有前面的大
迭代器,RUST基础构架之一,也是RUST所有学习资料的重点。不赘述,本书后面章节将关注其代码实现。
AsRef, AsMut, From,Into,TryFrom,TryInto, FloatToInt, FromStr
此处略,后面章节单独做分析
此处略,后面章节单独分析
此处略,后面章节单独分析
包括整数类型,浮点类型,布尔类型,字符类型,单元类型,内容主要是实现运算符Trait, 类型转换Trait, 派生宏Trait等,字符类型包括对unicode,ascii的不同编码的处理。整数类型有大小端变换的处理。
这些类型对Iterator Trait, 运算符Trait, 类型转换Trait, 派生宏Trait的实现。同时,实现了基于这些数据结构的一些操作函数。这些函数可具体参考std库说明文档,都是熟悉的内容。后继对于RUST实现中的一些特殊点将专节说明。
RUST安全特性的重点,也是各种学习资料的重点,不赘述,后面章节将关注其一些代码实现
alloc, mem, ptr等模块,RUST的内存操作,后继章节重点详述。
字符串str,string,fmt, panic, debug, log等
Duration等
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是在操作系统支撑下运行的只适用于用户态程序的库,core库实现的内容基本在std库也有对应的实现。其他内容主要是将操作系统系统调用封装为适合rust特征的结构和Trait,包括:
1.进程,线程库
2.网络库
3.文件操作库
4.环境变量及参数
5.互斥与同步库,读写锁
6.定时器
7.输入输出的数据结构,
8.系统事件,对epoll,kevent等的封装
可以将std库看做基本常用的容器类型及操作系统封装库。
RUST的目标和现代编程语言的特点决定了它的库需要仔细的模块化设计。RUST的alloc库及std库都是基于core库。RUST的库设计非常巧妙和仔细,使得RUST完美的实现了对各种硬件架构平台的兼容,对各种操作系统平台的兼容。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。