![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
rust
文章平均质量分 81
~kiss~
这个作者很懒,什么都没留下…
展开
-
rust的哈希表
它返回一个Entry枚举,可以是Occupied(键已存在)或Vacant(键不存在)contains_key方法用于检查HashMap中是否包含特定的键。相比contains_key+insert ,这种方法更优雅。如果不存在,则将参数作为新值插入并返回新值的可变引用。以上两种方法都必须保证访问的元素存在,否则会报错。两种方法,contains_key和entry。entry方法用于高效地处理键值对的插入和更新。在键对应的值存在时,就返回这个值的可变引用。entry方法多用于对值的更新。原创 2024-02-18 19:42:28 · 485 阅读 · 0 评论 -
rust内存优化
对于不带标记的数据结构,默认 reprrepr 代表 rust 可以任意优化内存布局,对内部数据进行重排保证其内部空间尽量紧凑,不包含过多的 paddinga: u64,b: bool,c: u64,d: bool,dbg!dbg!(Rust, a));dbg!(Rust, b));dbg!(Rust, c));dbg!(Rust, d));在不带 repr© 时,rust 会对其中的 field 进行重排。原创 2023-11-19 15:27:53 · 551 阅读 · 1 评论 -
使用rustc_interface进行类型检查
Rust 编译器中用于源代码位置跟踪和定位的库。它提供了对源代码位置、跟踪、范围和跨文件的操作和查询的功能。这个库对于诊断、错误信息、编译器插件、代码检查等任务非常有用。主要功能:源代码位置 (Span) 的表示rustc_span::Span 是一个表示源代码的位置范围和位置信息的结构体。它包含了文件名称、行号、列号以及start-end 的字节偏移等信息。Span 可以用于定位和标识源代码的特定部分范围操作和查询Span 结构体提供各种方法来处理和查询范围。原创 2023-11-18 21:33:41 · 329 阅读 · 0 评论 -
rust打印闭包的插件实现
rust打印闭包信息原创 2023-11-18 18:16:29 · 416 阅读 · 0 评论 -
rust学习-LinkedList
这对于描述某种集合的类型很常见。如果要从迭代器的内容创建集合,则首选 Iterator::collect() 方法。但是,当需要指定容器类型时,原创 2023-10-29 12:37:48 · 567 阅读 · 0 评论 -
rust学习~slice迭代器
(教我们怎么用,通过Iterator当跳板)正常情况下,可以使用 Iter<'a, T> 迭代器,如果需要双向迭代、准确的大小信息或需将迭代器标记为已耗尽,可以选择相应的迭代器 trait 实现。提供了双向迭代的功能,可以使用 next() 方法获取下一个元素,使用 next_back() 方法获取上一个元素。在 size_hint() 中返回的上下界信息是准确的,例如 (n, Some(n)) 表示确切的元素数量。综上所述,这四个迭代器提供了不同的功能和特性,可以根据具体的使用场景选择使用哪个迭代器。原创 2023-10-22 14:34:49 · 648 阅读 · 0 评论 -
rust的排序
Deref 是一个trait,在Rust中被用于智能指针或其他类型上,以提供对目标类型 [T] 中方法的调用。根据 Deref trait 文档,Deref trait 定义了一个方法 deref,该方法用于将类型转换为其目标类型。对于 Deref,目标类型为 [T],意味着它将实现 deref 方法,用于将类型转换为 [T]。原创 2023-10-21 15:03:07 · 477 阅读 · 0 评论 -
rust学习-trait std::cmp::PartialEq、Eq、PartialOrd、Ord
不能在trait中直接提供默认实现的方法称为Required methodtrait中提供了默认实现的方法称为Provided method实现trait时,可以自由选择是否实现Provided method,根据具体的需求来定制类型的行为。原创 2023-10-21 12:52:07 · 472 阅读 · 0 评论 -
rust的Defef和DerefMut学习
适用于 *v = 1 等。原创 2023-10-15 12:57:36 · 447 阅读 · 0 评论 -
rust学习Cell、RefCell、OnceCell
Cell、RefCell 和 OnceCell 类型的值可以通过共享引用(即公共 &T 类型)进行mutate,而大多数 Rust 类型只能通过唯一 (&mut T) 引用(unique reference)进行mutate。这些cell类型提供了“内部可变性,interior mutability”(通过 &T 可变),与表现出“继承可变性”(仅通过 &mut T 可变)的典型 Rust 类型形成鲜明对比。Cell类型分为三种类型:Cell、RefCell 和 OnceCell。原创 2023-10-14 12:18:22 · 711 阅读 · 0 评论 -
rust学习-Arc
线程安全的引用计数指针。“Arc”代表“原子引用计数 Atomically Reference Counted”。Arc 类型提供在堆中分配的 T 类型值的共享所有权(shared ownership)。在 Arc 上调用克隆会生成一个新的 Arc 实例,该实例指向堆上与源 Arc 相同的分配,同时增加引用计数。当指向给定分配的最后一个 Arc 指针被销毁时,存储在该分配中的值(通常称为“内部值”)也会被删除。原创 2023-09-27 13:43:19 · 1618 阅读 · 2 评论 -
rust的Sync和Send对比
可以安全地在线程之间共享引用的类型(it is safe to share references between threads)。当编译器认为合适时(compiler determines it’s appropriate),此trait会自动实现。换句话说,如果在线程之间传递 &T 引用时,不能存在任何未定义行为(包括数据争用)原创 2023-09-27 07:37:17 · 507 阅读 · 0 评论 -
rust学习-any中的downcast和downcast_ref
rust的any学习原创 2023-09-25 20:35:18 · 608 阅读 · 0 评论 -
rust学习-string
rust string 探索原创 2023-09-25 09:58:59 · 489 阅读 · 0 评论 -
rust学习-rpc
rpcx-rs 0.2.2 版本,使用Rust访问rpcx服务,支持 JSON 和 MessagePack 两种序列化方式。protobuf序列化的支持、服务治理各种功能(路由、失败处理、重试、熔断器、限流)、监控(metrics、trace)、注册中心(etcd、consul)等众多的功能。原创 2023-09-24 15:46:46 · 280 阅读 · 0 评论 -
rust学习-http-server端
rust利用hyper构建服务器原创 2023-09-24 15:39:02 · 378 阅读 · 0 评论 -
tokio::net学习
tokio::net学习原创 2023-09-16 15:49:05 · 297 阅读 · 0 评论 -
rust学习-引用C库
用外部库时,注意库的使用条款和许可证,保证代码的合法性/可靠性也需要仔细阅读 API 文档和源代码,了解库函数和类型的使用规则和限制。原创 2023-08-27 14:12:09 · 1195 阅读 · 0 评论 -
rust学习-不安全操作
在 Rust 中,不安全代码块用于避开编译器的保护策略。原创 2023-08-27 10:43:14 · 1110 阅读 · 0 评论 -
rust学习-打印结构体中的vec
将格式化后的数据写入到一个缓冲区(buffer),而不是直接打印到标准输出或文件中。这个缓冲区可以是字符串,也可以是需要写入的文件的缓冲区。writer 参数是一个实现了 std::io::Write trait 的对象,表示要将数据写入到哪里。format_string 是一个格式化字符串,可以包含占位符 {},表示后面要插入的值。expr1、expr2 等是值的表达式,可以是变量,常量,函数等。write!宏不会自动添加末尾的换行符。原创 2023-08-16 22:59:44 · 1388 阅读 · 0 评论 -
rust学习-json的序列化和反序列化
由于 serde 库默认使用 JSON 格式进行序列化和反序列化因此程序将使用 JSON 格式对数据进行序列化和反序列化。原创 2023-08-12 19:38:12 · 1107 阅读 · 0 评论 -
rust学习-tokio::time
在 Rust 的 tokio 库中,MissedTickBehavior 是一个枚举类型,表示当 Interval 频率计时器在某个周期中错过某个间隔时如何处理。原创 2023-08-11 20:11:07 · 1231 阅读 · 0 评论 -
rust学习-同时执行多Future
只用 .await 来执行future,会阻塞并发任务,直到特定的 Future 完成。原创 2023-08-09 23:58:33 · 718 阅读 · 0 评论 -
rust实践-异步并发socket通信
它的第一个泛型参数 'a 用于指定借用的生命周期,可以是任意标识符,表示 'a 参数对类型的所有权没有影响。&str 类型是一个不可变的字符串切片类型,它的实际内容被存储在其他地方,比如堆上或者栈上,并且不拥有内存所有权。如果 B 类型已经拥有内存所有权,则返回 Owned 类型,否则返回 Borrowed 类型。String 类型是一个可变的字符串类型,实际内容被存储在堆上,并且拥有内存所有权。这使得 Cow 类型在不需要分配内存的情况下,可以支持可变类型和不可变类型的字符串。原创 2023-08-08 00:11:29 · 2241 阅读 · 0 评论 -
rust学习-异步流
Stream trait 是一个定义了异步流(asynchronous stream)的接口。异步流表示一个异步可迭代集合,每个元素都可由异步代码异步生成该模式常用于,带来性能提升。Stream 定义了一个具有一个相关联类型 Self::Item 的抽象类型这个类型是流内部元素的类型。通过将此类型与 Option 结合使用,可以有效地表示流终止的状态。Stream trait 的最重要的方法是 poll_next()该方法是一个异步实现的访问器,它用于从流中获取下一个元素。原创 2023-08-06 23:14:33 · 1166 阅读 · 2 评论 -
rust-异步学习
(1)如果 T: Unpin(默认会实现),那么 Pin<'a, T> 完全等价于 &'a mut T。换言之: Unpin 意味着这个类型被移走也没关系,就算已经被固定了,所以 Pin 对这样的类型毫无影响。(2)如果 T:!Unpin, 获取已经被固定的 T 类型示例的 &mut T需要 unsafe。(3)标准库中的大部分类型实现 Unpin,在 Rust 中遇到的多数“平常”的类型也是一样。但是, async/await 生成的 Future 是个例外。原创 2023-08-06 15:14:05 · 1865 阅读 · 0 评论 -
rust学习-构建服务器
服务器会依次处理每一个请求,在完成第一个连接的处理之前不会处理第二个连接。原创 2023-07-29 12:33:09 · 1292 阅读 · 0 评论 -
rust学习-模式
模式由如下一些内容组合而成(1)字面量(2)解构的数组、枚举、结构体或者元组(3)变量(4)通配符(5)占位符。原创 2023-07-24 23:11:42 · 479 阅读 · 0 评论 -
rust学习-面向对象
面向对象编程(Object-Oriented Programming,OOP)原创 2023-07-23 17:00:57 · 797 阅读 · 2 评论 -
rust学习-线程
Rust 标准库只提供了 1:1 线程模型Rust 是较为底层的语言,如果愿意牺牲性能来换取抽象,以获得对线程运行更精细的控制及更低的上下文切换成本,使用实现了 M:N 线程模型的 crate。原创 2023-07-22 23:27:24 · 1327 阅读 · 0 评论 -
rust学习-智能指针
rust智能指针学习原创 2023-07-22 12:41:02 · 1076 阅读 · 0 评论 -
rust学习-cargo和crates.io
Cargo 有两个主要的配置:(1)运行 cargo build 时采用的 dev 配置(2)运行 cargo build --release 的 release 配置Cargo.toml 文件没任何 [profile.] 时,Cargo 对每一个配置采用默认设置。通过在[profile.]对应的部分中增加任何定制的配置。原创 2023-07-18 22:54:19 · 1143 阅读 · 0 评论 -
rust学习-迭代器
实现 Iterator trait只会从 1 数到 5 的迭代器} else {None#[test]assert_eq!assert_eq!assert_eq!assert_eq!assert_eq!assert_eq!#[test]// 获取 Counter 实例产生的值// 将这些值与另一个 Counter 实例在省略了第一个值之后产生的值配对// 将每一对值相乘// 只保留那些可以被3整除的结果// 将所有保留的结果相加.sum();assert_eq!原创 2023-07-17 10:11:34 · 892 阅读 · 0 评论 -
rust学习-闭包
模拟健康推荐算法,为前端提供高强度/低强度的训练appsimulated_expensive_calculation 是个算法模块维护的内容,且未来变化较大,所以代码中期待对其只使用一次。原创 2023-07-16 18:56:13 · 836 阅读 · 0 评论 -
Rust学习-构建命令行程序
Rust 的运行速度、安全性、单二进制文件输出和跨平台支持使其成为创建命令行程序的绝佳选择本文以实现一个minigrep为例,展开对之前学习的回归。原创 2023-07-16 14:36:33 · 1247 阅读 · 0 评论 -
rust学习-项目模块
glob 运算符经常用于测试模块 tests 中。原创 2023-07-15 13:32:02 · 290 阅读 · 2 评论 -
Rust学习-生命周期
生命周期语法用于将函数的多个参数与其返回值的生命周期进行关联。一旦他们形成了某种关联,Rust 就有了足够的信息来允许内存安全的操作并阻止会产生悬垂指针亦或是违反内存安全的行为// 定义包含引用的结构体,不过需要为结构体定义中的每一个引用添加生命周期标注// 必须在结构体名称后面的尖括号中声明泛型生命周期参数,在结构体定义中使用生命周期参数// 存放一个字符串 slice.next()// ImportantExcerpt 的实例i不能比其 part 字段中的引用存在的更久。原创 2023-07-15 13:30:35 · 811 阅读 · 0 评论 -
rust学习-泛型和trait
动态类型语言中如果尝试调用一个类型并没有实现方法,运行时报错Rust 将这些错误移动到编译时,甚至在代码能运之前就强迫修复错误无需编写运行时检查行为的代码,因为在编译时就已经检查过了相比其他不愿放弃泛型灵活性的语言有更好的性能。原创 2023-07-14 22:10:19 · 3224 阅读 · 1 评论 -
rust学习-panic
(1)当项目最终准备好发布时,可以使用 cargo build --release 来优化编译项目。这会在 target/release 而不是 target/debug 下生成可执行文件。这些优化可以让 Rust 代码运行的更快,不过启用这些优化也需要消耗更长的编译时间(2)使用 Result 来告诉代码调用者他需要处理潜在的成功或失败。原创 2023-07-14 19:59:43 · 1076 阅读 · 0 评论 -
Rust学习-字符串
rust字符串学习原创 2023-07-12 22:42:20 · 886 阅读 · 0 评论