All Projects → mun-lang → Mun

mun-lang / Mun

Licence: other
Source code for the Mun language and runtime.

Programming Languages

rust
8343 projects
language
365 projects
scripting
82 projects

Projects that are alternatives of or similar to Mun

Gamedev4noobs
Olá, sejam bem-vindos ao repositório _gamedev4noobs_ do Estúdio Vaca Roxa. O propósito desse repositório, além de contribuir para o projeto 4noobs, é ensinar o básico do desenvolvimento de jogos para iniciantes. Apresentando boas práticas e insumos para criar games incríveis.
Stars: ✭ 122 (-87.99%)
Mutual labels:  hacktoberfest, gamedev
Evennia
Python MUD/MUX/MUSH/MU* development system
Stars: ✭ 1,309 (+28.84%)
Mutual labels:  hacktoberfest, gamedev
Defold
Defold is a completely free to use game engine for development of desktop, mobile and web games.
Stars: ✭ 1,938 (+90.75%)
Mutual labels:  hacktoberfest, gamedev
Dome
A lightweight game development environment where games can be written in Wren
Stars: ✭ 251 (-75.3%)
Mutual labels:  hacktoberfest, gamedev
Terasology
Terasology - open source voxel world
Stars: ✭ 3,247 (+219.59%)
Mutual labels:  hacktoberfest, gamedev
Excalibur
🎮 An easy to use 2D HTML5 game engine written in TypeScript
Stars: ✭ 892 (-12.2%)
Mutual labels:  hacktoberfest, gamedev
Obengine
2D Game Engine with Lua Scripting made on top of SFML !
Stars: ✭ 335 (-67.03%)
Mutual labels:  hacktoberfest, gamedev
Monogame
One framework for creating powerful cross-platform games.
Stars: ✭ 8,014 (+688.78%)
Mutual labels:  hacktoberfest, gamedev
Complete Web Developer Manual
All resources and notes from the Complete Web Developer in 2021: Zero to Mastery course
Stars: ✭ 1,009 (-0.69%)
Mutual labels:  hacktoberfest
Padd
PADD (formerly Chronometer2) is a more expansive version of the original chronometer.sh that is included with Pi-Hole. PADD provides in-depth information about your Pi-hole.
Stars: ✭ 1,011 (-0.49%)
Mutual labels:  hacktoberfest
Library
Multi-format 1D/2D barcode image processing library, usable in JavaScript ecosystem.
Stars: ✭ 1,006 (-0.98%)
Mutual labels:  hacktoberfest
Pmbootstrap
Repository has been moved! https://postmarketos.org/move.html#/pmbootstrap 🚚 🚚 🚚
Stars: ✭ 1,010 (-0.59%)
Mutual labels:  hacktoberfest
Hyperion.ng
The successor to Hyperion aka Hyperion Next Generation
Stars: ✭ 1,008 (-0.79%)
Mutual labels:  hacktoberfest
Httpreports
HttpReports is an APM (application performance monitor) system for .Net Core.
Stars: ✭ 1,009 (-0.69%)
Mutual labels:  hacktoberfest
Simpleton Engine
What a stupid name for a library
Stars: ✭ 42 (-95.87%)
Mutual labels:  gamedev
Toolkit For Ynab
A general purpose YNAB enhancing browser extension for Chrome and Firefox. Have it your way!
Stars: ✭ 1,006 (-0.98%)
Mutual labels:  hacktoberfest
Game Dogfight
Air to air combat game, created in Python 3 using HARFANG 3D.
Stars: ✭ 41 (-95.96%)
Mutual labels:  gamedev
Tank island
Top down 2D shooter game that involves blowing up tanks
Stars: ✭ 42 (-95.87%)
Mutual labels:  gamedev
React Native Paper
Material Design for React Native (Android & iOS)
Stars: ✭ 8,714 (+757.68%)
Mutual labels:  hacktoberfest
Laminas Mail
Provides generalized functionality to compose and send both text and MIME-compliant multipart e-mail messages
Stars: ✭ 42 (-95.87%)
Mutual labels:  hacktoberfest

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

  • Ahead of time compilation - Mun is compiled ahead of time (AOT), as opposed to being interpreted or compiled just in time (JIT). By detecting errors in the code during AOT compilation, an entire class of runtime errors is eliminated. This allows developers to stay within the comfort of their IDE instead of having to switch between the IDE and target application to debug runtime errors.

  • Statically typed - Mun resolves types at compilation time instead of at runtime, resulting in immediate feedback when writing code and opening the door for powerful refactoring tools.

  • First class hot-reloading - Every aspect of Mun is designed with hot reloading in mind. Hot reloading is the process of changing code and resources of a live application, removing the need to start, stop and recompile an application whenever a function or value is changed.

  • Performance - AOT compilation combined with static typing ensure that Mun is compiled to machine code that can be natively executed on any target platform. LLVM is used for compilation and optimization, guaranteeing the best possible performance. Hot reloading does introduce a slight runtime overhead, but it can be disabled for production builds to ensure the best possible runtime performance.

  • Cross compilation - The Mun compiler is able to compile to all supported target platforms from any supported compiler platform.

  • Powerful IDE integration - The Mun language and compiler framework are designed to support source code queries, allowing for powerful IDE integrations such as code completion and refactoring tools.

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

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

Clone the source code, including all submodules:

git clone https://github.com/mun-lang/mun.git
git submodule update --init --recursive

Use cargo to build a release version

cargo build --release

Language server

Mun contains initial support for the lsp protocol, start the executable using:

mun language-server

Currently, only diagnostics are supported.

VS code

To run in Visual Studio Code. Use the following extension: VS code extension.

Vim/Neovim

Use a language server plugin (or built-in lsp support of neovim), for example using coc.nvim.

Paste the following config into your :CocConfig, replace the command, with the correct path to the mun executable.

  "languageserver": {
      "mun": {
          "command": "<path_to_mun>",
          "rootPatterns": ["mun.toml"],
          "trace.server": "verbose",
          "args": ["language-server"],
          "filetypes": ["mun"]
      }
  }

Note that, "trace.server": "verbose" is optional and helps with language server debugging.

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:

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:

./ci/build

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

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

at your option.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected]