Skip to content

Commit

Permalink
Treat the website as the source of truth for the changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
Wilfred committed Jun 17, 2023
1 parent 19492f0 commit b537bbd
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 180 deletions.
179 changes: 1 addition & 178 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,178 +1 @@
# v1.11.0 (released 17th June 2023)

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 `[>++<-]`.

# v1.10.0 (released 15th June 2023)

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.

# v1.9.0 (released 24th October 2020)

Updated to LLVM 10.0.

Bug fixes:

* Fixed an issue with stripping symbols on macOS (#23).
* ANSI colour codes are only output when stdout is a TTY (#15).

# v1.8.0

Updated to LLVM 8.0.

Fixed a linking error on recent LLVM versions, and a pass manager
segfault on LLVM 8.

# v1.7.0

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.

# v1.6.0

Extracting multiply loops was causing a variety of soundness failures
and segfaults. This peephole optimisation has been moved to a branch
until it's more robust.

# v1.5.0

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.

# v1.4.0

Portability:

* bfc now supports cross-compilation, so you can compile for any
architecture that LLVM supports.

* Fixed an issue compiling bfc on ARM.

Performance:

* LLVM's default optimisation levels are tuned for C. We now run LLVM
optimisation passes twice, to fully leverage LLVM. Many programs now
execute in less than half the time.

* We now run optimisations using LLVM's API directly rather than
shelling out to `opt` and `llc`. This provides a modest improvement
to compile time.

# v1.3.0

Performance:

* We now specify the data layout and target to LLVM, as recommended
by the LLVM team. In principle this is faster, but we've seen no
measurable performance boost.

Compatibility:

* bfc now provides up to 100,000 cells. This has been increased to
support awib, which requires at least 65,535 cells available.

Bug fixes:

* Fixed a compiler crash due to bounds analysis ignoring offsets.
* Show a more helpful error if `llc`, `clang` or `strip` are not
available.

Usability:

* bfc now reports errors and warnings with colour-coded diagnostics
and filenames.
* bfc now generates an error with position on syntax errors.
* bfc now generates a warning with position on dead code.
* bfc now generates a warning with position on code that is guaranteed
to error at runtime.

# v1.2.0

Optimisations:

* Compile time execution is now much smarter. Previously, we had to
finish executing loops in order to skip runtime execution. We can now
partly execute loops at runtime. This is a big help to many programs
with a large outer loop, previously they did not benefit from compile
time exeuction.

Compiler performance:

* `--dump-bf` is now much faster.

Bug fixes:

* In some cases, reorder with offset led to miscompilation
(only seen in mandelbrot.bf).

# v1.1.0

Optimisations:

* New optimisation: reorder with offset. See the readme for more
details.
* Remove redundant sets, dead loop removal and combine before read are
now smarter. Previously they required adjacent instructions, but
they now find the next relevant instruction when there are
irrelevant intermediate instructions.
* LLVM optimisation level can now be set with `--llvm-opt`.

Bug fixes:

* Fixed an issue with writing to stdout during speculative execution
(we were writing to stdin instead).

Usability:

* Improved the output of `--help`
* `--dump-bf-ir` has been renamed to `--dump-bf`

# v1.0.0

First release!

* Compiles to 32-bit x86 binaries.
* Peephole optimisations
* Cell bounds analysis
* Speculative execution
See <https://bfc.wilfred.me.uk/docs/changelog>
2 changes: 0 additions & 2 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,6 @@ id: changelog
title: Changelog
---

<!-- TODO: sync with bfc/changelog.md automatically -->

# v1.11.0 (released 17th June 2023)

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

0 comments on commit b537bbd

Please sign in to comment.