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

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

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

24 ответов

29 просмотров

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...

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта