Size: a a a

Rust — русскоговорящее сообществo

2020 March 20

В

Вафель in Rust — русскоговорящее сообществo
diabolo
не гони, ты из слайсов её скомуниздил) 😂
Я про гард который хранит *mut Item и initialized_count, в дропе вызывает from_raw_parts_mut и drop_in_place и т.д....
источник

d

diabolo in Rust — русскоговорящее сообществo
Вафель
Я про гард который хранит *mut Item и initialized_count, в дропе вызывает from_raw_parts_mut и drop_in_place и т.д....
тогда про что?
источник

r

red75prime in Rust — русскоговорящее сообществo
Вафель
Спасибо, видимо так и придёться сделать.

Есть смысл оставлять в miri issue на эту тему?
Технически, есть алиасинг между результатом index_mut() и использованием array_base_ptr в drop.  Но, я не настолько разбираюсь во внутренностях, чтобы сказать проблема это или нет
источник

d

diabolo in Rust — русскоговорящее сообществo
)
источник

В

Вафель in Rust — русскоговорящее сообществo
red75prime
Технически, есть алиасинг между результатом index_mut() и использованием array_base_ptr в drop.  Но, я не настолько разбираюсь во внутренностях, чтобы сказать проблема это или нет
ок, спасибо ещё раз. открою тогда ишью и спрошу у разрабов miri
источник

В

Вафель in Rust — русскоговорящее сообществo
Btw, оба варианта генерируют ровно один и тот-же asm
источник

r

red75prime in Rust — русскоговорящее сообществo
Дык. Ссылки они на уровне языка, а не ассемблера
источник

r

red75prime in Rust — русскоговорящее сообществo
Точнее, UB, возможно обнаруженное miri, не вызвало изменений кодогенерации.
источник

В

Вафель in Rust — русскоговорящее сообществo
а кто-нибудь в курсе, miri запускает doc-тесты? В консоли вроде только unit-тесты, но при этом по времени похоже на то что запускались все
источник

В

Вафель in Rust — русскоговорящее сообществo
Нет, не запускает :(
источник

В

Вафель in Rust — русскоговорящее сообществo
А долго работает видимо потому что код неоптимизированный, в отличии от cargo test
источник

В

Вафель in Rust — русскоговорящее сообществo
источник

AL

Andrey @ozkriff Lesnikov in Rust — русскоговорящее сообществo
Вафель
А долго работает видимо потому что код неоптимизированный, в отличии от cargo test
в смысле "неоптимизированный"? мири ж по определению дофига проверок внутри делает, оно никогда и не будет быстрым. Точнее как проверок - miri же интерпретирует промежуточный код.
источник

В

Вафель in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikov
в смысле "неоптимизированный"? мири ж по определению дофига проверок внутри делает, оно никогда и не будет быстрым. Точнее как проверок - miri же интерпретирует промежуточный код.
Ну вот я про это по сути и говорю. Тесты которые обычно оптимизируются практически в ничто, с miri требуют долгой и мучительной интерпритации
источник

AK

Alexander Krivitskiy in Rust — русскоговорящее сообществo
red75prime
Точнее, UB, возможно обнаруженное miri, не вызвало изменений кодогенерации.
Так Мири же в рантайме алиасинг смотрит, предполагая, что рестрикты работают. Т.к. рестрикты отключены - на алиасинг сегодня все равно.
источник

r

red75prime in Rust — русскоговорящее сообществo
Alexander Krivitskiy
Так Мири же в рантайме алиасинг смотрит, предполагая, что рестрикты работают. Т.к. рестрикты отключены - на алиасинг сегодня все равно.
Должно быть "Предполагая, что рестрикты не работают"? Опечатка?
источник

В

Вафель in Rust — русскоговорящее сообществo
Alexander Krivitskiy
Так Мири же в рантайме алиасинг смотрит, предполагая, что рестрикты работают. Т.к. рестрикты отключены - на алиасинг сегодня все равно.
С -Zmutable-noalias=yes вроде тоже самое 🤔
источник

AK

Alexander Krivitskiy in Rust — русскоговорящее сообществo
red75prime
Должно быть "Предполагая, что рестрикты не работают"? Опечатка?
Нет. Предполагая, что оптимизация с рестриктами включена. Уб может возникнуть только в этом случае. Если рестрикты не оптимизируются - то алиасинг норм.

Я кстати на си пытался воспроизвести уб с рестриктами, создавая и используя поинтеры на рестриктед поинтеры - ничего не вышло. Может, у кого есть примеры?
источник

d

diabolo in Rust — русскоговорящее сообществo
Alexander Krivitskiy
Нет. Предполагая, что оптимизация с рестриктами включена. Уб может возникнуть только в этом случае. Если рестрикты не оптимизируются - то алиасинг норм.

Я кстати на си пытался воспроизвести уб с рестриктами, создавая и используя поинтеры на рестриктед поинтеры - ничего не вышло. Может, у кого есть примеры?
Алекс, это делается легко, зависит от архитектуры).
источник

r

red75prime in Rust — русскоговорящее сообществo
Если оптимизация включена, то компилятор может вообще выкинуть часть кода, потому что UB.
источник