liancheng / brainsuck

A simple optimizing Brainfuck compiler (used as the demo for my QCon Beijing 2015 talk)

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Brainsuck

Brainsuck is an optimizing compiler prototype for the Brainfuck programming language. It's written in Scala using the same technologies used in Spark SQL's Catalyst optimizer. It's minimum, and only consists of 292 lines of code (test code not included). This project is designed for my QCon Beijing 2015 talk.

How to build

$ sbt stage

Run

Use the following command line to run the Hanoi tower example:

JAVA_OPTS=-Xss8m ./target/universal/stage/bin/brainsuck scripts/hanoi.b -O 2

The -O flag is used to specify optimization level (0, 1, or 2). -O 0 disables all optimizations.

Brainsuck uses recursion extensively for conciseness. That's why you need to specify stack size to avoid stack overflow. These recursions can be easily removed, but this makes the codebase unnecessarily bloated. Anyway, this is only a demo for a talk :^)

Acknowledgement

This project is inspired by brainfuck optimization strategies authored by Mats Linander.

Licence

MIT

About

A simple optimizing Brainfuck compiler (used as the demo for my QCon Beijing 2015 talk)


Languages

Language:Brainfuck 75.6%Language:Scala 24.4%