作者回复: 如果单线程,可以用 Rc<T>,多线程用 Arc<T>。
作者回复: 嗯。挺不错。第二题可以看看我的参考实现: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c51bf256df8be1c51c16bbe4885b810a
作者回复: 👍 很好的思考。一般我都会把题目的答案放在 github repo 下。
作者回复: FromIterator 目前还没有加入 Rust 的 prelude,2021 edition 才会自动加入: The first new feature that Rust 2021 will have is a new prelude that includes TryInto, TryFrom and FromIterator from the Rust standard library. 对于 trait 方法,如果你要使用,需要先确保在上下文中引入了这个 trait。
作者回复: &T 是引用,*T 是解引用。比如你有一个 b = &mut u32,你可以 *b = 10 来解引用更改 b 指向的内存。 Rust 大部分情况下都会做自动解引用(使用 . 的时候)。所以你会感觉很少需要用 *。https://stackoverflow.com/questions/28519997/what-are-rusts-exact-auto-dereferencing-rules/28552082
作者回复: 对。 第二题可以看看我的实现:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c51bf256df8be1c51c16bbe4885b810a 如果你纠结 lazy,可以看看 slice chunk 的实现:https://doc.rust-lang.org/src/core/slice/iter.rs.html#1363
作者回复: 没有太好的想法。不过,算法上的 O1(HashMap + LinkedList) 和 box/raw 关系不大。 如果测量的结果是频繁地分配释放是罪魁祸首,那么,可以考虑使用 slab 来预分配 RawLRU 的 entry。
作者回复: Box<T> 实现了 Deref 啊:https://doc.rust-lang.org/std/boxed/struct.Box.html#impl-Deref。注意你这里 T 是个 slice,所以 b2.deref() 和 v2(Vec)可以比较,因为实现了相应的 eq
作者回复: 1. 对! 2. 可以看看我的参考实现:https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=c51bf256df8be1c51c16bbe4885b810a
作者回复: Rust 也可以使用 for / while / loop,并不见得都需要用函数式编程方式。选择最合适的方式处理就好。