172 похожих чатов

А если Option<T> где T немутабельный то компилятор не попробует

это оптимизнуть до уровня одного usize?

27 ответов

22 просмотра

Иммутабельными или мутабельными бывают переменные, но не типы.

Αλεχ Zhukovsky
и то и то бывает

И какие бывают иммутабельные типы?

Mikail Bagishov
И какие бывают иммутабельные типы?

struct VecView(Vec<i32>); impl VecView { pub fn as_ref(&self) -> &[i32] { &self.0 } }

Αλεχ Zhukovsky
struct VecView(Vec<i32>); impl VecView { pub fn...

Я кажется понимаю, что ты имеешь в виду (тип, который не предоставляет никаких сеттеров), но это по-прежнему не про иммутабельность типа (а про какие-то более высокоуровневые штуки типа дизайна апи), потому что x.0 = vec![] Или somehow_assign_with_unsafe(x, vec![])

Αλεχ Zhukovsky
struct VecView(Vec<i32>); impl VecView { pub fn...

Так значение целиком ты всё равно можешь перезаписать

Mikail Bagishov
Я кажется понимаю, что ты имеешь в виду (тип, кото...

оно приватное, ты не можешь так сделать. Вклбючая ансейф который УБ без репра

Αλεχ Zhukovsky
оно приватное, ты не можешь так сделать. Вклбючая ...

Предполагается, что первый вариант кода находится в том же модуле.

Mikail Bagishov
Предполагается, что первый вариант кода находится ...

нет, нет никакого другого кода больше в том же модуле. В чем и суть

Αλεχ Zhukovsky
оно приватное, ты не можешь так сделать. Вклбючая ...

Без UB можно обойтись: сначала вычисляем оффсет, вычитая адрес ссылки на x.0 из адреса x.

Mikail Bagishov
Без UB можно обойтись: сначала вычисляем оффсет, в...

ок, давай я буду в начало дописывать рандомное число приватных байт. Лучше станет?:)

Денис
тогда это не свойство типа

да ну. Тогда получается что у NonZeroU32 нет свойства не бьыть нулем ведь я могу дописать функцию которая инитит его из нуля!

Mikail Bagishov
Эта функция будет UB-шной

Не будет, нарушение инвариантов типов (кроме примитивных) не видет к уб обсуждалосб уже

Денис
всё так и есть

ну тогда никакие типы не дают никаких гарантий

Αλεχ Zhukovsky
Не будет, нарушение инвариантов типов (кроме прими...

На NonZeroU32 стоит волшебный атрибут, поэтому UB все-таки будет

Mikail Bagishov
На NonZeroU32 стоит волшебный атрибут, поэтому UB ...

то есть юзерский нонзеро написать невозможно по-вашему? Для меня разница только в том что в одном случае компиль соптимизирует Опшн<нонзеро> а вд ругом нет. А у вас получается детали реализации типа атрибутов конечной генерации имеют какой-то важный смысел

Αλεχ Zhukovsky
то есть юзерский нонзеро написать невозможно по-ва...

Это уже какой-то library UB vs language UB начинается, это отдельная интересная дискуссия про отсутствующий стандарт раста

Mikail Bagishov
Это уже какой-то library UB vs language UB начинае...

Мне ральф это прямым текстом отвечал на вопрос "является ли создание String::from_utf8_unchecked из невалидного байтового массива уб". Он сказал что уб на гарантии типов не распространяются и что нет, не является

Αλεχ Zhukovsky
Мне ральф это прямым текстом отвечал на вопрос "яв...

смотрим доку > If this constraint is violated, undefined behavior results, as the rest of Rust assumes that &strs are valid UTF-8. так что подозреваю, что либо он тебе этого не говорил, либо он говорил что-то не то, либо ты что-то не так понял

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
Карта сайта