Size: a a a

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

2020 April 17

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
Не Option<> как в size_hint итератора, а тупо usize:
fn remaining(&self) -> usize
источник

В

Вафель in Rust — русскоговорящее сообществo
Oleg Andreev
а почему в Bytes/BytesMut все методы паникуют и нет вариантов с Result? Было б приятнее писать .get_u32()? а не check_length(buf, 4)?; .get_u32().
Экстеншен в студию!
источник

Э

Эрик in Rust — русскоговорящее сообществo
Короче, какой-то крейт бесполезный, я руками лучше с байтами работать могу, чем через этот крейт.
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
да, он он - активная часть токио
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
какие-нить кодеки через Bytes связываются с AsyncRead/Write
источник

r

red75prime in Rust — русскоговорящее сообществo
Там основная фишка, что можно шарить владеющие куски Bytes
источник

Э

Эрик in Rust — русскоговорящее сообществo
red75prime
Там основная фишка, что можно шарить владеющие куски Bytes
Типа как split_mut() у слайсов?
источник

r

red75prime in Rust — русскоговорящее сообществo
Эрик
Типа как split_mut() у слайсов?
&vs[a..b]. В общем, комбинация &[u8] и Rc
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
Эрик
Типа как split_mut() у слайсов?
да. Но через Rc, а не через статические лайфтаймы
источник

OA

Oleg Andreev in Rust — русскоговорящее сообществo
так что структуры в которых лежат слайсы не превращаются в <'п, 'и, 'з, 'д, 'е, 'ц>
источник

Э

Эрик in Rust — русскоговорящее сообществo
Вообще, если бы я что-то такое писал, эта штука имела бы два основных метода:
/// Read the byte.
fn read_byte(&self) -> Option<u8>;
/// Go to the next byte.
fn advance(&mut self);

И все остальные методы уже дополнительные, как у итератора, а там хоть обоптимизируйся с этими дополнительными методами.
"It can be thought of as an efficient Iterator for collections of bytes."
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Вообще, я не могу представить ничего кроме &[u8], что могло бы хоть как-то работать с bytes и remaining. Эти две функции сразу вырубают любую возможность использовать куски памяти вместо слайса. То есть, ты посмотри на bytes:
fn bytes(&self) -> &[u8]
Он должен возвращать сраную ссылку! Не Cow, не вектор, а ссылку. Что кроме куска непрервной памяти может вернуть ссылку на непрерывный кусок памяти? Да ничего!
Обрати внимание: он возвращает ссылку на кусочек буфера, в том числе он может вернуть слайс нулевой длины
источник

MB

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

Э

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

MB

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

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
Возвращаешь слайс из того кусочка, который хранится в текущей вершине.
Как ты эффективно remaining посчитаешь?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
Как ты эффективно remaining посчитаешь?
Вариант 1. BufMut хранит ссылку на нижележащее дерево. Тогда remaining можно просто аккуратно поддерживать.
Вариант 2. Можно аккуратно подняться до корня, просматривая всех правых детей. Сумма их длин это remaining.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Mikail Bagishov
Вариант 1. BufMut хранит ссылку на нижележащее дерево. Тогда remaining можно просто аккуратно поддерживать.
Вариант 2. Можно аккуратно подняться до корня, просматривая всех правых детей. Сумма их длин это remaining.
То есть, надо пройти нехилый такой кусок дерева.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Эрик
То есть, надо пройти нехилый такой кусок дерева.
O(log N)
источник