随笔分类 - rust
摘要:Arena 指的是预先分配一大片内存空间,并且可以一次性释放掉整个内存空间。 目标是使分配和释放更快,一次性申请的内存空间是连续的,有助于缓存局部性策略。 分配速度更快,因为每个后续分配都是指针增量,而释放速度更快,因为您只需释放整个 arena,而不是其中的每个单独的东西。 crates 仅支持同
阅读全文
摘要:rust-analyzer 是目前rust语言广泛在用的Language Server Protocol, 通过后台进程与VSCode等进行通信,实现代码补全和跳转等功能。 下面介绍其在VsCode setting.json中的配置项: rust-analyzer.cargo.features ru
阅读全文
摘要:rust语法提供了..操作符来实现struct更新的语法糖,参见Struct Update syntax。 废话少说,直接定义一个学生的struct: #[derive(Default, Debug)] struct Student { age: u32, name: String, grade:
阅读全文
摘要:国内访问crate.io镜像满解决办法? 参考:https://rsproxy.cn
阅读全文
摘要:Wall Clock vs Monotonic Clock (墙上时钟 vs 单调时钟) 墙上时钟指的是我们日常意义上的时间,正如墙上的时钟代表的时间一样。单调时钟指的是某个时间点后开始计算的时间,单纯意义上的代表的时间是没有意义的。 操作系统上相对应的提供了两套时间,分别对应墙上时钟和单调时钟,操
阅读全文
摘要:Cell与RefCell 的相同点:绕开所有权的限制,实现内部可变性性 rust 的所有权规则: 只能由一个可变引用 允许存在多个不可变引用 fn modify(a: &mut i32) { *x = *x + 1; } fn main() { let a = 111; modify(&mut a)
阅读全文
摘要:# 如何实现一个线程池 线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处
阅读全文
摘要:什么是newtype 简单的说,就是用元组结构体将已有类型包裹起来:struct Meters(u32) newtype的优点: 自定义类型可以让我们给出更有意义和可读性的类型名,比如struct Year(u32) 某些场景,只有newtype可以很好的解决 隐藏内部类型的细节 自定义类型给出更有
阅读全文
摘要:Rust中的模式匹配 模式匹配大概有以下几种: let语句 if let语句 match表达式 函数签名 for循环 while let语句 // 1 let语句 let x = 1; let option_x = Some(x); // 2 if let if let Some(num) = op
阅读全文
摘要:为什么是斐波那契数列 斐波那契数列十分适合用来实战rust的迭代器,算法也很简单,一目了然。这个例子可以用来学习Iterator的使用,十分适合刚学习了rust的迭代器章节后用来练练手。 代码实战 don't bb, show me the code struct Fib(usize, usize)
阅读全文
摘要:目的 本文主要围绕怎么用rust语言来设计一个cache,期间会用到闭包,泛型。 实现 use std::{cmp::Eq, hash::Hash, collections::HashMap}; struct Cacher<T, U, V> where T: Fn(U) -> V { calcula
阅读全文
摘要:Seek 顾名思义就是用来方便查找的trait,其内部提供了一个在字节流(stream of bytes)移动的游标(cursor),移动游标 可以改变操作字节流的位置。 Seek trait 定义 pub trait Seek { fn seek(&mut self, pos: SeekFrom)
阅读全文
摘要:
阅读全文