CCBI, or the Conforming Concurrent Befunge-98 Interpreter, is an interpreter for the Funge-98 family of languages, with support for the older Befunge-93 standard as well.Downloads
Pre-built binaries as well as the source code are available for download below. Note that many features of CCBI can be disabled or tweaked at build time, effecting performance tradeöffs. The binaries offered here have all features enabled and have Funge-Space and stack cell sizes equal to that of the native word: 32 bits on x86 and 64 bits on x86-64.
As an exception, the Windows binary does not have Unefunge and Trefunge support, due to DMD bug #3001 having been an issue when I was compiling these. Due to lack of interest (on my part in addition to anybody else's), this issue has not been rectified.
Internals
CCBI is written in version 1.0 of the D programming language, a language which unfortunately died: as far as I know there are no active users. That may be the main reason for why I am no longer working on CCBI. I worked on Amber for some time in the hopes of writing the next major version of CCBI in it, but eventually my interest died down, alongside Amber development slowing down in general.
To build CCBI, you will want CMake, version 0.99.9 of Tango, and a D 1.0 compiler. The official one from DigitalMars is likely the easiest to get working nowadays, although it definitely won't result in the fastest binary. For best optimization LDC would be preferable, but the latest LDC version supporting D 1.0 is likely so old that getting it working would be somewhat of a hassle. GDC is similar, with the added caveat that I never used it to build CCBI myself, even "back in the day".
A curses library is also needed for some optional features, but is not mandatory.
Goals
My goals for CCBI were no less than the following:
- Conform fully to the Funge-98 standard, with support for Unefunge-98, Befunge-98, and Trefunge-98, and all optional features mentioned in the standard. Conflicts between literal and apparently intended readings have typically been sorted out with the community. In general, Mycology codifies the current consensus.
Be the fastest standards-conformant Befunge-98 interpreter. I understand that the goal state here is somewhat difficult to describe accurately. For example, there are an infinite number of possible programs and it's likely that CCBI won't be consistently the fastest on all of them. A hand-wavy state such as "fastest on my desktop computer on all actually written programs that I know about and that perform a function I consider moderately useful" suits me just fine.
Note that I only mention Befunge-98 speed here, as the other Funge-98 variants are barely used in comparison and Befunge-93 is so simple that optimizing it takes a different kind of approach.
Support all known fingerprints: extensions to the basic Funge-98 feature set. This goal may change if I deem some fingerprints unacceptable.
The current (and likely final) state is as follows:
- As far as I know, CCBI is fully standards conformant.
- cfunge may be faster on some programs. I'm working on rectifying the situation, but only intermittently and the result will not be called CCBI.
- RC/Funge-98 supports more fingerprints, possibly a strict superset of what CCBI does. If I ever manage to rectify the speed situation I'll work on this next.