@Caralice @UlinKot я писал что очень-очень начинающий в расте, имейте

ввиду. Я понимаю что ансейв нужен и т.п. но когда почти все сейф методы оказываются обёртками ансейв методов без каких-то либо проверок и т.п. - для меня странно, что тогда даёт сейв метод мне как пользователю, что компилятор не ругается?

8 ответов

9 просмотров

минимум дизайн кода раста позволяет сделать множество unsafe вещей safe. иначе как компилятор понимает где ругнуться)

А где ансейф обернут в сейф без проверок?

zer0toleranc3- Автор вопроса
Пух
А где ансейф обернут в сейф без проверок?

ну например String::from -> String::to_owned -> unsafe String::from_utf8_unchecked

zer0toleranc3
ну например String::from -> String::to_owned -> un...

Там на уровне типов должна быть гарантия. Ты, скорее всего, From для &str смотришь

zer0toleranc3
ну например String::from -> String::to_owned -> un...

https://doc.rust-lang.org/stable/src/alloc/str.rs.html#208-210 ты про это? для String::from_utf8_unchecked указан инвариант, при котором можно вызывать эту функцию: This function is unsafe because it does not check that the bytes passed to it are valid UTF-8. If this constraint is violated, it may cause memory unsafety issues with future users of the String, as the rest of the standard library assumes that Strings are valid UTF-8. self.as_bytes().to_owned() гарантированно содержит валидный UTF-8, поскольку содержит байты из &str

zer0toleranc3- Автор вопроса
Alexey Ermakov
Там на уровне типов должна быть гарантия. Ты, скор...

да, я не правильно написал но не суть, сейв ведёт в ансейв

zer0toleranc3
ну например String::from -> String::to_owned -> un...

тип String это самый обычный Vec<u8>, но! тип String имеет не просто Vec<u8> он имеет данные валидные UTF-8 кодировке. от этого мы имеем, slow функции проверяющие UTF-8, или unsafe создать String без проверки гарантии

zer0toleranc3
да, я не правильно написал но не суть, сейв ведёт ...

да, ансейф обычно предваряется комментами вида "мы в курсе, что тут ансейф и он работает потому, что ..."

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

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

кто-нибудь отправлял ли групповые медиа с entites? что бы были гипер ссылки const result = await this.client.invoke( new Api.messages.SendMultiMedia({ silen...
Kokni
3
Все привет, можно ли получить id group, когда добавили бота в group chat? А не реагировать на месседж в чате и тд
Oleksii Miuskyi
1
Короче это как обычный сайт?
Roma
1
это как-то фиксится?
Shen
4
if (user?.choseType === 'oneDay') { await ctx.reply( 'Добро пожаловать в команду «Магнита»! Правда, на один день ☺️ ', ); await ctx.s...
Kokni
1
Сonst magicTgHTML = (text, entities) => { let processedText = text; let offsetShift = 0; entities.forEach(entity => { const { offset, length, type, url, ...
Андрей
1
А у тебя есть информация сколько сейчас использует твой бот?
Artem Stormageddon
4
Привет всем, как я могу парсить из одного и отправлять в другой канал group media?
Kokni
2
всем салют сегодня утро заметил что бот не может отправлять фотки по url. ручками в браузере ссылка норм открывает фотки. падает ошибка 'Bad Request: failed to send message ...
Vasya Ivanov
9
а есть какая нить ссылка для быстрого открытия меню со старсами? типа tg://stars
Андрей
6
Карта сайта