The Tengo Language

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.
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]))
fmt.println(sum("", [1, 2, 3]))
Run this code in the Playground
Features
Benchmark
| 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