какой-то вероятностью я не буду её клонировать? Точнее есть ли профит/никогда в жизни не замечу разницы сколько раз бы не делал так/иначе?
Клонирование Rc — это просто инкрементация (даже не атомарная) счётчика. Как часто ты избегаешь лишних инкрементаций переменных?
А какой смысл в &Rc ?
Вот принимать Arc по ссылке в подобных ситуациях имеет чуть больше смысла
сломать Arc 🙂
Например, у меня хешмапа есть, в которой я хочу по значению внутри Rc найти ключ, а если его там нет — то создать значение. Но с большой вероятностью он там есть и инкрементить счётчик мне не нужно.
Ровно по тем же причинам, по которым ты написал(а?). Атомарный инкремент, как правило, дороже обычного, да и убрать лишние модификации компилятор реже может
боровить и мутить(мут версия) то, что нельзя боровить и мутить по версии борров чекера. но.. в случае чего в реалтайме словить ошибку. как минимум
А можно пример псевдокодом? Я не понял
И тебя не очень понял -_-
pub fn named_var_or_create(&mut self, name: &Rc<str>) -> Result<VarPointer, InterpreterError> { let Some(vars) = self.named_vars.get_mut(name) else { let ptr = self.persist_var(VarDef::unknown()); self.named_vars.insert(name.clone(), vec![ptr]); return Ok(ptr); };
У меня ключи Rc<str> в хештаблице.
Так можно же &str извлечь тогда из указателя через borrow
ты можешь просто &str принимать в функции
Обсуждают сегодня