简化自引用类型
这篇文章讨论了简化 Rust 中的自引用类型(SRTs)的方法,并提出了一些改进建议:
- 自引用类型不一定是不可移动的 (!Move):对于堆分配的数据,不需要 !Move 属性。
- 'self 生命周期不足:'self 生命周期过于粗糙,需要能够指向具体字段的路径生命周期(path-based lifetimes)。
- 自动引用稳定性:对于大多数自引用类型,编译器可以在结构移动时自动更新指针,无需 !Move 属性。
- 原始指针操作的问题:对于原始指针操作,需要引入 Transfer 特性来确保安全性。
- Relocate 特性应使用 &own self:相较于 &mut self,&own self 更适合用来销毁和重构类型。
文章提出了一些实现自引用类型的新方法,强调了基于路径的生命周期和自动引用稳定性的重要性,并指出在某些情况下仍然需要不可移动类型。
rerun: 0.17.0版本发布
Rerun 是一个易于使用的多模态和时间数据可视化工具箱。
目前发布了 0.17.0 新版版, 在该版本中引入了新的 Blueprint 功能和改进的笔记本支持。主要更新包括:
- Blueprint 组件覆盖:配置默认值,覆盖数据存储值,并为所有视图类型指定可视化器。
- 笔记本和网站嵌入:支持从笔记本单元流式传输数据到嵌入的查看器,改进了对多个查看器的支持。
- 新示例:新增 Paddle OCR、Vista 驾驶模型、立体视觉 SLAM 和神经场笔记本示例。
- 日志 API 增强:改进的日志记录,新增多种原型和组件。
- UI 改进:改进了选择面板和增强了各种组件的 UI。
- SDK 和 API 更新:在 Python、Rust 和 C++ API 中进行了更新,包括更好的类型检查和组件实现。
- 查看器增强:引入 Blueprint 提供的默认值和更好的 UI 配置。
nutype: 0.4.3 发布
nutype 最新版本发布,次版本中,开始支持 范型
use nutype::nutype;
#[nutype(
sanitize(with = |mut v| { v.sort(); v }),
validate(predicate = |vec| !vec.is_empty()),
derive(Debug, PartialEq, AsRef),
)]
struct SortedNotEmptyVec<T: Ord>(Vec<T>);
let wise_friends = SortedNotEmptyVec::try_new(vec!["Seneca", "Zeno", "Plato"]).unwrap();
assert_eq!(wise_friends.as_ref(), &["Plato", "Seneca", "Zeno"]);
let numbers = SortedNotEmptyVec::try_new(vec![4, 2, 7, 1]).unwrap();
assert_eq!(numbers.as_ref(), &[1, 2, 4, 7]);
--
From 日报小组 BobQ, FBI小白
社区学习交流平台订阅:
1
共 0 条评论, 1 页
评论区
写评论还没有评论