rust-lang/rust-clippy

rc_buffer lint is dangerous as it changes runtime behaviour

Open

#6,170 创建于 2020年10月13日

在 GitHub 查看
 (7 评论) (1 反应) (0 负责人)Rust (1,391 fork)batch import
C-bugL-suggestiongood first issue

仓库指标

Star
 (10,406 star)
PR 合并指标
 (平均合并 19天 22小时) (30 天内合并 113 个 PR)

描述

clippy warns if one tries to use a type like Rc<Vec<T>>, e.g.

Arc<Vec<u8>>
^^^^^^^^^^^^ help: try: `Arc<[u8]>`

This is dangerous as creating a Rc<[T]> causes a memcpy of the whole memory area with all the elements, while creating an Rc<Vec<T>> simply copies over the 3 pointers inside the Vec without copying all the elements.

A better suggestion would probably be Rc<Box<[T]>> as that has the same runtime behaviour, but even independent of that it can be useful to have a Vec inside an Rc / Arc in combination with the make_mut() / get_mut() API.

The lint should probably be at least disabled by default.


The same also applies to Rc<String> vs Rc<str>.

贡献者指南