это оптимизнуть до уровня одного usize?
Иммутабельными или мутабельными бывают переменные, но не типы.
И какие бывают иммутабельные типы?
struct VecView(Vec<i32>); impl VecView { pub fn as_ref(&self) -> &[i32] { &self.0 } }
Я кажется понимаю, что ты имеешь в виду (тип, который не предоставляет никаких сеттеров), но это по-прежнему не про иммутабельность типа (а про какие-то более высокоуровневые штуки типа дизайна апи), потому что x.0 = vec![] Или somehow_assign_with_unsafe(x, vec![])
Так значение целиком ты всё равно можешь перезаписать
оно приватное, ты не можешь так сделать. Вклбючая ансейф который УБ без репра
Предполагается, что первый вариант кода находится в том же модуле.
vec_view1 = vec_view2
нет, нет никакого другого кода больше в том же модуле. В чем и суть
Без UB можно обойтись: сначала вычисляем оффсет, вычитая адрес ссылки на x.0 из адреса x.
ок, давай я буду в начало дописывать рандомное число приватных байт. Лучше станет?:)
это никак не повлияет
тогда это не свойство типа
да ну. Тогда получается что у NonZeroU32 нет свойства не бьыть нулем ведь я могу дописать функцию которая инитит его из нуля!
Эта функция будет UB-шной
Не будет, нарушение инвариантов типов (кроме примитивных) не видет к уб обсуждалосб уже
ну тогда никакие типы не дают никаких гарантий
На NonZeroU32 стоит волшебный атрибут, поэтому UB все-таки будет
то есть юзерский нонзеро написать невозможно по-вашему? Для меня разница только в том что в одном случае компиль соптимизирует Опшн<нонзеро> а вд ругом нет. А у вас получается детали реализации типа атрибутов конечной генерации имеют какой-то важный смысел
Всм нарушение инвариантов не уб :/
Это уже какой-то library UB vs language UB начинается, это отдельная интересная дискуссия про отсутствующий стандарт раста
Мне ральф это прямым текстом отвечал на вопрос "является ли создание String::from_utf8_unchecked из невалидного байтового массива уб". Он сказал что уб на гарантии типов не распространяются и что нет, не является
смотрим доку > If this constraint is violated, undefined behavior results, as the rest of Rust assumes that &strs are valid UTF-8. так что подозреваю, что либо он тебе этого не говорил, либо он говорил что-то не то, либо ты что-то не так понял
Люди просто любят доебаться до слов
Особенно модераторы.
Обсуждают сегодня