#plugin #esolang #brainfuck #native #macro #bf #procedural

nightly brainfuck_macros

A compiler plugin that converts brainfuck code into Rust at compile time, letting your BF programs be optimised by LLVM to super-fast native code

6 releases

Uses old Rust 2015

0.1.5 Jan 30, 2015
0.1.4 Jan 24, 2015
0.1.2 Dec 13, 2014
0.1.1 Nov 14, 2014

#1072 in Programming languages

MIT/Apache

9KB
146 lines

Build Status

A simple procedural macro that turns a Brainfuck program into native code.

Example:

#![feature(phase)]

#[phase(plugin)] extern crate brainfuck_macros;

use std::io;

fn main() {
    let hello_world = brainfuck!{
        ++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>
        ---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
    };

    hello_world(&mut io::stdin(), &mut io::stdout()).unwrap();
}

See tests/ and examples/ for some basic examples and the bf_bf_interpreter subpackage for brainfuck interpreter written in brainfuck.

This is Cargo enabled, and so can be used by adding a [dependencies.brainfuck_macros] section pointing to this git repository to your Cargo.toml. If you wish to also use bf_bf_interpreter, simply add [dependencies.bf_bf_interpreter] section also pointing to this repository.

Specs

Normal brainfuck, with:

  • a tape length of 30000,
  • cells storing unsigned bytes (with wrapping),
  • EOF indicated by returning -1, and
  • out-of-bounds index steps ignored (i.e. < when pointing at the first cell is just ignored, and similarly for > at the last).

No runtime deps