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

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

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

24 ответов

7 просмотров

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

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

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

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

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
открыть папку в проводнике: 1 - ShellExecute 2 - ExecuteProcess 3 - OpenDocument что лучше выбрать?
Alexey Kulakov
12
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
10
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Карта сайта