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

Здравствуйти я заинтересовался растом, так как в нём обещают безопасность

и если не писать unsafe не будет никакого уб как в том же С++, у меня вопрос, что произойдет если я передам в binary_search_by коллекции компаратор не соблюдающий частичный порядок, значит не соблюдён инвариант алгоритма, хотя он заявлен, при этом не будет никакой ошибки так как это невозможно определить никакими способами известными науке, это получается УБ?

24 ответов

25 просмотров

UB - состояние программы, которое приводит к неопределенному (читай - неизвестному) поведению исполняемой программы. Если функция может произвести UB она помечена как unsafe. Если помечена как safe она не должна вызывать UB (есть недобросовестные разработчики которые это правило не соблюдают, но таким надо давать по шапке и таких мало).

Kelbon- Автор вопроса
Dmytro Polunin
UB - состояние программы, которое приводит к неопр...

я спрашиваю про конкретную функцию, она safe с точки зрения стандартной библиотеки раста?

Kelbon
я спрашиваю про конкретную функцию, она safe с точ...

https://doc.rust-lang.org/reference/behavior-considered-undefined.html

Kelbon- Автор вопроса
Пух
https://doc.rust-lang.org/reference/behavior-consi...

Он новичок в расте а ты ему тычешь плохо описанный кусок недо-референса. Не надо так.

Kelbon
я спрашиваю про конкретную функцию, она safe с точ...

да. логические ошибки по определению раста безопасны

Kelbon
что я там узнаю?

что конкретно считается UB

Dmytro Polunin
Он новичок в расте а ты ему тычешь плохо описанный...

В котором, помимо всего прочего, описано меньше половины возможных UB

Пух
что конкретно считается UB

Там список далеко не exhaustive

Dmytro Polunin
Там список далеко не exhaustive

но представление о том, что это такое, дает

Результат будет unspecified, как в любой разумной реализации

Kelbon- Автор вопроса
Kelbon
что я там узнаю?

Почитай статьи "undefined behavior vs unspecified behaviour"

Kelbon- Автор вопроса
Sergey Skvortsov
Результат будет unspecified, как в любой разумной ...

но тогда у алгоритма нет никакого инварианта, он может выдать что угодно всегда, если не гарантирует результат

Kelbon
но тогда у алгоритма нет никакого инварианта, он м...

Алгоритм гарантирует результат при соблюдении входных инвариантов. При несоблюдении требований же он выдает бесполезные данные. Все верно, так везде и всегда.

Kelbon- Автор вопроса

а чем это отличается от "не обращайтесь по nullptr"?

Будет то же самое, что и если применить бинарный поиск к несортированным данным — логическая ошибка, вернется какой-то элемент или, возможно, будет паника (implementation defined). Функция при этом все равно safe: она не вернет ссылку на невалидную память, не запишет ничего за пределы массива и проч.

В случае конкретно этой функции если у тебя неправильный компаратор, то тебе могут вернуть "странный" результат. Условно рандомный элемент. Это safe. Некорректный ввод и некорректный вывод. Чего не будет, так это порчи памяти и ли результата из рандомного участка памяти. Ну если твой компаратор safe.

Kelbon- Автор вопроса
Lain-dono
В случае конкретно этой функции если у тебя неправ...

значит ли это что сама функция ничего не гарантирует?

Kelbon
значит ли это что сама функция ничего не гарантиру...

Софистика Сформулируйте инвариант, который вы оспорить пытаетесь (2)

Kelbon
а чем это отличается от "не обращайтесь по nullptr...

Косячная реализация, которую алгоритм намеренно не учитывает: бессмысленный, но детерминированный в пределах фиксированной версии стандартной библиотеки результат. Разыменование нулл поинтера: возможно что угодно. Любое поведение, в любой момент исполнения работы программы (иной раз и за пределами), которое способно непредсказуемо меняться.

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

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

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
1
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Карта сайта