Size: a a a

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

2020 November 27

H

Hirrolot in Rust — русскоговорящее сообществo
Трансмют любой формы всегда потенциально отстреленная нога
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Более того, я видел случай когда transmute_copy работал лучше чем transmute :)
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Hirrolot
Трансмют любой формы всегда потенциально отстреленная нога
&T -> &T трансмьют норм, я спрашивал в дискорде раста
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Hirrolot
Но ведь для тупого каста указателей типы должны быть ещё совместимыми (выравнивание и т.д.)
с указателями проще, они всегда одного размера)
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
&T -> &T трансмьют норм, я спрашивал в дискорде раста
транусмут &T -> &T это id 🧟
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
транусмут &T -> &T это id 🧟
да, но я не могу на уровне типов доказать что T == U
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
да, но я не могу на уровне типов доказать что T == U
T == T
источник

p

polunin.ai in Rust — русскоговорящее сообществo
я делаю if TypeId::of::<T>() == TypeId::of::<U>() { transmute::<&T, &U>(value) }
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
лан, уже не смешно. Я докопался до опечатки T вместо U. А ты и не заметил :/
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
ах да.
transmute это же тоже копирование.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
лан, уже не смешно. Я докопался до опечатки T вместо U. А ты и не заметил :/
ну смотри. мне известно что T == U, то есть U=T, и можно сказать что T == T. но расту я объяснить это не могу. то есть раст считает что каст &T -> &U, а на самом деле каст &T -> &T
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
ну смотри. мне известно что T == U, то есть U=T, и можно сказать что T == T. но расту я объяснить это не могу. то есть раст считает что каст &T -> &U, а на самом деле каст &T -> &T
нельзя. У них дропы разные могут быть
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
а даже если один, это будет дабл фри
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
нельзя. У них дропы разные могут быть
у одного типа разные дропы? шта?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
ах да.
transmute это же тоже копирование.
Reinterprets the bits of a value of one type as another type.

transmute is semantically equivalent to a bitwise move of one type into another.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
polunin.ai
Reinterprets the bits of a value of one type as another type.

transmute is semantically equivalent to a bitwise move of one type into another.
Да, но при этом аргумент в него мувается, то есть memcpy-ится
источник

A

Aragaer in Rust — русскоговорящее сообществo
эмм. Если мувается, то владение передается, нет?
источник

A

Aragaer in Rust — русскоговорящее сообществo
то есть реально байты вообще те же самые остаются
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Владение передается, но с ним данной ситуации проблем нет.
Речь именно про memcpy-и байтиков
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Mikail Bagishov
Да, но при этом аргумент в него мувается, то есть memcpy-ится
подкрепишь свои слова кодом из компилятора?
источник