Size: a a a

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

2020 October 22

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Но алиаса там не будет, потому что никто не знает, что там ссылка а не указатель.
В смысле не знает?
Одна переменная имеет тип ManuallyDrop<&mut U>
Другая &mut U
И то и то валидные ссылки
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В отличие от MaybeUninit, MamuallyDrop<T> содержит только корректные значения T, а для ссылок (как и других !Drop) и вовсе неотличим от T.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
В смысле не знает?
Одна переменная имеет тип ManuallyDrop<&mut U>
Другая &mut U
И то и то валидные ссылки
У тебя генерики, а не ссылки.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
А после мономорфизации окажутся ссылки
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Ну, в одной из мономорфизаций
источник

Э

Эрик in Rust — русскоговорящее сообществo
Из функции две мутабельные ссылки не возвращаются и вошедшая в функцию ссылка не разморозится из-за 'static и lifetime elision. А внутри функции никто ссылки эти не использует, только как байтики трансмутит.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Тут все опирается в конкретную модель алиасинга - возникает UB лишь от существования или еще какие-то телодвижения нужны.

А окончательной модели пока нет, так что ИМХО лучше писать код, который гарантированно не взорвется
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если бы там была ссылка как явный тип, а не как генерик, было бы UB.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А так нет, потому что генерик без баундов не может использоваться.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Если бы там была ссылка как явный тип, а не как генерик, было бы UB.
Лол
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Давай так: когда LLVM и MIR-optimizer будут ломать твою программу, они будут видеть уже мономорфизированный код
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Если в одной из функций будет UB, то они ее мискомпилируют независимо от того, была ли она изначально полноценной функций или лишь чьей-то мономорфизацией
источник

Э

Эрик in Rust — русскоговорящее сообществo
LLVM не будет ломать, потому что он лайфтаймы не видит, а алиасинг там не такой как в расте.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Это просто "пруф" того, что дженерики не спасают от UB.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В этом плане дженерик параметры никак не отличаются от обычных параметров: также как мы говорим "поведение этой функции неопределено, если x%2 ==1", также можно сказать "поведение этой функции неопределено, если T = &'a mut U для некоторых 'a и U"
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
В этом плане дженерик параметры никак не отличаются от обычных параметров: также как мы говорим "поведение этой функции неопределено, если x%2 ==1", также можно сказать "поведение этой функции неопределено, если T = &'a mut U для некоторых 'a и U"
Когда реборровинг мутабельных ссылок заменят чем-то другим — то есть никогда — memcpy мутабельной ссылки будет UB. А пока что норм.
источник

b

in Rust — русскоговорящее сообществo
когда-то видел здесь линк на github репу,где был документ с задачами для программиста, от легкого до сложного, сделать нейросеть, сделать калькулятор итп, может кто-то помнит такое? типа челленджа +))
источник

T

Tommy in Rust — русскоговорящее сообществo
когда-то видел здесь линк на github репу,где был документ с задачами для программиста, от легкого до сложного, сделать нейросеть, сделать калькулятор итп, может кто-то помнит такое? типа челленджа +))
Такое есть
источник

b

in Rust — русскоговорящее сообществo
оно самое,спс
источник

К

Константинтий... in Rust — русскоговорящее сообществo
Неизвестную ошибку компилятора словил
источник