go-lua
go-lua copied to clipboard
embed lua script language for go, very fast, support coroutine
glua
embed lua script language for Go
go luajit glue,very very fast, support lua coroutine
Demo
easy use, like:
package main
import (
"context"
"fmt"
"time"
"github.com/RyouZhang/go-lua"
)
func main() {
ts := time.Now()
res, err := glua.NewAction().WithScript(`
function fib(n)
if n == 0 then
return 0
elseif n == 1 then
return 1
end
return fib(n-1) + fib(n-2)
end
`).WithEntrypoint("fib").AddParam(35).Execute(context.Background())
fmt.Println("cost:", time.Now().Sub(ts))
fmt.Println(res, err)
}
Benchmark
| fib(35) | fibt(35) | Language (Type) | |
|---|---|---|---|
| wassmer-go | 57ms |
`` | Wasm |
| glua | 110ms |
1.5ms |
Luajit(VM) |
| Tengo | 2,315ms |
3ms |
Tengo (VM) |
| go-lua | 4,028ms |
3ms |
Lua (VM) |
| GopherLua | 4,409ms |
3ms |
Lua (VM) |
| goja | 5,194ms |
4ms |
JavaScript (VM) |
| starlark-go | 6,954ms |
3ms |
Starlark (Interpreter) |
| gpython | 11,324ms |
4ms |
Python (Interpreter) |
| Yaegi | 4,715ms |
10ms |
Yaegi (Interpreter) |
| otto | 48,539ms |
6ms |
JavaScript (Interpreter) |
| Anko | 52,821ms |
6ms |
Anko (Interpreter) |
| - | - | - | - |
| Go | 47ms |
2ms |
Go (Native) |
| Lua | 756ms |
2ms |
Lua (Native) |
| Python | 1,907ms |
14ms |
Python2 (Native) |
* fib(35):
Fibonacci(35)
* fibt(35):
tail-call version of Fibonacci(35)
* Go does not read the source code from file, while all other cases do