Обновить

Комментарии 7

Не доверяйте пути между двумя системными вызовами

Вообще довольно классический баг для той же веб-разработки когда с базы что-то читают, а потом пишут. Ну и для параллельного кода тоже, вариация гонки потоков. Любопытно что для файлов такое тоже есть, если неправильно написать.

Зато там, где никакого бага нет, компилятор поднимет тревогу.

fn main() {
    let mut vec = vec![
        "foo".to_string(), 
        "bar".to_string(),
    ];
    vec[0] += &vec[1];
}

А вот как раз-таки есть проблема

vec[0] — требует изменяемое заимствование (&mut vec) для операции +=

&vec[1] — требует неизменяемое заимствование (&vec)

Не видим.

Так поведёт себя абсолютно любой язык. Проблема не в языке, а в человеке, который писал код

Тут больше про то, что какой не была бы безопасной вещь — не стоит слепо надеяться только на неё

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации