Skip to content

embed lua script language for go, very fast, support coroutine

License

Notifications You must be signed in to change notification settings

RyouZhang/go-lua

Repository files navigation

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

About

embed lua script language for go, very fast, support coroutine

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published