Size: a a a

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

2021 June 28

d

dpytaylo in Rust — русскоговорящее сообщество
Привет. У меня возникла проблема с reader.read(&mut buff). Когда я пытаюсь отправить на сервер данные, которые равны или кратны BUFFER_SIZE, эта функция на последней итерации цикла намертво зависает. Я решил эту проблему при помощи fill_buf и consume, но всё же, почему зависает та функция? Из-за того, что она приспособлена только для EOF, которого нет в сокетах?
fn handle_client(&self, mut stream: TcpStream) {
       const BUFFER_SIZE: usize = 10;
       let mut buff = [b'\0'; BUFFER_SIZE];
       let mut received = Vec::new();

       loop {
           let length = match stream.read(&mut buff) /* вот тут зависает */ {
               Ok(val) => val,
               Err(_) => {
                   print_error("failed to read stream");
                   return;
               }
           };

           received.extend_from_slice(&buff[..length]);

           if length < BUFFER_SIZE {
               break;
           }
       }
}
источник

goldstein опять in Rust — русскоговорящее сообщество
а зачем тебе здесь BufReader, если ты используешь только .read()?
источник

LR

LeNya Robot in Rust — русскоговорящее сообщество
Почему  в плюсах можно создать массив размером с переменную, а в расте нет?
И вектор хранится всегда в куче, верно?
источник

GS

Georgy Shepelev in Rust — русскоговорящее сообщество
да, вектор в куче
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообщество
источник

goldstein опять in Rust — русскоговорящее сообщество
в расте можно создать массив размером с переменную.
источник

D

Denis in Rust — русскоговорящее сообщество
Это в каком стандарте плюсов описаны VLA?
источник

goldstein опять in Rust — русскоговорящее сообщество
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=4877fadcada83d1b975ead17f13cac77
держи, массив y размером с переменную x.
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообщество
разве? я в стейбле ничего похожего на vla не помню
источник

goldstein опять in Rust — русскоговорящее сообщество
а при чём тут VLA?
источник

goldstein опять in Rust — русскоговорящее сообщество
вот переменная, вот массив размером с неё, всё как заказывали.
источник

LR

LeNya Robot in Rust — русскоговорящее сообщество
unsigned int n;
cin >> n;
unsigned int arr[n];
Ну я могу сделать например так.
источник

goldstein опять in Rust — русскоговорящее сообщество
не можешь.
источник

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

GS

Georgy Shepelev in Rust — русскоговорящее сообщество
не можешь
источник

LR

LeNya Robot in Rust — русскоговорящее сообщество
Ну компилируется же :)
источник

LR

LeNya Robot in Rust — русскоговорящее сообщество
Имелось в виду размером с ее значение, извиняюсь за неточность.
источник

goldstein опять in Rust — русскоговорящее сообщество
VLA выпилены из стандарта C++, и по хорошей причине.
источник

D

Denis in Rust — русскоговорящее сообщество
Это расширение твоего конкретного компилятора, если включить флаги строгого следования стандарту, то компилироваться перестанет
источник

d

dpytaylo in Rust — русскоговорящее сообщество
А, ну логично (я просто его забыл убрать)
источник