#brainfuck #interpreter #cli #ook #rust

bin+lib rob-vm

A cmdline tools to run brainfuck & ook & shortook code

4 stable releases

1.2.0 Jan 25, 2025
1.1.2 Jan 25, 2025

#580 in Development tools

Download history 146/week @ 2025-01-19 113/week @ 2025-01-26 4/week @ 2025-02-02

263 downloads per month

MIT license

17KB
279 lines

Rob-VM: Rust Ook & Brainfuck Virtual Machine

English | 简体中文

Crates.io MIT licensed Build Status

A fast and efficient interpreter for Brainfuck and Ook programming languages written in Rust.

Features

  • Supports multiple esoteric languages:
    • Brainfuck
    • Ook!
    • Short Ook (compressed Ook syntax)
  • Command-line interface with subcommands
  • Configurable memory sizes
  • Verbose debugging output option
  • Custom character mapping for Short Ook
  • File or stdin input support

Installation

cargo install rob-vm

then run binary directly

$ rob
A cmdline tools to run brainfuck & ook & shortook code

Usage: rob [OPTIONS] <COMMAND>

Commands:
  brainfuck  Run brainfuck code
  ook        Run ook code
  short-ook  Run in short ook mode
  help       Print this message or the help of the given subcommand(s)

Options:
  -v, --verbose
      --max-data-size <MAX_DATA_SIZE>      [default: 50000]
      --max-output-size <MAX_OUTPUT_SIZE>  [default: 50000]
  -h, --help                               Print help
  -V, --version                            Print version

if you want to use a statically linked binary, please compile with

cargo install rob-vm --target x86_64-unknown-linux-musl # for x86_64 linux
cargo install rob-vm --target aarch64-unknown-linux-musl # for aarch64 linux

Usage

you can input from a file(b means brainfuck, o means ook, so means short-ook)

rob ook a.txt # equivalent to rob o a.txt
rob b b.txt # equivalent to rob brainfuck b.txt
rob so c.txt # equivalent to rob short-ook c.txt

or just input a string(Hello World Example)

rob b ">++++++++[<+++++++++>-]<.>++++[<+++++++>-]<+.+++++++..+++.>>++++++[<+++++++>-]<++.------------.>++++++[<+++++++++>-]<+.<.+++.------.--------.>>>++++[<++++++++>-]<+."

rob o "Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook.
Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook?
Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook.
Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook."

if you want to specify the memory size, you can use --max-data-size and --max-output-size options(both default to 50000)

rob b b.txt --max-data-size 1000 --max-output-size 1000

Dependencies

~1.5–2MB
~39K SLoC