A minimalist, block-oriented, imperative language.
The bl:mp
project is divided into several sections:
-
docs Documentation on the
bl:mp
language -- what it is, and why it is. This will include an informal description of the language and some brief tutorials on how to use it, as well as a semi-formal semantics, which is considered the "official"bl:mp
specification. -
core An implementation of the
bl:mp
core language semantics as defined in the spec. This sub-project builds a librarylibblimp
which other projects can link to embed and manipulate abl:mp
interpreter at a high level (parsing and executing programs) or a low level (directly manipulating interpreter state). -
prelude A pure
bl:mp
library which implements some useful convenience features. -
system A plugin library that implements some
bl:mp
primitives that are not part of the core language specification, but which are necessary to write real-world programs, such as I/O functions and interfaces to system libraries. This sub-project buildsbl:mp
extensions which can be loaded into the interpreter. -
blimp A complete
bl:mp
interpreter. This sub-project builds a standalone executable which links tolibblimp
and uses it to drive an interpreter. -
test A multi-purpose test suite. This sub-project contains a number of
bl:mp
programs which have been annotated to document their expected behavior. These programs can be used to sanity-check the semantics, or to test the interpreter by comparing against the semantics, the annotations, or both. This sub-project builds a standalone executable which runs the test suite and produces a report. -
utils A library which provides some common functionality used by more than one of the other subprojects.
-
editors Support for
bl:mp
in various editors. Currently only Sublime is supported.
To build all projects:
mkdir bld-debug
cd bld-debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
To run all tests:
cd bld-debug
ctest
Note: to run the full test suite, you must have Racket installed. If you don't, CTest will run the tests which can be run without Racket.