From 27da891aa24c4b18d421d3a1ece8e0cac2f8d112 Mon Sep 17 00:00:00 2001 From: lisauu <105027808+lisauu@users.noreply.github.com> Date: Tue, 11 Apr 2023 11:13:14 +0800 Subject: [PATCH 1/5] =?UTF-8?q?Update=2002-=E5=86=85=E5=AD=98.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "02-\345\206\205\345\255\230.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/02-\345\206\205\345\255\230.md" "b/02-\345\206\205\345\255\230.md" index 0294736..6232ab3 100644 --- "a/02-\345\206\205\345\255\230.md" +++ "b/02-\345\206\205\345\255\230.md" @@ -255,7 +255,7 @@ RUST也提供了一些其他的裸指针创建关联函数: `ptr::invalid(addr:usize)->*mut T` 将一个数值作为裸指针,指明这是一个无效的裸指针。 `ptr::invalid_mut(addr:usize)->*mut T` 将一个数值作为可变裸指针,指明这是一个无效的指针。 -以上两个函数通常是将指针变量用作他途以提高新能 +以上两个函数通常是将指针变量用作他途以提高性能 `ptr::from_raw_parts(data_address: *const (), metadata: ::Metadata) -> *const T` 从内存地址和元数据创建裸指针 From c8897642a3faea6a1c55ffbdd849291258f16b95 Mon Sep 17 00:00:00 2001 From: lisauu <105027808+lisauu@users.noreply.github.com> Date: Wed, 12 Apr 2023 09:08:34 +0800 Subject: [PATCH 2/5] =?UTF-8?q?Update=2002-=E5=86=85=E5=AD=98.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- "02-\345\206\205\345\255\230.md" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/02-\345\206\205\345\255\230.md" "b/02-\345\206\205\345\255\230.md" index 6232ab3..90a1b42 100644 --- "a/02-\345\206\205\345\255\230.md" +++ "b/02-\345\206\205\345\255\230.md" @@ -577,7 +577,7 @@ assume_init_read是不消费self的情况下获得内部T变量,内部T变量 } ``` -#### MaybeUnint典型案列 +#### MaybeUninit典型案列 对T类型变量申请内存及赋值: ```rust use std::mem::MaybeUninit; @@ -616,7 +616,7 @@ assume_init_read是不消费self的情况下获得内部T变量,内部T变量 assert_eq!(&data[0], &[42]); ``` -下面例子说明一块内存被 `MaybeUnint`封装后,编译器将不再对其做释放,必须在代码中显式释放: +下面例子说明一块内存被 `MaybeUninit`封装后,编译器将不再对其做释放,必须在代码中显式释放: ```rust use std::mem::MaybeUninit; use std::ptr; @@ -640,7 +640,7 @@ assume_init_read是不消费self的情况下获得内部T变量,内部T变量 `MaybeUninit`是一个非常重要的类型结构,未初始化内存是编程中不可避免要遇到的情况,`MaybeUninit`也就是RUST编程中必须熟练使用的一个类型。 ## 裸指针模块再分析 -有了`MaybeUnint`做基础后,可以对裸指针其他至关重要的标准库函数做出分析 +有了`MaybeUninit`做基础后,可以对裸指针其他至关重要的标准库函数做出分析 `ptr::read(src: *const T) -> T` 此函数在`MaybeUninit`节中已经给出了代码,ptr::read是对所有类型通用的一种复制方法,需要指出,此函数完成浅拷贝,复制后,src指向的变量的所有权会转移至返回值。所以,调用此函数的代码必须保证src指向的变量生命周期结束后不会被编译器自动调用drop,否则可能导致重复drop,出现UB问题。 From 0e5015f4df1676eb94082c7876a8b3353e53588e Mon Sep 17 00:00:00 2001 From: lisauu <105027808+lisauu@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:59:29 +0800 Subject: [PATCH 3/5] =?UTF-8?q?Create=2003-=E5=9B=BA=E6=9C=89=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=BA=93=E5=8F=8A=E5=9F=BA=E7=A1=80=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" "b/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" index 16ed671..13ba90a 100644 --- "a/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" +++ "b/03-\345\233\272\346\234\211\345\207\275\346\225\260\345\272\223\345\217\212\345\237\272\347\241\200\347\261\273\345\236\213.md" @@ -9,7 +9,7 @@ intrinsic库函数是指由编译器内置实现的函数,一般如下特点 ## intrinsic 原子操作函数 原子操作函数主要用于多核CPU,多线程CPU时对数据的原子操作。intrinsic库中atomic_xxx及atomic_xxx_xxx类型的函数即为原子操作函数。原子操作函数主要用于并发编程中做临界保护,并且是其他临界保护机制的基础,如Mutex,RWlock等。 ## 数学函数及位操作函数 -各种整数及浮点的数学函数实现。这一部分放在intrinsic主要是因为现代CPU对浮点计算由很多支持,这些数学函数由汇编语言来实现更具备效率,那就有必要由编译器来内置实现。 +各种整数及浮点的数学函数实现。这一部分放在intrinsic主要是因为现代CPU对浮点计算有很多支持,这些数学函数由汇编语言来实现更具备效率,那就有必要由编译器来内置实现。 ## intrinsic 指令优化及调试函数 断言类: assert_xxxx 类型的函数 函数栈:caller_location From cc046fe3116d5c0fc605ec54d470cf698c26c200 Mon Sep 17 00:00:00 2001 From: lisauu <105027808+lisauu@users.noreply.github.com> Date: Tue, 18 Apr 2023 09:38:23 +0800 Subject: [PATCH 4/5] Update 05-Iterator.md --- 05-Iterator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/05-Iterator.md b/05-Iterator.md index ff764f4..e1ef38f 100644 --- a/05-Iterator.md +++ b/05-Iterator.md @@ -236,7 +236,7 @@ pub trait Step: Clone + PartialOrd + Sized { ``` 照此,可以实现一个自定义类型的类型, 并支持Step Trait,如此,即可使用Range符号的Iterator。例如,一个二维的点的range,例如Range<(i32, i32)>的变量((0,0)..(10,10)), 三维的点的range,数列等。 -一下是为所有整数类型实现Step的宏: +以下是为所有整数类型实现Step的宏: ```rust macro_rules! step_identical_methods { From d3e3c060d83613befa43c36308e1dd8274077346 Mon Sep 17 00:00:00 2001 From: lisauu <105027808+lisauu@users.noreply.github.com> Date: Thu, 20 Apr 2023 17:31:08 +0800 Subject: [PATCH 5/5] =?UTF-8?q?Update=2012-std=E5=BA=93(=E4=B8=80)=20FFI?= =?UTF-8?q?=E5=8F=8A=E5=86=85=E5=AD=98=E7=AE=A1=E7=90=86.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" "b/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" index 3023d3c..2cb6874 100644 --- "a/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" +++ "b/12-std\345\272\223(\344\270\200) FFI\345\217\212\345\206\205\345\255\230\347\256\241\347\220\206.md" @@ -651,7 +651,7 @@ OsString及OStr在unix上的结构定义与RUST的String及str基本一致,代 std库与core库在内存管理RUST提供的机制是统一的。即Allocator trait 与 GlobalAlloc trait。 从std库可以发现RUST为什么将内存管理分成了Allocator及GlobalAlloc两个trait。 GlobalAlloc trait是操作系统无关及操作系统相关的界面接口。GlobalAlloc的主要功能就是对操作系统的系统调用进行封装,并完成RUST的内存类型与操作系统的系统调用的类型转换。 -Allocator是RUST自身的内存管理模块,其他的RUST模块如果有内存需求,同过Allocator triat来完成。Allocator使用GlobalAlloc完成对操作系统的使用。 +Allocator是RUST自身的内存管理模块,其他的RUST模块如果有内存需求,通过Allocator triat来完成。Allocator使用GlobalAlloc完成对操作系统的使用。 std库用System 作为这两个trait的实现载体,core库中用Global重新实现了Allocator,Global没有实现GlobalAlloc,因为Global需要适配非操作系统情况,具体请参考02-内存一章, System的代码如下: