DEV Community

Stacy Roll
Stacy Roll

Posted on

1 1

Comparison between k_board and termion 🦀⌨️

In this article, I'm going to compare the efficiency of two powerful keyboard handlers in the Rust ecosystem, namely k_board and termion.

To determine which one is more efficient, I will compare the final footprint of a file with each development dependency running the same code:

Print 'UP!' if the up arrow key is pressed, print 'DOWN!' if the down arrow key is pressed, and exit the program if the enter key is pressed.

termion code & final space

use termion::input::TermRead;
use termion::raw::IntoRawMode;
use std::io::Write;

fn main() {
    let mut stdout = std::io::stdout().into_raw_mode().unwrap();
    let stdin: std::io::Stdin = std::io::stdin();
    for c in stdin.keys() {
        match c.unwrap() {
            termion::event::Key::Up => println!("Up!"),
            termion::event::Key::Down => println!("Down!"),
            termion::event::Key::Char('\n') => break,
            _ => {}
        }
        stdout.flush().unwrap();
    }
}
Enter fullscreen mode Exit fullscreen mode
mateo@debian:~/Dev$ du -h pruebas/
64K pruebas/.git/hooks
4,0K    pruebas/.git/objects/pack
4,0K    pruebas/.git/objects/info
12K pruebas/.git/objects
4,0K    pruebas/.git/refs/heads
4,0K    pruebas/.git/refs/tags
12K pruebas/.git/refs
8,0K    pruebas/.git/info
112K    pruebas/.git
12K pruebas/src
14M pruebas/target/release/deps
12K pruebas/target/release/.fingerprint/libc-f4899200925cd573
20K pruebas/target/release/.fingerprint/libc-0b715d722187b0c6
20K pruebas/target/release/.fingerprint/pruebas-801f0ed4b4a9017c
20K pruebas/target/release/.fingerprint/numtoa-5db795b61c1068b6
20K pruebas/target/release/.fingerprint/termion-57b99c4cdcd30adf
20K pruebas/target/release/.fingerprint/libc-1e1f3236a10c7892
116K    pruebas/target/release/.fingerprint
4,0K    pruebas/target/release/examples
4,0K    pruebas/target/release/build/libc-f4899200925cd573/out
20K pruebas/target/release/build/libc-f4899200925cd573
4,6M    pruebas/target/release/build/libc-1e1f3236a10c7892
4,6M    pruebas/target/release/build
4,0K    pruebas/target/release/incremental
18M pruebas/target/release
18M pruebas/target
19M pruebas/
Enter fullscreen mode Exit fullscreen mode

19 MB memory space used.

k_board code & final space

fn main() {
    for key in k_board::Keyboard::new() {
        match key {
            k_board::Keys::Up => println!("Up!"),
            k_board::Keys::Down => println!("Down!"),
            k_board::Keys::Enter => break,
            _ => {}
        }
    }
}
Enter fullscreen mode Exit fullscreen mode
mateo@debian:~/Dev$ du -h pruebas/
64K pruebas/.git/hooks
4,0K    pruebas/.git/objects/pack
4,0K    pruebas/.git/objects/info
12K pruebas/.git/objects
4,0K    pruebas/.git/refs/heads
4,0K    pruebas/.git/refs/tags
12K pruebas/.git/refs
8,0K    pruebas/.git/info
112K    pruebas/.git
8,0K    pruebas/src
4,6M    pruebas/target/release/deps
20K pruebas/target/release/.fingerprint/pruebas-3a8501bba3baba89
20K pruebas/target/release/.fingerprint/k_board-217281d3fbdf4f77
44K pruebas/target/release/.fingerprint
4,0K    pruebas/target/release/examples
4,0K    pruebas/target/release/build
4,0K    pruebas/target/release/incremental
4,6M    pruebas/target/release
4,6M    pruebas/target
4,8M    pruebas/
Enter fullscreen mode Exit fullscreen mode

4,8 MB memory space used.


After performing the same task, we can see that k_board is 3.96 times lighter than termion. Additionally, it has a cleaner and more concise syntax.

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (0)

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook