Cuno
я не понимаю почему оно имеет право так соптимизировать
Anonymous
Почему 0 тогда?
на все оверфловы 0 видимо
Αλεχ
Почему 0 тогда?
потому что умножение на 0 это 0?
Cuno
А где там умножение на 0?
Berkus
хмм, окей тогда
собери с дебагом )
kitsu
собери с дебагом )
ну с дебагом то все понятно
kitsu
становится не очень понятно, как подобные косяки ловить в проде
kitsu
ну, т.е это логично поведение но примерно с того момента, как о нем задумаешься
Αλεχ
А где там умножение на 0?
https://play.rust-lang.org/?gist=e617d2a9437ffab6edbebd607788059c&version=stable&mode=release&edition=2015
Αλεχ
2147483648 * 34 == 0
Cuno
https://play.rust-lang.org/?gist=e617d2a9437ffab6edbebd607788059c&version=stable&mode=release&edition=2015
А, оно просто в какой-то момент становится кратно модулю, окей
Cuno
и по дефолту в релизе wrapping поведение
Anonymous
становится не очень понятно, как подобные косяки ловить в проде
выбирать подходящие типы, при наличии юзер ввода chucked_mul, checked_add и т д
Berkus
или checked_* да
Alena
Ребят, поясните за этот кусок: https://gist.github.com/jFransham/369a86eff00e5f280ed25121454acec1#keep-as-much-as-possible-in-cache Почему там maximum 2 cache misses в каждом примере и как это считается вообще?
Cuno
> If we're on a 64-bit CPU with 64 byte cache lines like the i7, we end up with both *mut T and usize being 4 bytes each WUT
Cuno
т.е. в худшем случае указатель (и возможно capacity и num_columns) лежат в одной кешлинии, а len в другой
Cuno
таким образом нам их обе подгрузить придется для чтения, поэтому 2 промаха
Cuno
(это всё было про первый пример с вектором, остальные - аналогично)
Alena
Понятно, спасибо за ответ
-__-
O_o
Ну blazingly fast же
Cuno
O_o
Слишком жирно было бы на каждую арифметическую операцию проверку делать.
Маjко
Слишком жирно было бы на каждую арифметическую операцию проверку делать.
Ну окей, так то да. Минус в том что я нигде в растбуке не видел явного указания крупным текстом о том, что юзеринпут надо через паникующие операции гнать
Berkus
general knowledge типа
Маjко
general knowledge типа
Ну язык то про сейфти хд
Маjко
И ожидается что UB у нас только в ансейфе
Αλεχ
UB тут при чем?
Денис
а санитайзеры уже завезли для раста?
Vitaly
а санитайзеры уже завезли для раста?
а чем rustc не санитайзер? clippy?
Денис
а чем rustc не санитайзер? clippy?
ничем? clippy — линтер, а не сантизайер в общем уточню, меня интересует в первую очередь memory sanitizer
Денис
зачем в расте нужен memory sanitizer? потому что есть ансейф, есть FFI и прочее
Loyd
Валгрин же заводится
Денис
если я запоганю стек, валгринд этого не поймёт
Loyd
Это серьезно обдолбаться надо с ансейфом, чтоб стек просрать
Денис
тоже верно :)
Ignat
почему не собрать с ASan то, что вызываешь через FFI?
Денис
а если ансейф? что мне с асаном собирать? :)
Ignat
тогда сложнее
Ignat
не злоупотребляй ансейфом)
Денис
https://github.com/japaric/rust-san#addresssanitizer
Денис
не ожидал такого
Berkus
https://github.com/japaric/rust-san вот детальный манул
Berkus
Валгрин же заводится
валгринд нинужен
Денис
но всё равно спасибо ))
Денис
не используй ансеф и ffi, изи же
— доктор, мне больно дышать.. — не дышите. следующий! :)
Anonymous
— доктор, мне больно дышать.. — не дышите. следующий! :)
не дышать сложно, не использовать ансейф не сложно (почти всегда)
Berkus
не дышать сложно, не использовать ансейф не сложно (почти всегда)
ну мало ли, вдруг надо интерфейсить через ffi, как ты там без ансейфа-то?
Berkus
то есть понятно что поверх этого надо делать сейф обертку, но внутри обертки-то всё-равно ансейф
Anonymous
ну мало ли, вдруг надо интерфейсить через ffi, как ты там без ансейфа-то?
создать безопасную обертку, абстрагировать в крейт и забыть
Berkus
создать безопасную обертку, абстрагировать в крейт и забыть
внутри безопасной обертки у нас что? АНСЕЙФ
Berkus
этот крейт тоже надо тестировать, в том числе и санитайзерами
Денис
(вот бы щас очевидное пообсуждать)
Berkus
Αλεχ
этот крейт тоже надо тестировать, в том числе и санитайзерами
просто пиши так, чтобы не надо было тестить
Anton
просто пиши так, чтобы не надо было тестить
А потом ищи проблему месяцами)
Денис
не дышать сложно, не использовать ансейф не сложно (почти всегда)
если запилишь это без ансейфа, буду очень благодарен: https://play.rust-lang.org/?gist=aef332a029f7879d856966eb9cb4e5e6&version=stable&mode=debug&edition=2015
Vladimir
Мемори санитайзер нужен по другой причине
Αλεχ
А потом ищи проблему месяцами)
ну берешь такой, фигаришь coq'ом доказательство корректности обертки
Vladimir
Αλεχ
и после этого никогдавнутрь не лезешь
Αλεχ
На словах ты лев толстой
ну я пишу цикл от 1 до 1000000, где вызываю функцию, открываю диспетчер задач (я на винде) и смотрю, чтобы память не сильно росла
Αλεχ
работает реально
Berkus
просто пиши так, чтобы не надо было тестить
вы специально только последнее сообщение читаете, да?
Cat
ну берешь такой, фигаришь coq'ом доказательство корректности обертки
@mexus Просто форкаешь раст, и добавляешь этот дурацкий сплит с компайл тайм проверками
Berkus
ну я пишу цикл от 1 до 1000000, где вызываю функцию, открываю диспетчер задач (я на винде) и смотрю, чтобы память не сильно росла
очень научно, спасибо. Я без всякого цикла собираю с асаном, запускаю один раз и вижу leak report.
Αλεχ
тебе не скучно жить так?