macOS | Linux | Windows |
---|---|---|
MoonPlus is a compiler with features from Moonscript language 0.5.0 and adopting new features to make Moonscript more up to date.
Since original Moonscript has been used to write web framework lapis and run a few business web sites like itch.io and streak.club with some large code bases. The original language is getting too hard to adopt new features for those may break the stablility for existing applications.
So MoonPlus is a new code base for pushing the language to go forward and being a playground to try introducing new language syntax or programing paradigms to make Moonscript language more expressive and productive.
- No other dependencies needed except modified parserlib library from Achilleas Margaritis with some performance enhancement. lpeg library is no longer needed.
- Written in C++17.
- Support full Moonscript language features, generate the same Lua codes with original compiler.
- Reserve line numbers from Moonscript sources in compiled Lua codes to help with debugging.
- See other details in the changelog.
- Lua Module
Build moonp.so
file with
> make shared LUAI=/usr/local/include/lua LUAL=/usr/local/lib/lua
Then get the binary file from path bin/shared/moonp.so
.
Or you can install luarocks, a package manager for Lua modules. Then install it as a Lua module with
> luarocks install moonplus
Then require the MoonPlus module in Lua:
require("moonp")("main") -- require `main.mp`
local moonp = require("moonp")
local codes, err, globals = moonp.to_lua([[
f = ->
print "hello world"
f!
]],{
implicit_return_root = true,
reserve_line_number = true,
lint_global = true
})
- Binary Tool
Clone this repo, then build and install executable with:
> make install
Use MoonPlus tool with:
> moonp -h
Usage: moonp [options|files|directories] ...
-h Print this message
-e str Execute a file or raw codes
-t path Specify where to place compiled files
-o file Write output to file
-s Use spaces in generated codes instead of tabs
-m Generate minified codes
-p Write output to standard out
-b Dump compile time (doesn't write output)
-l Write line numbers from source codes
-v Print version
-- Read from standard in, print to standard out
(Must be first and only argument)
Execute without options to enter REPL, type symbol '$'
in a single line to start/stop multi-line mode
Use cases:
Recursively compile every moon+ file with extension .mp
under current path: moonp .
Compile and save results to a target path: moonp -t /target/path/ .
Compile and reserve debug info: moonp -l .
Compile and generate minified codes: moonp -m .
Execute raw codes: moonp -e 'print 123'
Execute a moon+ file: moonp -e main.mp
- Docker Hub Try moonp in another easy way: https://hub.docker.com/r/moonplus/moonplus
MIT