This passion project is a fully-fledged programming language that supports much of what developers seek in a language.
- Classes
class Person { first_name: str last_name: str age: int constructor(self, first_name: str, last_name: str, age: int) { self.first_name = first_name self.last_name = last_name self.age = age } fn grow_up(self) { self.age += 1 } fn get_full_name(self) -> str { return self.first_name + " " + self.last_name } }
- Language Interoperability
my_static_variable: int = symbol "TEST" : "/my/rust_library.so" some_c_function: fn(int, int) -> int = symbol "add_numbers" : "/mathlib.so"
- Closures
counter = fn() -> [fn() -> int, fn(), fn()] { state = 0 return [ fn() -> int { return state }, fn() { modify state = state + 1 }, fn() { modify state = state - 1 } ] } [poll_count, inc, dec] = counter() assert poll_count() == 0 inc() assert poll_count() == 1 dec() dec() assert poll_count() == -1
- Strong Typing
who_is_cool = fn() -> [str...] { return ["Mateo", "Scout", "Tico"] } people: [int...] = who_is_cool() # ❌ people: [str...] = who_is_cool() # ✔️ me: bool = people[0] # ❌ me: str = people[0] # ✔️ from 1 to false step "A", bad { # ❌ } from 1 to 100, number { print number # ✔️ }
MScript has a build suite, mscript.exe
, that can:
- run MScript code
- compile MScript code to bytecode
- execute Precompiled MScript bytecode
- transpile Human-readable bytecode to executable bytecode
This programming language is in beta production. This means that some features might break during compilation or at runtime.
If you encounter a bug in any stage of the MScript build process, please report it under the Issues
tab in this repo!
An error could take the form of an explicit panic!()
, which means MScript is acting in a bugged state that could not have been expected.
More commonly, an error will spawn from a bytecode instruction that cannot execute properly. The output of said occurence might look like:
******* MSCRIPT INTERPRETER FATAL RUNTIME ERROR *******
Stack Machine: [Int(5), HeapPrimitive(&"Hello")]
Call stack trace:
>> path/to/file.mmm#__fn0
^ path/to/another_file.mmm#Object_37::$constructor
^ __module__
Caused By:
0. Reason #1
1. Reason #2
2. ...
Please report this at https://github.com/mrodz/mscript-lang/issues/new
Solve a Hard Leetcode problem in my programming language! 😊