Forked and more actively developed tengo version
Find a file
Daniel 01fe30f02a
bug fix for function return and if statement (#160)
* fix a bug where function return instruction is missing with if statement

* remove script cancel context test
2019-03-23 12:59:54 -07:00
assert limit max object allocations (#129) 2019-03-06 17:20:05 -08:00
cli fix bytecode encoding/decoding of builtin modules (#154) 2019-03-20 01:28:40 -07:00
cmd fix bytecode encoding/decoding of builtin modules (#154) 2019-03-20 01:28:40 -07:00
compiler bug fix for function return and if statement (#160) 2019-03-23 12:59:54 -07:00
docs update builtin function documentation (#159) 2019-03-22 09:27:34 -07:00
objects Opbinaryop and other minor optimizations (#157) 2019-03-22 04:42:34 -07:00
runtime bug fix for function return and if statement (#160) 2019-03-23 12:59:54 -07:00
script bug fix for function return and if statement (#160) 2019-03-23 12:59:54 -07:00
stdlib fix bytecode encoding/decoding of builtin modules (#154) 2019-03-20 01:28:40 -07:00
.gitignore add goreleaser deploy to travis 2019-01-30 00:52:55 -08:00
.goreleaser.yml Decoupled stdlib from vm, script and compiler (#126) 2019-03-04 10:21:39 -08:00
.travis.yml add goreleaser deploy to travis 2019-01-30 00:52:55 -08:00
LICENSE Create LICENSE 2019-01-11 01:17:07 -08:00
Makefile module refactor (#148) 2019-03-18 08:15:26 -07:00
README.md update benchmark (#158) 2019-03-22 05:27:28 -07:00
tengo.go Limit the maximum size of string/bytes values (#121) 2019-03-01 10:48:02 -08:00

The Tengo Language

GoDoc Go Report Card Build Status

Tengo is a small, dynamic, fast, secure script language for Go.

Tengo is fast and secure because it's compiled/executed as bytecode on stack-based VM that's written in native Go.

/* The Tengo Language */

fmt := import("fmt")

each := func(seq, fn) {
    for x in seq { fn(x) }
}

sum := func(init, seq) {
    each(seq, func(x) { init += x })
    return init
}

fmt.println(sum(0, [1, 2, 3]))   // "6"
fmt.println(sum("", [1, 2, 3]))  // "123"

Run this code in the Playground

Features

Benchmark

fib(35) fibt(35) Type
Go 65ms 4ms Go (native)
Tengo 2,786ms 5ms VM on Go
Lua 1,775ms 3ms Lua (native)
go-lua 5,173ms 5ms Lua VM on Go
GopherLua 5,392ms 5ms Lua VM on Go
Python 2,865ms 26ms Python (native)
starlark-go 16,716ms 11ms Python-like Interpreter on Go
gpython 18,709ms 6ms Python Interpreter on Go
goja 6,773ms 13ms JS VM on Go
otto 87,592ms 13ms JS Interpreter on Go
Anko 107,647ms 22ms Interpreter on Go

* 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
* See here for commands/codes used

References