Forked and more actively developed tengo version
Find a file
2019-12-20 10:25:16 -08:00
assert minor lint fixes (#182) 2019-04-10 21:39:19 -07: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 add variadic function parameters (#189) 2019-04-25 21:28:27 -07:00
docs replace outdated ErrInvalidTypeConversion in docs/objects.md (#223) 2019-10-24 10:19:02 +02:00
objects Fix typo in 'immutable_array.go' (#212) 2019-10-24 10:19:24 +02:00
runtime Fixed missing ObjectPtr check in OpSetSelLocal (#194) 2019-04-25 21:32:42 -07:00
script minor lint fixes (#182) 2019-04-10 21:39:19 -07:00
stdlib fix #231 (#235) 2019-11-02 07:36:47 +01:00
.gitignore add goreleaser deploy to travis 2019-01-30 00:52:55 -08:00
.goreleaser.yml Fixed goreleaser duplicate id error (#230) 2019-10-25 12:07:32 +02:00
.travis.yml fix go.mod to work with the travis ci build (#218) 2019-08-04 16:17:51 -04:00
go.mod fix go.mod to work with the travis ci build (#218) 2019-08-04 16:17:51 -04:00
go.sum Added empty go.sum file for the release pipeline (#229) 2019-10-25 11:16:02 +02: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 README.md 2019-12-20 10:25:16 -08: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 Sourcegraph

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 48ms 3ms Go (native)
Tengo 2,349ms 5ms VM on Go
Lua 1,416ms 3ms Lua (native)
go-lua 4,402ms 5ms Lua VM on Go
GopherLua 4,023ms 5ms Lua VM on Go
Python 2,588ms 26ms Python (native)
starlark-go 11,126ms 6ms Python-like Interpreter on Go
gpython 15,035ms 4ms Python Interpreter on Go
goja 5,089ms 5ms JS VM on Go
otto 68,377ms 11ms JS Interpreter on Go
Anko 92,579ms 18ms 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