
rust
文章平均质量分 77
wangjun861205
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
rust中如何利用generic与PhantomData来实现更清晰的接口
但是,很多时候我们做不到这一点,有些现实当中的问题从根本上就是反直觉的,映射到代码中,我们也不得不做出妥协,但是妥协不意味着我们一点办法都没有,我们可以通过调整代码的结构,给变量起意义更明确的名字,写更多的注释,提供更详尽的文档, 来让使用者尽可能多的理解我们的用意。, 不用内置的字段来维护状态了, 两种类型本身就代表了不同的状态, 这种方法是我平时写 go 的比较常用的方法, 这样两种类型各自实现自己的方法, 不小心调用了对方的方法,编译器会报错, 而且自动补全也只会列出响应状态的方法了。原创 2023-03-03 23:45:30 · 578 阅读 · 0 评论 -
Rust中的闭包
一直对 Rust 中的闭包似懂非懂, 用的时候基本都是以编译器不报错为准, 报错了就按编译器提示的改。今天有点时间,把 the book 中的关于闭包的部分从头到尾看了一遍,发现自己原来的理解不说是入木三分吧,至少也是南辕北辙。...原创 2022-08-11 18:14:51 · 454 阅读 · 0 评论 -
关于rust的mongodb驱动count方法无法与near条件一同使用的问题
geoNear, $near, and $nearSphere are not allowed in this context`, 一句话没头没尾, 我也搞不清这里面提到的上下文具体指什么, 网上搜了一下, 相关的信息比较少, 大部分也没有正面的回答是哪里的问题,有解决方案的更少。, 因为我的应用场景一般计数不会超过 7 个, 所以我勉强可以接受, 如果计数较大的场景, 请另寻出路。...原创 2022-08-09 22:39:09 · 450 阅读 · 0 评论 -
关于Rust中Pin和Unpin的一点小心得
关于 Pin 和 Unpin, 一直是只知道大体概念,完全不知道应用场景,前段时间用 async, 被强制用了一段时间的 Pin, 但也仅限于依葫芦画瓢, 你让我用我就用,至于为什么用,我查了一圈, 也没找到太好的解释。 昨天因为要实现一个 self referential 的 struct,于是祭出了 unsafe pointer, 结果发现了一个比较古怪的问题, 具体的问题描述在上一篇博文里有详细的描述, 这里就不再赘述了。通过把*const Option<Box<ListNode>&原创 2021-08-17 13:57:07 · 1048 阅读 · 0 评论 -
遇到的一个Rust raw pointer的问题
昨天做题遇到一个需要维护指针指向 linked list 中 node 的情况, 于是就用到了 unsafe, 紧接着就遇到了一个很奇怪的现象, 一个在 unsafe block 中,对整个程序无关紧要的 println!()语句,竟然可以影响结果的正确与否。代码如下: // Definition for singly-linked list. #[derive(PartialEq, Eq, Clone, Debug)] pub struct ListNode { pub val: i32, pub原创 2021-08-17 10:48:19 · 308 阅读 · 0 评论 -
从rust中BinaryHeap的iterator引出的数据结构问题
BianryHeap 是 rust 标准库自带的数据结构,相当于其他语言的 PriorityQueue, 这些不需要我多做介绍。今天在用 BinaryHeap 的时候出现了一个问题,就是 into_iter()之后得到的元素不是有序的。让我一度以为自己前面的数据处理有问题,找了半天没有发现啥异样,后来想到以前用 BinaryHeap 都是 while Some(elem) = heap.pop() {}这种形式,是不是 BinaryHeap 的 iterators 不是有序的呢?然后修改了一下代码,换了一下原创 2021-08-13 11:56:51 · 521 阅读 · 1 评论 -
关于Rust的两个小发现
写代码过程中的两个关于 Rust 的小发现,可能对我是发现,但对大家已经是耳熟能详的了,不过还是要记录一下: 如何在 iter tool function 中处理 error 假设有一个整数数组 l, 我们要遍历这个数组,把其中的每个元素都乘以 2,然后把结果收集起来, 但是如果这个数组里面包含负数,则返回一个错误。 以前写类似功能的代码的时候,我一般都这么写: fn for_loop_double(l: Vec<i32>) -> Result<Vec<i32>, My原创 2021-08-04 18:32:13 · 489 阅读 · 0 评论 -
为啥学Rust?
先说本文不涉及任何技术细节,只是自己学Rust的一段历程,一半为倾诉,一半为记录,大家没兴趣的可以不用往下看了。 这题目的答案,简单点说,一半是因为Rust确实有我需要的东西,另一半是因为被"骗"了。 Go用了一段时间,对现有的orm的使用方式都不太满意,于是不自量力的想自己写一个,前前后后的折腾了有几个月的时间,其中还有推到重来的过程,最终整出来了,在两个小项目上用了一下,然后就搁置了,并不是不好用,只是觉得实现的方式是在是不优雅,导致每次扩展新的功能都会变成一次痛苦的煎熬。自己总结了一下,觉得造成这原创 2021-07-12 00:08:55 · 166 阅读 · 0 评论 -
Rust, Trait Object, Object Safty
写了下面一段: async fn put<'a, S, E, F>( store: Arc<Mutex<dyn Storer<'a, dyn Stream<Item = Result<Bytes, E>>, dyn StdError + Send + Sync>>>, ) -> impl Fn(Request<Body>) -> Pin<Box<Future<Output = Res原创 2021-06-29 23:01:12 · 374 阅读 · 0 评论 -
自己动手,丰衣足食------Rust实现自己的Stream
想写个简单的对象存储,折腾了两天大框写好了,结果一试,600M的稳健用了102秒,上网一查,这好像还不是个例, tokio::fs里面的东西好像普遍性能低下,而且低的不是一点半点。记得原来看的某篇文章里提过一句,说windows是有原生的异步磁盘操作的, linux下没有,不知道跟这个有没有关系。 想着用std::fs来替换,但是自己定的trait是围绕Stream来的,换的话等于推翻重写。思索在三,决定自己试着实现个Stream试一下。 先说Stream的定义: pub trait Stream原创 2021-06-28 17:18:08 · 619 阅读 · 0 评论 -
Rust, Future, Recursion, Send
最近几天写了个爬虫, 踩了不少的坑,挑两个大的总结一下 递归Future的问题 爬虫难免要用到递归, 从tag的查找到本身爬取逻辑,原创 2021-06-21 16:35:11 · 713 阅读 · 0 评论 -
Rust的异步机制
这篇文章是整个Rust异步机制系列的第一篇,主要是把几个重要的概念弄清楚, 对后续详细理解Rust的异步机制有帮助 1. Future 这是Rust原创 2021-06-17 10:03:36 · 1546 阅读 · 0 评论