embed lua script language for Go
go luajit glue,very very fast, support lua coroutine
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)
}| 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