CCBI is the Conforming Concurrent Befunge–98 Interpreter (although these days, it has Befunge–93 and Unefunge and Trefunge support as well). Frustrated due to the inconsistencies and bugs of other interpreters, I decided to undertake the endeavour of programming a Befunge–98 interpreter which complies to the specification. It took me over a year—a fair bit longer than I expected—and the result is CCBI, the first interpreter to have passed my Mycology tests without a single “BAD” result.
For a time CCBI was the only one which was even nearly that good, but things have changed for the better since the release of Mycology. New interpreters have appeared, old ones have risen again, and bugs are being swatted left and right. Have a look at the Mycology results comparison for the details!
CCBI is written in the D programming language (version 1.0).
Downloads
The binaries have all features enabled, and a cell size equal to the native word: 32 bits on x86 and 64 bits on x86–64.
As an exception, the Windows binary doesn’t have Unefunge and Trefunge support, due to DMD bug #3001 which prevents them from being in the same binary. Since demand for these is marginal at best even in the Befunge community, I haven’t bothered making separate binaries for each.
The latest version, 2.1:
- Changelog
- Windows binary (PE, x86):
- Linux binary (ELF, x86):
- Linux binary (ELF, x86–64):
- Source:
- pdcurses.lib for DMD on Windows (x86):
Compiling
Unless you want to pass the compiler commands manually, get CMake and use it to build.
You’ll need Tango—version 0.99.9 or later. But not too late: there are breaking changes in trunk which CCBI doesn’t support building against.
If you want to enable the NCRS fingerprint (or the TERM fingerprint on pretty much all non-Windows systems), you’ll also need a curses library. A working pdcurses.lib is provided for users of 32-bit Windows and DMD.
I’ve done the compilation myself with LDC revision 1646 (based on DMD 1.057) on Linux and DMD 1.056 on Windows.
With LDC, you need to use LLVM version 2.7 or later: 2.6 has an optimization-related bug which manifests at least on my platform, breaking things. Since even LLVM 2.7 miscompiles CCBI when using the full link-time optimization of the “Release-LLVM” style build, you need to use “Release-LLVM-Safer” instead.