rust
文章平均质量分 56
firefantasy
这个作者很懒,什么都没留下…
展开
-
rust-anlyzer支持对feature模块代码提示
rust-analyzer 是目前rust语言广泛在用的Language Server Protocol, 通过后台进程与VSCode等进行通信,实现代码补全和跳转等功能。原创 2023-01-08 01:03:28 · 671 阅读 · 0 评论 -
rust-analyzer 识别feature模块
为了让这些模块也能够使用rust-analyzer代码提示功能,则可以在Vscode的setting.json配置文件中将`rust-analyzer.cargo.features` 配置为。rust-analyzer.cargo.features 这个配置项默认为空,rust-analyzer默认不识别Cargo.toml设置为features模块。这样子所有的feature模块就能使用代码补全了。这时候Vscode这些代码是灰色的,并且提示。这个文件中通过宏有条件的导入。原创 2023-01-08 01:02:51 · 814 阅读 · 0 评论 -
rust struct 初始化的语法糖 - struct update syntax
rust 语法糖 struct update syntax原创 2022-11-20 23:16:38 · 742 阅读 · 0 评论 -
rust 如何用单调时钟获取更精确的时间间隔
Wall Clock vs Monotonic Clock (墙上时钟 vs 单调时钟)墙上时钟指的是我们日常意义上的时间,正如墙上的时钟代表的时间一样。单调时钟指的是某个时间点后开始计算的时间,单纯意义上的代表的时间是没有意义的。操作系统上相对应的提供了两套时间,分别对应墙上时钟和单调时钟,操作系统用UTC来代表墙上时钟,UTC不支持闰秒, 并且可以认为更改,而且操作系统的时间是通过石英钟等来实现的,会由于温度等不可控因素导致时间发生偏移,往往会通过网络时间协议NTP来进行同步,因此UTC天然存在着原创 2022-02-20 20:52:34 · 1030 阅读 · 0 评论 -
rust 实战 - 实现一个线程工作池 ThreadPool
如何实现一个线程池线程池:一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。 例如,对于计算密集型任务,线程数一般取cpu数量+2比较合适,线程数过多会导致额外的线程切换开销。如何定义线程池Pool呢,首先最大线程数量肯定要作为线程池的一原创 2022-02-12 11:01:20 · 1359 阅读 · 0 评论 -
rust实战 - newtype模式
什么是newtype简单的说,就是用元组结构体将已有类型包裹起来:struct Meters(u32)newtype的优点:自定义类型可以让我们给出更有意义和可读性的类型名,比如struct Year(u32)某些场景,只有newtype可以很好的解决隐藏内部类型的细节自定义类型给出更有意义的命名struct Years(i64);struct Days(i64);impl Years { pub fn to_days(&self) -> Days {原创 2022-02-10 00:14:42 · 1004 阅读 · 0 评论 -
Rust Trait熟识:一日一trait之Seek trait
Seek 顾名思义就是用来方便查找的trait,其内部提供了一个在字节流(stream of bytes)移动的游标(cursor),移动游标可以改变操作字节流的位置。Seek trait 定义pub trait Seek { fn seek(&mut self, pos: SeekFrom) -> Result<u64>; fn rewind(&mut self) -> Result<()>.原创 2022-02-07 16:15:25 · 240 阅读 · 0 评论 -
rust match 模式匹配摘录
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) = option_x { println!("num is : {}", num) } // 3 match表达式 match x原创 2022-02-07 16:11:19 · 883 阅读 · 0 评论 -
rust实战系列 - 使用Iterator 迭代器实现斐波那契数列(Fibonacci )
为什么是斐波那契数列斐波那契数列十分适合用来实战rust的迭代器,算法也很简单,一目了然。这个例子可以用来学习Iterator的使用,十分适合刚学习了rust的迭代器章节后用来练练手。代码实战don’t bb, show me the codestruct Fib(usize, usize);impl Fib { fn new() -> Fib { Fib(0, 1) }}impl Iterator for Fib { type Item =原创 2022-02-05 00:34:25 · 569 阅读 · 0 评论 -
rust实战系列 - 使用闭包和泛型实现简单的Cache
目的本文主要围绕怎么用rust语言来设计一个cache,期间会用到闭包,泛型。实现use std::{cmp::Eq, hash::Hash, collections::HashMap};struct Cacher<T, U, V> where T: Fn(U) -> V { calculation: T, value: HashMap<U, V>,}上面的代码定义了一个Cacher的结构,同时使用了泛型参数T,U,V; T是一原创 2022-02-01 14:18:41 · 1108 阅读 · 0 评论 -
Rust Trait熟识:一日一trait之Seek trait
> Seek 顾名思义就是用来方便查找的trait,其内部提供了一个在字节流(stream of bytes)移动的游标(cursor),移动游标可以改变操作字节流的位置。## Seek trait 定义```pub trait Seek { fn seek(&mut self, pos: SeekFrom) -> Result<u64>; fn rewind(&mut self) -> Result<()> { .....原创 2022-01-02 22:12:04 · 421 阅读 · 0 评论