Start

Download

Download the Minilang source code from Github.

Building

There are two ways to build the Minilang library (lib/libminilang.a) and interpreter (bin/minilang).

Using Rabs

This is the preferred method for building the Minilang library and interpreter. It requires installing Rabs first, see here for instructions.

$ git clone https://github.com/wrapl/minilang
$ cd minilang
$ rabs -D<build option 1> -D<build option 2> ...

A number of build options can be defined when invoking rabs to enable some additional features:

-DDEFAULTS:

Sets a number of typical build options based on the currently detected platform and architecture. This is the recommended build option. Invoking rabs without any defining any other options will also automatically enable defaults.

-DNANBOXING:

Uses NaN-boxing techniques to reduce memory usage for numeric values. Provides significant speed improvements but may not be available / fully tested on all platforms. Currently tested on x64 only.

-DMATH:

Adds several maths functions and multiple dimensional numeric arrays to the library. See math and array.

-DCOMPLEX:

Adds support for complex numbers.

-DTABLES:

Adds support for working with tabular data. See table. Enables -DMATH.

-DGIR:

Adds gobject-introspection functions to the library. See gir.

-DGTK_CONSOLE:

Adds a GTK+ console to the interpreter, enables -DGIR.

-DCBOR:

Adds CBOR encoding and decoding functions to the library. See cbor and Cbor.

-DJSON:

Adds JSON encoding and decoding functions to the library. See json.

-DSCHEDULER:

Adds support for preemptive multitasking by suspending code after a defined number of instructions, configurable at runtime.

-DMODULES:

Adds support for loading modules at runtime. On Linux, this includes support for shared object (.so) files. Enables -DSCHEDULER.

-DTRE:

Uses the TRE library (https://laurikari.net/tre/) for regular expressions, supporting fuzzy matching.

-DGENERICS:

Adds support for generic types.

-DTIME:

Adds support for time values. See time.

-DUUID:

Adds support for UUID values. See uuid.

Using Make

Since Minilang is used within Rabs, it can also be built with make. This enables only a subset of the available features and is intended just for building Rabs.

$ git clone https://github.com/wrapl/minilang
$ cd minilang
$ make

Running

Building Minilang with either Rabs or Make will produce an executable interpreter in bin/minilang. Running minilang without arguments will open a Minilang REPL where you can test the language. Type Ctrl + C to exit the REPL.

$ ./bin/minilang
--> list(1 .. 10)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
--> print("Hello world!\n")
Hello world!
nil
--> <Ctrl+C>
$

Additional arguments can be passed to minilang:

<file> [<arg₁> <arg₂> ...]:

Runs the code in <file> as a script.

-G:

Opens a GTK+ console if enabled.

-m <module>:

If built with module support, runs <module> as a module.

-s <interval>:

If built with a scheduler, enables preemptive multitasking every <interval> instructions.

When run with a script, additional command line arguments are passed in a variable called Args.

Minilang treats the first line of a script as a comment if it begins with #! allowing scripts to be made executable on some operating systems.

echo.mini
#!<path to minilang executable>

print('Args = {Args}\n')
$ chmod +x echo.mini
$ ./echo.mini
Args = []
$ ./echo.mini Hello world
Args = [Hello, world]
$

Embedding

See Embedding.