rust-lang/rust-clippy

BufReader Stdin or StdinLock

Open

#6.755 aberto em 17 de fev. de 2021

Ver no GitHub
 (12 comments) (2 reactions) (1 assignee)Rust (1.391 forks)batch import
A-lintL-perfT-middlegood first issue

Métricas do repositório

Stars
 (10.406 stars)
Métricas de merge de PR
 (Mesclagem média 19d 22h) (113 fundiu PRs em 30d)

Description

What it does

Suggest using StdinLock rather than BufReader::new(io::stdin()) since it is already buffered. We might also want to take care of let stdin = io::stdin(); BufReader::new(stdin) and also BufReader::new(stdinlock) (there could be people doing this).

Categories (optional)

  • Kind: perf

Locking stdin also provide benefit for not having to re-lock it on every read.

std::io::stdin() already is buffered. Re-buffering it only increase the memcpy calls.

Source https://users.rust-lang.org/t/correct-way-for-taking-large-input-from-keyboard/55304/11 Related to https://github.com/rust-lang/rust-clippy/issues/1805

For example:

  • Recommend locking of stdin to reduce re-locking
  • Suggest not re-buffering stdin lock which already implements BufRead

Drawbacks

None.

Example

let reader = BufReader::new(io::stdin());  // this could a separate variable or StdinLock

Could be written as:

let stdin = io::stdin();
let reader = stdin.lock();

Guia do colaborador