Releases: jyothiraditya-n/bfcli
Version 10.4: A Friend's Homecooked Beef
This version includes major bugfixes, but it also changes the way optimisations work a fair bit. Details can be found in the README.
TBH, it's 3AM and i'm quite ready to sleep 🥱
Version 10.3: A Friend's Microwave Popcorn
This release adds more compiler optimisations for both performance and reducing file size (by stripping away or redundant operations on cells after they've been initialised to 0). There's also support for outputting code as the intermediate representation used by the compiler, rather than doing any particular architecture, if you wanna study what the optimisations are more closely.
Otherwise, there is a very early attempt at compiling to the z80 architecture to get code to run on CP/M, but it doesn't really work... like, at all. But I'm sure that can change with time!
Version 10.2: A Mug of Hot Chocolate
This version adds support for compiling to intel-flavoured 8086 assembly for the NASM compiler, mostly just for the meme of it. It's not like you can suddenly run the interpreter under dos or anything too crazy like that, it's just that you can produce binaries for dos from brainfuck code if you so wanted.
Version 10.1: A Pink Water Bottle
This version adds multithreading by default to the size-optimiser, so that it finishes its task much faster. On top of that, you can also set a hard limit on the number of optimisation passes attempted with the -M<limit>
option, or just let it go the infinity (the default behaviour) with -M-1
.
Attached in this version's notes is the most size-optimised possible of the kingdom.bf
program compiled into asm source code. (About 1/4 the size of the version made with -O3
when compiled to a final binary.) Beware though, that this took over 2 hours to be generated on my laptop.
Version 10.0: A Midnight Snack
This version is the first real new version of the year 2022, and brings several upgrades with it.
For one, there's been some changes to the optimisation levels.
- The old
-O0
has become the new-O1
. - The old
-O1
has become the new-O2
.
The new -O0
basically gets the output from the interpreter directly, minimizing the compilation time. However, for those who want better runtime performance, there is a new -O3
mode that increases the memory footprint a little in exchange for a comparatively good 10% increase in performance.
However, the main draw is really the fact that there's a new -Os
option for minimizing the file size of the final binary, which tries its best to relocate a lot of the repeated code into functions and function calls. Although it produces great savings (up to 75%!!), beware the massive compilation time it begets as a result. I will probably need to tweak that option a lot before it can be used 'blindly' by an end user.
Version 9.4: A Slightly Soggy Burger
This release adds back in the branchless multiplication that was there in the codebase quite some time ago, but acknowledges that it requires at least double the memory footprint to not segfault because it's unpredictable.
Version 9.3: Cheesecake
This release adds several further, tiny optimisations to the final assembly/c output for a brainfuck program.
Version 9.2: True Swiss Cheese
This release adds support for compiling assembly to multiple architectures (currently only amd64 and i386 are supported, though.) and fixes several bugs in the compiler that were previously very annoying.
Version 9.1: A Questionable Block of Cheese
This version adds support for compilation to assembly .s
files when direct input is not needed.
Version 9.0: A Small Lemon Tart
This version removes the whole 'safe code' concept, because frankly, I haven't found much use for a wrapping data pointer in brainfuck and I don't think anyone uses it either.
But apart from that, this release brings a complete rewrite of the compilation and translation backend, as well as more optimisations than were previously implemented. That's to say, about 15% more performance, and about 60% smaller executable sizes.