go-mlog
go-mlog copied to clipboard
Go to Mindustry (MLOG) compiler, runtime and decompiler (WIP)
Web IDE
A Web IDE is available here
Examples
There are several example programs available on the wiki.
Supports
- Functions
- Multiple function parameters/arguments
- Multiple function return values
-
return
from functions -
for
loops -
if
/else if
/else
statements -
switch
statement -
break
/continue
/fallthrough
statements - Statement labeling
-
goto
statements - Binary and Unary math
- Function level variable scopes
- Contextual errors
- Tree-shaking unused functions
- Multi-pass pre/post-processing
- Stackless functions
- Comment generation including source mapping
- Sub-selector support
- Type checking
- Full variable block scoping
In Progress
- MLOG Runtime
- MLOG to Go decompiler
Roadmap
- Nested sub-selector support
- Merged compiler and decompiler registries
- Constant string and number slices
Planned Optimizations
- Simple jump instructions
- Recursive constant propagation
- Write directly to function return variable
- Write directly to function parameters before jump
- Single-reference function inlining
Design Limitations
- Only hardcoded (translated) imports allowed
- Single file support only
- No recursion (more info here)
Endgame Roadmap
- Transpilation optimizations
- Support tail-recursion
CLI Usage
Usage:
go-mlog [command]
Available Commands:
completion generate the autocompletion script for the specified shell
decompile Decompile MLOG to Go
execute Execute MLOG
help Help about any command
transpile Transpile Go to MLOG
trex Transpile Go to MLOG and execute it
typings Output typings as JSON
version Print current go-mlog version
Flags:
--colors Force log output with colors
--comment-offset int Comment offset from line start (default 60)
--comments Output comments
-h, --help help for go-mlog
--log string The log level to output (default "info")
--metrics Output source metrics after execution
--numbers Output line numbers
--output string Output file. Outputs to stdout if unspecified
--source Output source code after comment
--stacked string Use a provided memory cell/bank as a stack