Size: a a a

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

2020 March 16

e🦀

eupn 🦀 in Rust — русскоговорящее сообществo
Т.е. если мы реализуем unsafe трейт для примитива, который не гарантирует то, что гарантирует этот трейт, то мы получим soundness hole
источник

R

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

f

folex in Rust — русскоговорящее сообществo
А есть какой-нибудь способ имплицитно представлять структуру типа A как B?

Например у меня есть struct A() и struct B(A) и функция fn take(a: A). Можно ли заимплементить какой-нибудь AsRef/Deref так, чтобы работало take( B(A()) )?

disclaimer: мне это нужно для того что бы быстро и временно заменить ДТО в коде чужой библиотеки, так что я готов на любую грязь :)
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
folex
А есть какой-нибудь способ имплицитно представлять структуру типа A как B?

Например у меня есть struct A() и struct B(A) и функция fn take(a: A). Можно ли заимплементить какой-нибудь AsRef/Deref так, чтобы работало take( B(A()) )?

disclaimer: мне это нужно для того что бы быстро и временно заменить ДТО в коде чужой библиотеки, так что я готов на любую грязь :)
Она берет A или ссылку на A?
источник

f

folex in Rust — русскоговорящее сообществo
A :(
источник

f

folex in Rust — русскоговорящее сообществo
Mikail Bagishov
Она берет A или ссылку на A?
Там на самом деле и так, и так бывает. Со ссылкой было бы проще?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Как A и B выглядят?
источник

R

Re-L in Rust — русскоговорящее сообществo
folex
А есть какой-нибудь способ имплицитно представлять структуру типа A как B?

Например у меня есть struct A() и struct B(A) и функция fn take(a: A). Можно ли заимплементить какой-нибудь AsRef/Deref так, чтобы работало take( B(A()) )?

disclaimer: мне это нужно для того что бы быстро и временно заменить ДТО в коде чужой библиотеки, так что я готов на любую грязь :)
Into<A>
источник

R

Re-L in Rust — русскоговорящее сообществo
или чо блин
источник

R

Re-L in Rust — русскоговорящее сообществo
я запутался, жесть
источник

R

Re-L in Rust — русскоговорящее сообществo
Короче тебе Into нужен, да
источник

f

folex in Rust — русскоговорящее сообществo
Mikail Bagishov
Как A и B выглядят?
struct A { somethings: SmallVec<[Something; 6]> }
struct B { a: A, more: Data }
источник

e🦀

eupn 🦀 in Rust — русскоговорящее сообществo
Re-L
Короче тебе Into нужен, да
А кто будет вызывать .into()?
источник

f

folex in Rust — русскоговорящее сообществo
Re-L
Into<A>
impl Into<A> for B :) Но тогда придется везде .into() писать. А мне бы имплицитно
источник

R

Re-L in Rust — русскоговорящее сообществo
eupn 🦀
А кто будет вызывать .into()?
take?
источник

e🦀

eupn 🦀 in Rust — русскоговорящее сообществo
Rust за явность и такие вещи вряд ли вообще предусмотрены
источник

RP

Roman Proskuryakov in Rust — русскоговорящее сообществo
folex
impl Into<A> for B :) Но тогда придется везде .into() писать. А мне бы имплицитно
нет
источник

f

folex in Rust — русскоговорящее сообществo
Я вообще почти не надеюсь, что так можно, НО ВДРУГ. Мне бы намного меньше манки-патчинга пришлось бы совершать
источник

RP

Roman Proskuryakov in Rust — русскоговорящее сообществo
явное лучше неявного
источник

R

Re-L in Rust — русскоговорящее сообществo
ему же нужно  take( B(A()) ) и fn take(a: A)
источник