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