Mako
Lightweight, efficient Lua-like scripting language with a Go backend!
the go mod is git.sharkk.net/Sharkk/Mako
Lexing & Parsing
Recursive descent + Pratt parsing. Scanner should move through tokens with virtually no allocations. Easy-to-consume AST for bytecode compilation.
VM
Stack-based VM, register-based optimizations where it makes sense for performance, and a very minimal bytecode format to preserve space.
Memory Management
Go's GC is robust and can be used for most needs; the internals can pool commonly used structures to reduce pressure.
Syntax
Lua-like, but with more minimalism and eventually some syntactic sugars.
// C style comments
/*
C style multi line comments
*/
// No local for variable definitions; the local behavior should be implicit
x = "foo"
y = "bar"
fn add(a, b)
return a + b
end
echo add(x, y) // Outputs: foobar
fnVar = fn(x, y, ...) /* do something */ end
if expression and expression2 then
res = add(1, 2)
elseif otherExpression() then
// do other stuff
else
// final thing
end
// Table order is preserved, unlike Lua
table = {
anything = "foo",
123 = "arg"
}
echo table["anything"] // outputs foo
echo table.anything // outputs foo
table.rawr = "mega"
table["mega"] = "rawr"
Description
Languages
Go
100%