SuperAPI AI 工具集

rust-syntax-trait-objects

编程与开发

查看项目

更新于 10-15 22:18

技能介绍

用途:帮助在 Rust 中处理 dyn Trait(运行时多态、类型擦除加 vtable)与 impl Trait(静态分发、单态化)之间的选择,排查特质为何不是 dyn 兼容,以及使用特质上转型和特质内精确捕获等较新特性。

主要能力:给出确定性的取舍规则——每个调用点只涉及一个具体类型时用 impl Trait,需要同一处存放多个不同具体类型时用 dyn Trait;不需要转移所有权时优先 &dyn Trait 而非 Box<dyn Trait>。列出指针选择(&dyn T、&mut dyn T、Box、Rc、Arc 及其成本)。逐条复述 dyn 兼容性规则:父特质须兼容、不得以 Sized 为父特质、不得有带泛型的关联类型或关联常量、关联函数须可分发或显式不可分发;可分发方法要求无类型参数、接收者为 &Self/&mut Self/Box<Self>/Rc<Self>/Arc<Self>/Pin<P>、不在接收者外使用 Self、非 async 且不返回 impl Trait。说明 vtable 布局(析构、大小、对齐、方法指针,非稳定 ABI)。

使用方式:以技能/文档形式提供模式与反模式,含 Vec<Box<dyn Drawable>> 异构存储、&dyn Trait 免分配参数、以 where Self: Sized 将泛型方法移出 vtable、1.86+ 直接上转型(&dyn Sub 到 &dyn Super,替代旧的 as_supertrait 方法)、1.87+ 在 RPITIT 上写 + use<'a, Self> 限定捕获。引用 references/methods.md、examples.md、anti-patterns.md 及 Rust 官方参考与博客链接。

适用场景:Rust 代码设计评审、编译错误 E0038 排查、集合中存储异构实现、异步与迭代器返回类型选择。

限制:资料未提供收费、安装命令或平台信息;vtable 布局明确为非稳定 ABI,不应依赖。只输出一个紧凑JSON对象。