Bfc Versions Save

An industrial-grade brainfuck compiler

1.12.0

8 months ago

Removed multiply loop optimisation due to soundness issues

1.11.0

11 months ago

Fixed a crash on compiling empty programs at low optimisation levels.

The strip argument is now -s, consistent with other compilers, and binaries are no longer stripped by default.

Stripping is now done during linking, rather than shelling out to strip. This is faster and more robust.

Improved dead code elimination after multiply loops, e.g. [>++<-][-] is equivalent to [>++<-].

1.10.0

11 months ago

Updated to LLVM 13.

Interface:

  • Improved diagnostics display on warnings and errors.
  • CLI argument parsing now uses the clap library. No arguments have changed, but help and argument parsing errors should be clearer.

1.7.0

8 years ago

Bug fixes:

  • Fixed a rare crash on programs with a large number of instructions had no effect.
  • Fixed a memory issue where programs with a large number of cells (which were stored on the stack) were misoptimised and segfaulted. Cell storage is now on the heap.

Optimisations:

  • Stripping symbols from the output binary can now be controlled with --strip.
  • Re-added a multiply loop optimisation. This was removed in 1.5.0 due to soundness bugs.

Usability:

  • Added a --version CLI argument.

1.6.0

8 years ago

Removed multiply loop extraction due to various known soundness failures.

1.5.0

8 years ago

Bug fixes:

  • Fixed an optimisation that incorrectly removed instructions when both . and , instructions were present.
  • Moved to LLVM 3.8, as LLVM 3.7 misoptimised some programs (see #8).

Usability:

  • bfc now reports a helpful error on nonexistent targets.
  • Improved wording of the warning message on multiply loops that access out-of-bounds cells.
  • Added a --passes CLI argument to customise which bfc optimisation passes are run.

Now with precompiled binaries for users to play with!