2 releases
0.1.1 | Jun 16, 2024 |
---|---|
0.1.0 | Jun 13, 2024 |
#135 in Programming languages
25KB
549 lines
Yet Another Brainf**k interpreter
An interpreter for .bf
files (or any file that is written for the Brainf**k programming language) that is written in the Rust programming language and is designed with efficiency in mind
What is Brainf**k anyways?
According to esolangs.org:
Brainfuck is one of the most famous esoteric programming languages, and has inspired the creation of a host of other languages.
Brainfuck operates on an array of memory cells, each initially set to zero. In most implementations, the array is 30,000 cells long, but this can be configured by using the -m --mem
flag.
There is a pointer, initially pointing to the first memory cell. There are 8 commands, ><+-.,[]
(all other characters are considered comments), which involve around moving the pointer, manipulating the memory cell at the pointer's location, reading and writing from/to a source/sink (stdin/stdout) and implementing a jump
-like behaviour.
For more info, check https://esolangs.org/wiki/Brainfuck
Installing / Compiling
If you have Cargo installed, to install the most recent version from crates.io, simply run cargo install aneurysm
. If you want to install the latest beta from GitHub, run cargo install --git https://github.com/Oakchris1955/rust-aneurysm.git --branch beta
. If you have already installed this package and want to update it to the latest version, run the corresponding command with the --force
flag
Usage
A Brainf**k interpreter written in Rust with minimal dependencies
Usage: aneurysm [OPTIONS] [FILENAME]
Arguments:
[FILENAME] Brainf**k file to execute [default: main.bf]
Options:
-m, --mem <memory> The memory size in bytes/cells to allocate for the program [default: 30000]
-v, --verbose Enable verbose logging
-e, --echo Whether or not to echo characters written to stdin
-h, --help Print help
-V, --version Print version
Logging
Verbose logging will be printed to stderr when the -v --verbose
flag is set. Anything with a level of INFO
or above will be printed, or DEBUG
is the program is run with debug assertations on. If the flag isn't set, the default level will be WARN
. Please note that you can set the logging level at runtime using the RUST_LOG
environment variable, which will take precedence over the above
About CPU and memory usage
This program basically adheres to the DOTADIW (Do One Thing and Do It Well) principle: in other words, if you run a program that never terminates, it could eat up your CPU. The same goes when you set its memory usage to an abnormal number (although in that case, the OS will probably terminate the process, see Linux's case: Out Of Memory Management). This program puts trust in the user, so that it can DOTADIW.
TODO
- Add generics for the
WrappingUInt
struct, rename it toModular
and move it to its own submodule - Separate crate for
modular
submodule - Debugger (preferable some kind of remote server that can be used with existing debuggers)
- Compiler?
License
Dependencies
~3–13MB
~100K SLoC