为了防止整数溢出,开发人员通常使用checked_add、checked_sub、saturating_add、saturating_sub等函数,而不是简单的加法和减法(+、-)关于饱和减法saturating 是 使饱和之意饱和减法(Saturating Subtraction)是一种数学运算,常用于计算机编程中,特别是在处理固定大小的数值类型(如整数) ......
12
0
0
2024-03-02
之前提到的Mutex、Condvar是Rust中比较偏高层的共享数据型并发控制,更底层的并发控制也有,比如Atomic(原子操作)。今天结合代码来深入聊聊Atomic及其相关的Ordering文章目录Mutex vs AtomicAtomic 初探指令重排Ordering验证 Ordering 的可见性fence延迟加载首先为什么要有 Atomic,用 Mu ......
8
0
0
2024-02-29
平时使用 Python,JAVA 来写自动化。但是感觉性能上总是有点小不足。今天在极客时间上看到了一门讲 Rust 的课程,看到如下一段文字:掌握好 FFI,你就可以用 Rust 为你的 Python/JavaScript/Elixir/Swift 等主力语言在关键路径上提供更高的性能,也能很方便地引入 Rust 生态中特定的库。果断开始学习。在正式开始前, ......
20
0
0
2024-02-15
Rc 和 Weak 源码详解一个值需要被多个所有者拥有rust中所有权机制在图这种数据结构中,一个节点可能被多个其它节点所指向。那么如何表示图这种数据结构?在多线程中,多个线程可能会持有同一个数据?如何解决这个问题。Rcrust 通过使用引用计数智能指针 Rc 和 Arc 来解决上面的问题。当我们对一个被 Rc 所标识的数据进行 clone() 的时候,并不 ......
31
0
0
2024-01-31
查询本部分是对「Rust入门系列」Rust 中使用 MySQL[1]的学习与记录经常使用的时间处理库:chrono流式查询使用:query_iter输出到Vec使用:query映射到结构体使用:query_map获取单条数据使用:query_first命名参数查询使用:exec_firstCREATE TABLE `student` ( `id` in ......
54
0
0
2024-01-12
安装:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh更新:Rust 的升级非常频繁. 如果安装 Rustup 后已有一段时间,那么很可能 Rust 版本已经过时, 运行 rustup update 获取最新版本的 Rustrustc:编译Rust程序rustc只适合简单的Rust程 ......
50
0
0
2024-01-12
目录错误处理不可恢复错误被动触发backtrace栈展开panic时的两种终止方式主动调用panic线程panic后程序是否会终止Result枚举类型unwrap和expect传播错误?用于Option返回带返回值的 main 函数错误处理Rust 中的错误主要分为两类:可恢复错误,通常用于从系统全局角度来看可以接受的错误,例如处理用户的访问、操作等错误,这 ......
132
0
0
2023-09-11
到目前为止,我们已经讲解了包括 变量、可变性、常量、数据类型、函数、if-else 语句 和 循环 在内的一些关于 Rust 编程的基础知识。在 Rust 基础系列的最后一章里,让我们现在用 Rust 编写一个程序,使用这些主题,以便更好地理解它们在现实世界中的用途。让我们来编写一个相对简单的程序,用来从水果市场订购水 ......
112
0
0
2023-09-01
推进你的 Rust 学习,熟悉 Rust 程序的变量和常量。在 该系列的第一章中,我讲述了为什么 Rust 是一门越来越流行的编程语言。我还展示了如何 在 Rust 中编写 Hello World 程序。让我们继续 Rust 之旅。在本文中,我将向你介绍 Rust 编程语言中的变量和常量。此外,我还将讲解一个称为“遮蔽shadowing” ......
112
0
0
2023-08-30
目录Rust如何进行模块化开发?Package和CreateCargo的惯例Create的作用定义module来控制作用域和私有性路径Path私有边界(private boundary)pub关键字super关键字pub structpub enumUse关键字use的习惯用法as关键字使用 pub use 重新导出名称导入外部包如何将模块放入其他文件?类似 ......
161
0
0
2023-07-21
目录目标命令行解析实现Ping周期性发送其他验证总结这两年Rust火的一塌糊涂,甚至都烧到了前端,再不学习怕是要落伍了。最近翻了翻文档,写了个简单的Ping应用练练手,被所有权折腾的够呛,相比起Golang上手难度大很多,现将开发中的一些问题总结如下,所有源码见ring。目标实现一个Ping,功能包含:命令行解析实现ICMP协议,pnet包中已经包含了ICM ......
174
0
0
2023-06-30
目录一. 简述二. 编写测试三. 测试相关的宏和函数3.1. 使用assert!宏检查结果3.2. 使用assert_eq!宏和assert_ne!宏判断相等性3.3. 添加自定义的错误提示信息3.4. 使用should_panic检查paninc3.5. 使用Result<T, E>编写测试四. 控制测试的运行方式4.1. 并行或串行的进行测试 ......
147
0
0
2023-06-29
目录楔子什么是 traittrait 作为参数trait 作为返回值实现一个 max 函数楔子前面我们提到过 trait,那么 trait 是啥呢?先来看个例子:#[derive(Debug)] struct Point<T> {     x: T, } impl& ......
141
0
0
2023-06-18
目录楔子什么是引用可变引用悬空引用小结楔子好久没更新 Rust 了,上一篇文章中我们介绍了 Rust 的所有权,并且最后定义了一个 get_length 函数,但调用时会导致 String 移动到函数体内部,而我们又希望在调用完毕后能继续使用该 String,所以不得不使用元组将 String 也作为元素一块返回。// 该函数计算一个字符串的长度 ......
166
0
0
2023-06-11
目录楔子定义并实例化结构体简化版的实例化方式基于已有结构体实例创建元组结构体没有字段的空结构体结构体数据的所有权使用结构体的示例程序楔子结构体是一种自定义的数据类型,它允许我们将多个不同的类型组合成一个整体。下面我们就来学习如何定义和使用结构体,并对比元组与结构体之间的异同。后续我们还会讨论如何定义方法和关联函数,它们可以指定那些与结构体数据相关的行为。定义 ......
150
0
0
2023-06-11