hbf: An optimizing Brainfuck compiler and evaluator

[ gpl, language, library, program ] [ Propose Tags ]

hbf is a compiler and executor of Brainfuck programs. It provides two executables: hbfc the Brainfuck compiler, and hbf the virtual machine that executes compiled Brainfuck programs.

[Skip to Readme]
Change log ChangeLog.md
Dependencies base (>= && <4.13), binary (>=, bytestring (>=, deepseq (>=, filepath (>=, hbf, optparse-applicative (>=, parsec (>=, primitive (>=, text (>=, transformers (>=, vector (>= [details]
License GPL-3.0-only
Copyright Sebastian Galkin, 2018
Author Sebastian Galkin
Maintainer paraseba@gmail.com
Category Language
Home page https://github.com/paraseba/hbf
Bug tracker https://github.com/paraseba/hbf/issues
Source repo head: git clone git@github.com:paraseba/hbf.git
Uploaded by paraseba at Wed Jul 4 16:02:14 UTC 2018
Distributions NixOS:
Executables hbfc, hbf
Downloads 231 total (15 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-07-04 [all 1 reports]
Hackage Matrix CI





Dump stg and core files


Enable profiling in benchmarks


Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainer's Corner

For package maintainers and hackage trustees

Readme for hbf-

[back to package description]

HBF Build Status Hackage

An unoptimized Brainfuck optimizing compiler and evaluator.

HBF can compile standard Brainfuck code into an optimized Intermediate Representation (IR). This IR can later be executed for faster Brainfuck program evaluation.

Getting Started


Use your preferred method for installing HBF from Hackage. If you prefer to build from source you can use cabal.


Let's say you have a Brainfuck program in the file mandelbrot.bf, for example, you can get one here

You can compile the program to the Intermediate Representation using the hbfc executable provided by this project:

hbfc mandelbrot.bf

That will create a file mandelbrot.bfc in the same directory. If you want the output in a different path you cane use --output option to hbfc

Now, you can run the compiled program:

hbf mandelbrot.bfc

and get something like:


There are several options to both the compiler and the evaluator, to modify levels of optimization, output and others. Try --help to learn more.


HBF has heavily documented code. You can read the documentation on Hackage.

All the optimizations are implemented in the compiler, for an example, you can look at the documentation for mulOpt.

Running the tests

cabal test

Test coverage report for the last build can be found here.

Running the benchmarks

cabal bench


This project is licensed under the GPL-3 License - see the LICENSE file for details

Copyright 2018 Sebastian Galkin.


This work is based on the excellent project bfoptimization by matslina: