tgoop.com/bminaiev_blog/24
Last Update:
Воспроизводимость результатов
Я уже жаловался на то, как сложно измерять скорость программ, потому что слишком много внешних обстоятельств влияет на результат. Сегодня хочу еще раз пожаловаться, но уже на более простую вещь. Сложно писать программы, которые выдают один и тот же результат, если их запустить два раза.
Если программа работает недетерминированно, то поиск ошибок превращается в какой-то кошмар. То баг воспроизводится, то нет. Как понять из-за чего получается разный результат? Если вы пишете на C++, то с довольно большой вероятностью у вас Undefined Behavior, поздравляю. Можно поискать его с разными санитайзерами, иногда помогает.
В Rust таких проблем почти нет, но иногда все равно программы работают по-разному. В такие моменты думаешь, где ты поиспользовал random и забыл об этом. Так вот, два последних раза, когда у меня так было, я сложил какие-то объекты в хеш-таблицу, а потом проитерировался по ней. В Rust хеш-таблицы специально используют разный seed на каждом запуске, и это хорошо. Например, так сложнее подобрать данные, на которых она начнет тормозить. А еще заставляет программистов не закладываться на конкретную реализацию хеш-функций.
В общем с одной стороны хорошо, а с другой — источник недетерминизма, о котором постоянно забываешь. Хочу линтер, который предупредит меня в следующий раз, когда я захочу проитерироваться по хеш-таблице. Или вообще автоматику, которая говорит в каком месте программа работает не так, как в прошлый раз.
BY Боря программирует
Share with your friend now:
tgoop.com/bminaiev_blog/24