< 返回版块

gensmusic 发表于 2024-07-09 09:26

简化自引用类型

这篇文章讨论了简化 Rust 中的自引用类型(SRTs)的方法,并提出了一些改进建议:

  1. 自引用类型不一定是不可移动的 (!Move):对于堆分配的数据,不需要 !Move 属性。
  2. 'self 生命周期不足:'self 生命周期过于粗糙,需要能够指向具体字段的路径生命周期(path-based lifetimes)。
  3. 自动引用稳定性:对于大多数自引用类型,编译器可以在结构移动时自动更新指针,无需 !Move 属性。
  4. 原始指针操作的问题:对于原始指针操作,需要引入 Transfer 特性来确保安全性。
  5. 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 页