Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/zeling/bf

Playground for the infamous esolang: Brainf*ck
https://github.com/zeling/bf

Last synced: about 2 months ago
JSON representation

Playground for the infamous esolang: Brainf*ck

Lists

README

        

# Brainf*ck

## Build
It should be fairly easy for anyone who has `make` installed.

## The interpreter
run `./bfi `
or simply omit the argument and provide your source using the stdin.
```
./bfi <+++++++>
++++++++++
>+++>+<<<<
-]>++.>+.+
++++++..++
+.>++.<<++
++++++++++
+++.>.+++.
------.---
-----.>+.>.
EOF
```
should give you back the classic "Hello World!"

## A section on quine

A quine is included, and its construction is also included.

Specifically, You can take a look at the `Makefile`, `quine-data.c`
and `quine-code.part`. These three files should give you some clue
about how the quine is constructed.

To generate it by yourself, you can first remove `quine.bf` by `rm quine.bf`
and then run `make quine.bf`, or simply `make clean quine.bf`.

To check that it is indeed a quine, `diff` should be helpful.
`diff quine.bf <(./bfi quine.bf)` should show you nothing.

## JIT
This BF interpreter also has JIT support on x86-64. The JIT will
kick in every time a real backward jump happens, i.e., `]` encountered
when the current cell is non-zero. This avoids compilation when the
loop is never or only executed once. When the loop is finished, the
execution will be handled back to the interpreter and the interpreter
will start executing bytecode until the next backward jump happens.
The assembler is currently hacky but it works. The blocks are organized
in the code page and are linked by jumps.

As measured, the performance boost of the JIT compiler on a Macbook Pro
2018 is 10x on mandelbrot-titanic.b.