shikhalev.org

Последние записи

ТехнологииПрограммированиеRust

2021.03.16 • Иван Шихалев

Небольшой подводный камень в Rust

Обнаружил тут некоторый подводный камень в стандартной библиотеке Rust. Багом это назвать, конечно, нельзя, просто такой момент, где можно по собственной невнимательности наступить на грабли и не сразу это заметить, что нехарактерно для Rust.

Опасность подстерегает нас, когда мы читаем данные из файла посредством std::​fs::​File.read()1, не используя при этом std::io::BufReader2, а самостоятельно выделяя блок памяти и читая в него.

Подводный камень тут вот в чем, цитирую документацию:

if n is 0, then it can indicate one of two scenarios:

  • This reader has reached its “end of file” and will likely no longer be able to produce bytes. Note that this does not mean that the reader will always no longer be able to produce bytes.
  • The buffer specified was 0 bytes in length.

Подчеркивание мое. Итак, если мы передаем методу read() буфер нулевой длины, то результат будет ровно тот же самый, что и если мы достигли конца файла, т.е. Ok(0).


Читать далее »

грабли