High-performance Brainfuck interpreter with JIT acceleration, library imports, and interactive REPL
Project description
advanced-brainfuck
A high-performance Brainfuck language interpreter for Python with JIT acceleration, library imports, and an interactive REPL.
Documentation | PyPI | Changelog
Features
- JIT-accelerated execution — Compiles Brainfuck programs to an intermediate representation (IR) with run-length encoding, then executes via Numba's
@jit(nopython=True)for 3-5x speedup - Segmented JIT with checkpoints — All programs use the JIT path; I/O operations (
,,*,&) trigger checkpoints where Python handles input/output before resuming JIT execution - Interpreted fallback — If JIT compilation fails, falls back to interpreted IR execution with full compatibility
- Library system — Import external
.bffiles with{libname}syntax; recursive imports supported - Interactive REPL — Run
brainfuckwith no arguments for an interactive shell - Python API —
from brainfuck import BrainFuckfor programmatic use
Quick Start
Installation
pip install advanced-brainfuck
Command Line
# Run a program and exit
brainfuck --command-line '++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.'
# Run a program from file (recommended for large programs)
brainfuck --command-line -f program.b
# Run a program then enter interactive REPL
brainfuck '+++++++++++++++++++++++++++++++++++++++++++++++++++.'
# Enter interactive REPL
brainfuck
Python API
from brainfuck import BrainFuck
bf = BrainFuck()
bf.execute('+++++++++++++++++++++++++++++++++++++++++++++++++++.') # prints: 3
bf.execute('[-]') # clears cell 0
bf.execute('{p10}*{tochar}') # imports and prints: |10|
bf.execute('&') # prints command history
bf.interpreter() # starts interactive REPL
Brainfuck Commands
Standard Commands
| Command | Description |
|---|---|
> |
Increment the data pointer |
< |
Decrement the data pointer |
+ |
Increment the value at the data pointer |
- |
Decrement the value at the data pointer |
. |
Output the value at the data pointer |
, |
Accept one integer of input |
[ |
Jump forward past matching ] if value is zero |
] |
Jump back to matching [ if value is non-zero |
Additional Commands
| Command | Description |
|---|---|
{LIB} |
Import external Brainfuck code from bflib/LIB.bf |
* |
Output all cells with pointer highlighted |
& |
Output command history |
help |
Show command reference (REPL only) |
Library Modules
The bflib/ directory contains 31 reusable Brainfuck modules:
| Module | Description |
|---|---|
sum |
Sum current cell and next cell |
sub |
Subtract next cell from current cell |
mul |
Multiply current cell by next cell |
mul2 |
Multiply current cell by two |
div |
Divide current cell by next cell |
mod |
Modulo of current cell divided by next cell |
copy |
Copy current cell into next cell |
move |
Move current cell to next cell (copy + clear) |
swap |
Swap current cell and next cell |
zero |
Clear current cell (set to zero) |
not |
Logical NOT of current cell |
and |
Logical AND of current and next cell |
or |
Logical OR of current and next cell |
eq |
Test if current cell equals next cell |
if |
If current cell is non-zero, set next cell to 1 |
sqrt |
Integer square root of current cell |
p5 |
Add 5 to current cell |
p10, p32, p48, p50, p65, p100 |
Add 5, 10, 32 (space), 48 (digit '0'), 50, 65 ('A'), 100 to current cell |
m10, m50, m100 |
Subtract 10, 50, 100 from current cell |
toint |
Convert ASCII digit character to integer |
tochar |
Convert integer (0-9) to ASCII character |
newline |
Output a newline character (ASCII 10) |
lower |
Convert uppercase ASCII to lowercase |
upper |
Convert lowercase ASCII to uppercase |
Architecture
Source Code → Import Resolution → IR Compilation → Execution
↓
┌── Segmented JIT ──┐
│ execute_jit() │
│ via Numba │
│ │
│ Checkpoints at: │
│ , * & │
│ │
│ Python handles I/O │
│ then resumes JIT │
└────────────────────┘
┌── Fallback ────────┐
│ (JIT compilation │
│ failure only) │
│ Python IR loop │
└────────────────────┘
IR Compilation
Source code is compiled to an intermediate representation with:
- Run-length encoding —
+++++becomes('add', 5)in a single operation - Pre-resolved jumps —
[and]targets are computed at compile time - Numeric encoding — IR tuples converted to NumPy int32 arrays for JIT
Tape Memory
Cells use a pre-allocated NumPy tape of 65,536 cells (64K) for JIT execution, with a hybrid Python storage model for the REPL:
- Pre-allocated list of 30,000 integers for indices 0-29,999 (O(1) access)
- Sparse
defaultdictfor negative indices (rarely used but supported)
Requirements
- Python >= 3.13
- Numba >= 0.58.0
- NumPy >= 1.24.0
Project Structure
advanced-brainfuck/
├── brainfuck/ # Python package
│ ├── __init__.py # Public API re-exports
│ ├── __main__.py # python -m brainfuck entry point
│ ├── core.py # Core interpreter, compiler, JIT, CLI
│ └── bflib/ # Reusable Brainfuck library modules
│ ├── sum.bf
│ ├── copy.bf
│ ├── mul.bf
│ ├── div.bf
│ ├── toint.bf
│ └── ... # 31 modules total
├── docs/
│ ├── spec/ # Product & technical specifications
│ ├── adr/ # Architecture decision records
│ └── features/ # Feature specifications
├── tests/
│ └── features/ # Test files
├── pyproject.toml # Package configuration
└── README.md
License
GPLv3 — See LICENSE for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file advanced_brainfuck-2.1.2.tar.gz.
File metadata
- Download URL: advanced_brainfuck-2.1.2.tar.gz
- Upload date:
- Size: 52.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0030586ac887965e3ec79077c18de48cc8dee283fdf4a44070d53a959c768580
|
|
| MD5 |
906b5cc58e0007aa98fbc32667c7380b
|
|
| BLAKE2b-256 |
d3bdda9eeaea0c4d0801521754fffda48e607f3a3eeabe48e1a944f120443295
|
Provenance
The following attestation bundles were made for advanced_brainfuck-2.1.2.tar.gz:
Publisher:
pypi-publish.yml on nullhack/advanced-brainfuck
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
advanced_brainfuck-2.1.2.tar.gz -
Subject digest:
0030586ac887965e3ec79077c18de48cc8dee283fdf4a44070d53a959c768580 - Sigstore transparency entry: 1433866382
- Sigstore integration time:
-
Permalink:
nullhack/advanced-brainfuck@31615793cdc0d7c457112eb9099aef0107ae925b -
Branch / Tag:
refs/tags/v2.1.2 - Owner: https://github.com/nullhack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@31615793cdc0d7c457112eb9099aef0107ae925b -
Trigger Event:
push
-
Statement type:
File details
Details for the file advanced_brainfuck-2.1.2-py3-none-any.whl.
File metadata
- Download URL: advanced_brainfuck-2.1.2-py3-none-any.whl
- Upload date:
- Size: 44.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c1087ab768c4cdeffdef60b44972a5760aa8a7c4daa645971ef55b67331845e8
|
|
| MD5 |
49c582661d88ca5e8906271a40cb4cb9
|
|
| BLAKE2b-256 |
e312750fc35f4b641f42bb39b6f9d48095d43a6c325b148849ee97fefec3df8f
|
Provenance
The following attestation bundles were made for advanced_brainfuck-2.1.2-py3-none-any.whl:
Publisher:
pypi-publish.yml on nullhack/advanced-brainfuck
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
advanced_brainfuck-2.1.2-py3-none-any.whl -
Subject digest:
c1087ab768c4cdeffdef60b44972a5760aa8a7c4daa645971ef55b67331845e8 - Sigstore transparency entry: 1433866467
- Sigstore integration time:
-
Permalink:
nullhack/advanced-brainfuck@31615793cdc0d7c457112eb9099aef0107ae925b -
Branch / Tag:
refs/tags/v2.1.2 - Owner: https://github.com/nullhack
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@31615793cdc0d7c457112eb9099aef0107ae925b -
Trigger Event:
push
-
Statement type: