Денис
потому что IntoIterator заимплеменчен как для Vec, так и для &Vec (и для &mut Vec)
Αλεχ
Денис
это сути дела не меняет)
Αλεχ
/// Returns an iterator over the slice.
///
/// # Examples
///
///
/// let x = &[1, 2, 4];
/// let mut iterator = x.iter();
///
/// assert_eq!(iterator.next(), Some(&1));
/// assert_eq!(iterator.next(), Some(&2));
/// assert_eq!(iterator.next(), Some(&4));
/// assert_eq!(iterator.next(), None);
///
#[stable(feature = "rust1", since = "1.0.0")]
#[inline]
pub fn iter(&self) -> Iter<T> {
unsafe {
let p = if mem::size_of::<T>() == 0 {
1 as *const _
} else {
let p = self.as_ptr();
assume(!p.is_null());
p
};
Iter {
ptr: p,
end: slice_offset!(p, self.len() as isize),
_marker: marker::PhantomData
}
}
}
Αλεχ
скорее у него он случайно из-за дерефа в &[T]
Alex
Всмысле unsafe это потенциальный UB, сможешь его там найти?
Денис
Денис
ну дереф правда [T], но не суть
Alex
В std
Alex
Тогда чем плох ансейф в std?
Berkus
тем что у тебя там может быть UB а как доказать что его нет, ты не знаешь? )
Vladimir
Любые
Vladimir
cat "c++_standart.txt" | grep "behaviour"
Vladimir
umsafe rust почти тоже самое
Денис
уровень троллинга просто зашкаливает
Vladimir
@tapok_satan @LooMaclin @notplhk
Денис
вносит смуту
Anton
Anton
что где
Anton
когда
Berkus
фух
Vladimir
պլհկ
Сорь
Anton
Дай одминку нормальную
Anton
в джерке
Anton
там вайпают я сделать нихуя не могу
Anton
в основном чате я не засираю дайте хоть в джерке свободу
Αλεχ
в том, что ты в СТД не найдешь ни одного места, где делается &T -> &mut T?
Berkus
Αλεχ
Денис
*unsafe_cell.get() разыменует указатель, я думаю, ты имел в виду unsafe_cell.get() as &mut _ :)
Αλεχ
используй, только правильно
Vladimir
Зависит от контекста
Vladimir
Если у тебя одна строка которая так делает
Vladimir
И нет больше кода
Vladimir
То пожалуйста
Денис
xD
Berkus
ну вот заполнишь слайс нулями, потом дерефай его сколько угодно
Αλεχ
например в случае actix как бы сразу 2 вещи были нарушены
1. он НЕ использовал UnsafeCell, из-за чего компилятор пометил как restricted оверлапящиеся указатели
2. он нарушил гайдлайны использования interior unsafety:
If you create a safe reference with lifetime 'a (either a &T or &mut T reference) that is accessible by safe code (for example, because you returned it), then you must not access the data in any way that contradicts that reference for the remainder of 'a. For example, that means that if you take the *mut T from an UnsafeCell<T> and case it to an &T, then until that reference's lifetime expires, the data in T must remain immutable (modulo any UnsafeCell data found within T, of course). Similarly, if you create an &mut T reference that is released to safe code, then you must not access the data within the UnsafeCell until that reference expires.
At all times, you must avoid data races, meaning that if multiple threads have access to the same UnsafeCell, then any writes must have a proper happens-before relation to all other accesses (or use atomics).
Αλεχ
эмм, ты читаешь чем?
Αλεχ
я совсем не то хотел
Αλεχ
можешь посмотреть результирующий код
Αλεχ
и поискать там UB
Денис
я честно говоря не понимаю, о чём спор
Денис
надо юзать — юзаешь, можешь без этого обойтись — обходишься
Денис
я думаю человек с плюсовым бэкграундом разберётся с сырыми указателями)
Αλεχ
Денис
м?
Αλεχ
Очередное объяснение — это nullability для unique_ptr/shared_ptr. Как по мне, это не баг, а фича. Т.к. нулевое значение для указателя — это его фундаментальное свойство в C++. Для тех (извращенцев, прим. меня), кто хочет иметь non_null указатели, есть gsl::not_null.
Berkus
нулловик-затейник
Vladimir
Инвалидность указателя - это тоже фундаментальное свойство
Αλεχ
Это просто краткое обсуждение, которое закончилось "option ни нужен"
Денис
Денис
Денис
ну в плюсах нет АДТ, поэтому там nullability таки нужно
но говорить, что АДТ не нужно, это конечно такое
"не понимаю, значит не нужно"
Vladimir
Помню проект на сишке, когда был школьником, там из-за того что не было хешмапа в с, а внешние либы юзать не комильфо, брали и перебирали масив структур, хорошо что значений было до 100.
Vladimir
Это я к тому, что мапы не нужны
Денис
Денис
ну не все конечно, но прям очень дофига кто
Αλεχ
аааааа
https://habr.com/post/415737/#comment_18836515 - отсюда пару постов
Αλεχ
Αλεχ
ах да, при этом у меня нет возможности узнать, пустая ячейка или в ней ноль
Vladimir
Vladimir
Ноль = пусто
Vladimir
Αλεχ
теги возить для всех значений?
Αλεχ
очень не хотелось бы
Денис
особенно ценой увеличения неподдерживаемой и плохо оттестированной кодовой базы =)
Αλεχ
Vladimir
У них нет разделение на "отсутствие" и "значение по умолчанию"
Αλεχ
а как мне определить момент, ресайзить или нет?
Αλεχ
потому что насколько я знаю, хэшмапа работает по принципу связных списков корзин и ресайза когда наступает ночь
Αλεχ
но в моем случае надо как-то без ресайза что ли постараться реализовать? хер знает
Αλεχ
в оригинальном эфириуме просто берется рандомная точка из 2^128
Αλεχ
и туда пишутся данные