Size: a a a

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

2020 March 15

r

red75prime in Rust — русскоговорящее сообществo
Heorhi
стриминг отличается от обычного парсера только тем, что может вернуть incomplete
И механизмами для продолжения парсинга с точки остановки.
источник

H

Heorhi in Rust — русскоговорящее сообществo
polunin.ai
Наоборот
это еще мне пока не надо пропускать гигабайтные куски, как я делал раньше
источник

H

Heorhi in Rust — русскоговорящее сообществo
red75prime
И механизмами для продолжения парсинга с точки остановки.
гдето есть пример как их использоовать?
источник

H

Heorhi in Rust — русскоговорящее сообществo
к тому же новая архитектура нома врядле имеет такие механизмы
источник

r

red75prime in Rust — русскоговорящее сообществo
Heorhi
гдето есть пример как их использоовать?
Я не так понял сообщение. Там речь шла именно про nom? Если так, то да у nom'а таких механизмов нет, насколько мне известно
источник

H

Heorhi in Rust — русскоговорящее сообществo
red75prime
Я не так понял сообщение. Там речь шла именно про nom? Если так, то да у nom'а таких механизмов нет, насколько мне известно
да, в ном есть стриминговый парсер, но он, насколько я могу судить, ничем не отличается от от нестримингово кроме того, что может сообщить, что пакет не завершен. кстати непонятно, как ему сказать что поток закончился...
источник

H

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

dp

dark pit in Rust — русскоговорящее сообществo
ох ты, человек в теме.  я сам недавно написал потоковый парсер, для азбуки морзе -- все существующие предлагали закидывать готовые строчки или записи сигналов, а это не совсем то, как работает потоковая передача. . .   --- --- ---   . . .

никаких фреймворков не использовал, навелосипедил свои два трейта Tx & Rx по одному методу в каждом, которые как итераторы, но другие.
источник

VF

Vlad Frolov in Rust — русскоговорящее сообществo
Heorhi
да, в ном есть стриминговый парсер, но он, насколько я могу судить, ничем не отличается от от нестримингово кроме того, что может сообщить, что пакет не завершен. кстати непонятно, как ему сказать что поток закончился...
Я не в теме про конкретные реализации, но в rust часто для сигнализации конца чего-то используют drop
источник

A

Adv0cat in Rust — русскоговорящее сообществo
dark pit
ох ты, человек в теме.  я сам недавно написал потоковый парсер, для азбуки морзе -- все существующие предлагали закидывать готовые строчки или записи сигналов, а это не совсем то, как работает потоковая передача. . .   --- --- ---   . . .

никаких фреймворков не использовал, навелосипедил свои два трейта Tx & Rx по одному методу в каждом, которые как итераторы, но другие.
Дык потоковая передача по сути ничем не отличается от обычной, это просто докладывание инфы в файл, как только инфа пришла, можно как в конец файла так и в нужное место докладывать, зависит от формата
источник

dp

dark pit in Rust — русскоговорящее сообществo
Adv0cat
Дык потоковая передача по сути ничем не отличается от обычной, это просто докладывание инфы в файл, как только инфа пришла, можно как в конец файла так и в нужное место докладывать, зависит от формата
"обычный стиральный порошок"?
источник

A

Adv0cat in Rust — русскоговорящее сообществo
В вашем случае можно было создать std::fs::File или std::io::BufWriter и писать туда, пока место не закончится)) у или пока не надоест
источник

A

Adv0cat in Rust — русскоговорящее сообществo
А как надо почитать - то опять же std::io::BufReader и вперде
источник

dp

dark pit in Rust — русскоговорящее сообществo
хорош на рандоме выкрикивать умные слова, это не решит проблему.

а трейты из std::io слишком заточены на байты, без дженериков.
источник

A

Adv0cat in Rust — русскоговорящее сообществo
dark pit
хорош на рандоме выкрикивать умные слова, это не решит проблему.

а трейты из std::io слишком заточены на байты, без дженериков.
Ну чо рандомные слова то? Что значит слишком заточены на байты, без дженериков? Все программирование низкоуровневое - это перекладывание байтов из одного места в другое с трансформациями
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Adv0cat
В вашем случае можно было создать std::fs::File или std::io::BufWriter и писать туда, пока место не закончится)) у или пока не надоест
ТСу нужен эффективный потоковый парсер.
По сути, Generator<Resume=u8, Yield=Option<Message>>
источник

dp

dark pit in Rust — русскоговорящее сообществo
Adv0cat
Ну чо рандомные слова то? Что значит слишком заточены на байты, без дженериков? Все программирование низкоуровневое - это перекладывание байтов из одного места в другое с трансформациями
мне не нужен эфективный низкоуровневый байтошлепский парсер.  мне нужна морзянка, декодящая по мере поступления.
источник

MB

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

dp

dark pit in Rust — русскоговорящее сообществo
получение данных с такого алгоритма удобно решается парой трейтов вида...

pub trait Rx {
   type Item;

   /// Blocking receive value.
   fn recv(&mut self) -> Result<Option<Self::Item>, Box<dyn Error>>;
}

pub trait Tx {
   type Item;

   /// Blocking send value.
   fn send(&mut self, value: Self::Item) -> Result<(), Box<dyn Error>>;
}
источник

R

Rah in Rust — русскоговорящее сообществo
Gymmasssorla
А есть случай, когда мой подход не работает, но HRTB работает?
пытался сортировку подсчетом реализовать и без HRTB не получилось - https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=48c1c1d70d575d87ef519dd0558c71d8

так и не понял, почему HRTB помогло
источник