Rust soundness
Oct. 8th, 2021 11:45 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов: sum, min, max, any. Например, что должен вернуть max для пустого списка?
В питоне? Enjoy your ValueError exception.
В Rust'е? Max возвращает Some с результатом. Или None (который вариант от Option, а не абстрактный синглтон None).
В питоне? Enjoy your ValueError exception.
В Rust'е? Max возвращает Some с результатом. Или None (который вариант от Option, а не абстрактный синглтон None).
no subject
Date: 2021-10-08 10:48 am (UTC)fold-функция должна на пустом списке возвращать нейтральный элемент соответствующей ассоциативной бинарной операции. sum — + — 0, product — * — 1, concat — + — пустая строка, any — or — false, all — and — true, min — meet — +∞ или максимальное представимое значение типа, max — join — −∞ или минимальное представимое значение.
(А если мы не на решётке, то у нас будут проблемы с определением минимума/максимума и на непустых последовательностях.)
no subject
Date: 2021-10-08 12:35 pm (UTC)Rust умный. Если у тебя фигня в итераторе по упорядочиванию, то
2 | println!("{:?}", [1.0].iter().min()); | ^^^ the trait
std::cmp::Ord
is not implemented for{float}
Насчёт того, что min должен возвращать type::MIN - возражу, нифига не очевидно. Например, мы ищем билеты в ходе поиска показываем найденные цены. Если мне в процессе поиска скажут, что минимальная цена билета - 0, то это же враньё, мне никто не даст билет за 0. Правильно - обработать None и показать "-" или просто убрать поле из вывода.
no subject
Date: 2021-10-08 01:19 pm (UTC)А я этого и не говорил. Наоборот, min({}) = type::MAX, max({}) = type::MIN. Если билетов нет, то оптимальная цена — плюс бесконечность. Если кабачки никто не хочет брать, будем отдавать бесплатно.
no subject
Date: 2021-10-08 01:21 pm (UTC)Если я ищу билеты, их нет, и мне говорят, что максимальная цена - 0 - то это враньё. Любая цифра - враньё.
no subject
Date: 2021-10-08 12:07 pm (UTC)Занятная тема. Вот тут разъясняют, почему можно сумму по-всякому определить.
И тогда мне непонятно, откуда это расту известно, что sum на моноиде определен, а min и max на полугруппе?