nebkad

nebkad

请阻止我发帖
V2EX 第 557390 号会员,加入于 2021-09-30 23:34:06 +08:00
根据 nebkad 的设置,主题列表只有在你登录之后才可查看
二手交易 相关的信息,包括已关闭的交易,不会被隐藏
nebkad 最近回复了
@bli22ard #6
标准库里为所有 T &T &mut T [自] [动] [地] 实现了 Borrow 和 BorrowMut 。
你不妨试试“自动地”实现一个 trait 在某个 feature 没有 stable 之前是不是允许的。

AsRef 和 AsMut 可没有这个待遇。
并且,其实 AsRef 和 AsMut 更符合设计用途的用法是类似于 OO 里面的子类隐式向父类引用转换。
而 Borrow 和 BorrowMut 在理解了 “有所有权” 和 “有使用权” 的细微差异后就会发现真的很有用
@bli22ard #4 你会这么想是不是因为你没有注意到 这段代码
https://doc.rust-lang.org/src/core/borrow.rs.html#208-241

不可能有别的代码能替代这段标准库里的效果
譬如说,我要实现一个 RingBuffer ,可以 RingBuffer 自己分配 buffer 的内存,也可以接受外部输入的 buffer 。
我们可以发现,无论自己分配还是外部输入,RingBuffer 的大部分功能代码都是一样的,不太可能为此写两种不同的 RingBuffer 。那么,RingBuffer 就可以这么定义:

```Rust
pub struct RingBuffer<B: BorrowMut<[u8]>>(B);
```
30 天前
回复了 sevenfeet 创建的主题 生活 老婆坚持想生孩子,烦
如果你对没有小孩的生活有美好的期待,觉得那是一种持久的自由甚至是幸福,那我只能说你还很嫩。
养育小孩是另一种创业,不知道这个角度对你来说会不会有点启发。
确实有很多人不适合养育小孩,正如很多人不适合创业一样。
32 天前
回复了 yanyao233 创建的主题 程序员 总是忍不住重复造轮子
这很正常,我前两天又手痒造了个基于 ticket 的 spinlock 并且实现了用合理的代价支持线程退出争夺锁
准备再过段时间实现一次 poison 检测
而这些东西,任何现代操作系统都直接提供了实现
谁能想到呢,写个 spinlock 都需要引入分布式算法。

在极其有限的内存中(一个 int )挤出两个 bit 用来标记:1.受控取消争夺锁状态,2.有线程崩溃后的 非受控取消争夺锁状态。

先说 1 受控取消
取消者要设置标记,然后把自己的 ticket number N 放在 atomic_int 里面,才可以安全退出,
然后 ticket number 是 N + 1 的等待者检测到这个变化,也把 N + 1 防盗 atomic_int 里面,继续等待。
如此类推,就可以顺利地把所有等待者都顺利更新 ticket 。
第 n 个受影响的等待者会发现自己更新之后,N + n 一直不会变,那么他来负责清除这个受控取消状态的标记。
这帖子真的太难顶了,浪费了我整整一分钟
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2744 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 00:23 · PVG 08:23 · LAX 17:23 · JFK 20:23
Developed with CodeLauncher
♥ Do have faith in what you're doing.