rust-lang/rust-clippy

rc_buffer lint is dangerous as it changes runtime behaviour

Open

#6.170 aberto em 13 de out. de 2020

Ver no GitHub
 (7 comments) (1 reaction) (0 assignees)Rust (1.391 forks)batch import
C-bugL-suggestiongood first issue

Métricas do repositório

Stars
 (10.406 stars)
Métricas de merge de PR
 (Mesclagem média 19d 22h) (113 fundiu PRs em 30d)

Description

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>.

Guia do colaborador