DEV Community

Stacy Roll
Stacy Roll

Posted on

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.

Top comments (0)