Rust LRU
前言Lru算法本身其实不难,双向链表 + HashMap即可实现O(1)复杂度的Lru Cache。但是双向链表是Rust一块硬砖,因为双向链表各个节点有相互引用,而Rust的所有权以及生命周期等特性,导致用Rust来实现双向链确实有一点的难度。可以阅读这篇文章:Learn Rust With Entirely Too Many Linked Lists,如果你对Rust有了一点基础,但是写双向链表还是比较吃力,这篇文章很适合你。(看这篇文章就是作者用Rust写双向链表的血泪史,编译报错然后各种fix,再报错,再fix…)
本文在介绍Lru实现之前,介绍了一些基础知识,如果已经了解了可以直接跳到Lru段落。Lru源码地址: https://github.com/remove-if/lru
双向链表Safe Rust最开始看Rust的我,直接跳过unsafe了。因为我觉得我这种追求完美的人,怎么可能会写unsafe代码呢?但是是人都逃不过真香定律,被啪啪打脸。先来看看如何用Rust safe code定义一个双向链表
12345678910struct Node<T> ...
Rust宏
前言宏是Rust比较重要而且强大的特性之一。宏可以减少重复代码,自动生成一些代码,让代码看起来更优雅。例如Rocket web框架的宏:
1234567891011#[macro_use] extern crate rocket;#[get("/")]fn index() -> &'static str { "Hello, world!"}#[launch]fn rocket() -> _ { rocket::build().mount("/", routes![index])}
熟悉Python Flask框架的同学肯定会直呼: 这个不就是Rust版本的Flask嘛。对,这个就是Rust宏的强大之处,通过宏让代码写起来特别简单优雅。
那么了解Rust宏是很有必要的,一方面能让我们的代码更加简洁,另一方面在阅读和学习开源代码的时候也能更加得心应手(很多开源代码都使用了大量的宏)。所以本文就是和大家一起去探索Rust宏,目的是让读者能够写出自己需要 ...