Mun

Build Status Crates.io docs master docs v0.2 MIT/Apache Join us on Discord codecov Lines of Code

Mun is a programming language empowering creation through iteration.

Features

Example

fn fibonacci(n: i32) -> i32 {
    if n <= 1 {
        n
    } else {
        fibonacci(n - 1) + fibonacci(n - 2)
    }
}

// Comments: functions marked as `pub` can be called outside the module
pub fn main() {
    // Native support for bool, f32, f64, i8, u8, u128, i128, usize, isize, etc
    let is_true = true;
    let var = 0.5;

    // Type annotations are not required when a variable's type can be deduced
    let n = 3;

    let result = fibonacci(n);

    // Adding a suffix to a literal restricts its type
    let lit = 15u128;

    let foo = record();
    let bar = tuple();
    let baz = on_heap();
}

// Both record structs and tuple structs are supported
struct Record {
    n: i32,
}

// Struct definitions include whether they are allocated by a garbage collector
// (`gc`) and passed by reference, or passed by `value`. By default, a struct
// is garbage collected.
struct(value) Tuple(f32, f32);

struct(gc) GC(i32);

// The order of function definitions doesn't matter
fn record() -> Record {
    // Mun allows implicit returns
    Record { n: 7 }
}

fn tuple() -> Tuple {
    // Mun allows explicit returns
    return Tuple(3.14, -6.28);
}

fn on_heap() -> GC {
    GC(0)
}

Documentation

The Mun Programming Language Book is hosted on netlify.

Pre-Built Binaries

[NOTE] We do not provide support for milestone releases

[NOTE] None of the binaries are currently signed

Download pre-built binaries of milestone releases for macOS, Linux, and Windows (64-bit only).

Building from Source

Installing dependencies

Make sure you have the following dependencies installed on you machine:

Rust

Install the latest stable version of Rust, e.g. using rustup.

LLVM

Mun targets LLVM 7.1.0. Installing LLVM is platform dependant and as such can be a pain. The following steps are how we install LLVM on our CI runners:

Clone source

```bash git clone https://github.com/mun-lang/mun.git

git submodule update --init --recursive ```

Compiling

bash cargo build --release

Building Documentation

Building the book requires mdBook, ideally version 0.3.x. To install it, run:

$ cargo install mdbook --vers [version-num]

The Mun book uses a custom version of Highlight.js to enable highlighting of Mun code. The build version of Highlight.js is required by mdbook in the theme/ folder but it is not distributed with the source. Instead, it can be build by invoking the build script:

bash cd book ./ci/build-highlight-js

Every time you change something in the custom version of highlight.js you have to call the above script to ensure you locally use the latest version.

After generating the custom minified Highlight.js, to build the book, type:

$ mdbook build

The output will be in the book subdirectory. To view the book, open it in your web browser.

For local development use mdbook serve instead of mdbook build. This will start a local webserver on port 3000 that serves the book and rebuilds the content when changes are detected.

All of the above is also combined in a single shell script that can be invoked by simply running:

bash ./ci/build

To test the rust source code in the book, run:

bash mdbook test -L path/to/target/debug/deps

For this to work, there can only be one libmun_runtime-{HASH}.rlib file in the provided library path.

License

The Mun Runtime is licensed under either of