!egAGPgkFHOohwupqCs:matrix.org

ruRust/general

165 Members
1 Servers

Load older messages


Timestamp Message
15 Nov 2019
21:17:20@gitter_nnovikov:matrix.orgNickolay (Gitter)попробую
21:30:48@gitter_tanriol:matrix.orgDenis Lisov (Gitter)На ходу не позволит, сколько я знаю.
21:39:49@gitter_pzixel:matrix.orgPsilon (Gitter)там не будет размера на уровне компиляции
21:39:57@gitter_pzixel:matrix.orgPsilon (Gitter) будет слайс &[u8]
21:39:59@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) @nnovikov https://doc.rust-lang.org/std/io/trait.Read.html#method.bytes
21:40:00@gitter_pzixel:matrix.orgPsilon (Gitter)а не массив
21:40:57@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) (edited) @nnovikov https://doc.rust-lang.org/std/io/trait.Read.html#method.bytes => @nnovikov Если хочешь работать как с итератором, можно вот так сделать https://doc.rust-lang.org/std/io/trait.Read.html#method.bytes
21:43:41@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) Есть ещё такая штука
https://doc.rust-lang.org/std/io/trait.BufRead.html#method.read_until
21:46:00@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) (edited) Есть ещё такая штука https://doc.rust-lang.org/std/io/trait.BufRead.html#method.read_until => @nnovikov Если хочешь работать как с итератором, можно вот так сделать https://doc.rust-lang.org/std/io/trait.Read.html#method.bytes (но, наверно, это будет не очень решение)
21:49:23@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) Если нужно на ходу, то для этого есть два способа - взять массив максимального ожидаемого размера или вектор, если размер может быть очень большой.
И тогда можно читать в слайс
https://doc.rust-lang.org/std/io/trait.Read.html#method.read_exact
Стоит помнить о проверке реального количества прочитанных байт и оставшемся в буфере с предыдущих итераций мусоре.
21:50:13@gitter_nnovikov:matrix.orgNickolay (Gitter)

будет слайс &[u8]

то есть он просто запомнит указатель на начало и длинну, без копирования.
такой вариант годится, завтра попробую

21:50:57@gitter_nnovikov:matrix.orgNickolay (Gitter)в целом количество боли со всем этим такое, что я уже готов смириться с ошибками в nom
21:52:24@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter)
let mut buf = [0u8; 4096];
let size = cursor.read_exact(&mut buf[..10])?; // читаем 10 байт
if size != 10 {
    // что-то пошло не так
}
21:53:05@gitter_pzixel:matrix.orgPsilon (Gitter) @alexander-irbis если ты делаешь скролл то у тебя нет этого интерфейса
21:53:08@gitter_pzixel:matrix.orgPsilon (Gitter)и лучше бы тебе делать через него
21:53:29@gitter_pzixel:matrix.orgPsilon (Gitter) @nnovikov не знаю про какие ошибки ты говоришь, я тот код написал за пару часов, научившись парсить заголовки дотнетовских исполняемых файлов
21:53:38@gitter_pzixel:matrix.orgPsilon (Gitter)все очевидно и понятно
21:54:24@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) @Pzixel ну, мало ли, понимание стандартной библиотеки и паттернов Раста тоже может пригодиться в жизни.
21:54:55@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) (edited) @Pzixel ну, мало ли, понимание стандартной библиотеки и паттернов Раста тоже может пригодиться в жизни. => ```rust let mut buf = [0u8; 4096]; let n = 10; let size = cursor.read_exact(&mut buf[..n])?; // читаем n байт if size != n { // что-то пошло не так } ```
21:56:47@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter)А скролл мне сейчас не на чем потестировать...
21:57:29@gitter_pzixel:matrix.orgPsilon (Gitter)ну он хорош в частности тем что ты можешь удобно сишные строки парсить и за тебя уже написали BE/LE чтение циферок
21:57:43@gitter_pzixel:matrix.orgPsilon (Gitter)ну и то что он зирокост, он старается всегда тебе слайсы отдать
22:37:56@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter)

если ты делаешь скролл то у тебя нет этого интерфейса

Types that implement Read get methods defined in IOread for free.

@Pzixel вроде ничего не мешает иметь и то, и то.

23:05:27@gitter_pzixel:matrix.orgPsilon (Gitter)хм, ну ок
23:05:31@gitter_pzixel:matrix.orgPsilon (Gitter)просто зачем делать буфер если можно взять слайс?
23:06:09@gitter_pzixel:matrix.orgPsilon (Gitter)тем более что оно не подойдет - ты не знаешь n во время компиляции
23:06:17@gitter_pzixel:matrix.orgPsilon (Gitter) (edited) ... знаешь n во ... => ... знаешь размер массива во ...
16 Nov 2019
02:23:51@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) Да, к данным в памяти буфер лишний.
Как-то в голове смешалось io и курсоры ))
02:26:36@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter)

ты не знаешь размер массива во время компиляции

Во время компиляции могут быть ожидаемые параметры "не больше".
К тому же в качестве буфера можно использовать вектор или Bytes.
Но вообще да, чем дальше, тем меньше буфер нужен - серде умеет из ридера десериализовать.
Последний раз мне буфер нужен был для ffi.

02:26:49@gitter_alexander-irbis:matrix.orgAlexander Irbis (Gitter) (edited) ... для ffi. => ... для ffi-декодера mp3.

There are no newer messages yet.


Back to Room List