Size: a a a

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

2020 September 18

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Vladimir
Ну понятно. Но как жить если нужны автотрейты?
Автотрейты параллельны. Речь только про негативные баунды
источник

V

Vladimir in Rust — русскоговорящее сообществo
вафель 🧇
Автотрейты параллельны. Речь только про негативные баунды
Ну вроде как они только для них существуют сейчас. Ты точно уверен что параллельны? https://github.com/rust-lang/rust/issues/13231
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
negative impls != negative bounds
источник
2020 September 19

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
С negative impls как раз проблемы чисто технические
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
А вот с negative bounds теоретические — они ломают semver
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Emmanuel Goldstein
А вот с negative bounds теоретические — они ломают semver
sad but true
источник

К

Кирилл in Rust — русскоговорящее сообществo
Как считать N байт в вектор из impl Read, не заполняя его предварительно?
источник

К

Кирилл in Rust — русскоговорящее сообществo
Гугл ничего не подсказал. Неужели, только unsafe?
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
Может BufMut из крейта bytes?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В данный момент это настолько тонкий лед, что лучше и не пытаться имхо
источник

К

Кирилл in Rust — русскоговорящее сообществo
Или забить, и считать, что в методе resize, заполнение незначительно по времени в сравнении с аллокацией?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Но RFC, добавляющий хорошую поддержку для неинициализированных буферов, есть и наверняка будет принят.
источник

К

Кирилл in Rust — русскоговорящее сообществo
Mikail Bagishov
Но RFC, добавляющий хорошую поддержку для неинициализированных буферов, есть и наверняка будет принят.
Это радует
источник

К

Кирилл in Rust — русскоговорящее сообществo
Oleg Andreev
Может BufMut из крейта bytes?
Спасибо, гляну
источник

К

Кирилл in Rust — русскоговорящее сообществo
Кирилл
Или забить, и считать, что в методе resize, заполнение незначительно по времени в сравнении с аллокацией?
Речь о десятках-сотнях Мб
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Кирилл
Или забить, и считать, что в методе resize, заполнение незначительно по времени в сравнении с аллокацией?
Я бы забил.

Но если все-таки хочешь, то тут два момента.
1) Надо убедиться, что реализация Read такое дозволяет. Если она конкретная, то это может быть написано в документации или еще где-то.
Если обобщенная, то ты должен использовать метод Read::initializer (а значит потребуется найтли компилятор).
2) буфер можно создать через MaybeUninit::uninit_array().assume_init() или Vec::with_capacity + v.set_len(v.capacity()).
И то и то ансейф, и то и то "blessed UB" (то есть формально это UB, но работает всегда правильныи образом).
источник

MB

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

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Кирилл
Гугл ничего не подсказал. Неужели, только unsafe?
А в чём проблема сделать Vec::with_capacity() + .read_to_end?
источник

К

Кирилл in Rust — русскоговорящее сообществo
Mikail Bagishov
Я бы забил.

Но если все-таки хочешь, то тут два момента.
1) Надо убедиться, что реализация Read такое дозволяет. Если она конкретная, то это может быть написано в документации или еще где-то.
Если обобщенная, то ты должен использовать метод Read::initializer (а значит потребуется найтли компилятор).
2) буфер можно создать через MaybeUninit::uninit_array().assume_init() или Vec::with_capacity + v.set_len(v.capacity()).
И то и то ансейф, и то и то "blessed UB" (то есть формально это UB, но работает всегда правильныи образом).
Спасибо. Пока забью. Если почувствую, что проседаю в этом месте, буду профилировать и оптимизировать. Просто, после плюсов, это ощущается очень непривычно)
источник

К

Кирилл in Rust — русскоговорящее сообществo
вафель 🧇
А в чём проблема сделать Vec::with_capacity() + .read_to_end?
Не надо to_end. Надо N байт.
источник