A minimalist, block-oriented, imperative language.
The bl:mp project is divided into several sections:
-
docs Documentation on the
bl:mplanguage -- 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:mpspecification. -
core An implementation of the
bl:mpcore language semantics as defined in the spec. This sub-project builds a librarylibblimpwhich other projects can link to embed and manipulate abl:mpinterpreter at a high level (parsing and executing programs) or a low level (directly manipulating interpreter state). -
prelude A pure
bl:mplibrary which implements some useful convenience features. -
system A plugin library that implements some
bl:mpprimitives 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:mpextensions which can be loaded into the interpreter. -
blimp A complete
bl:mpinterpreter. This sub-project builds a standalone executable which links tolibblimpand uses it to drive an interpreter. -
test A multi-purpose test suite. This sub-project contains a number of
bl:mpprograms 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:mpin 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.