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.
/* The Tengo Language */
each := func(seq, fn) {
for x in seq { fn(x) }
}
sum := func(init, seq) {
each(seq, func(x) { init += x })
return init
}
n := sum(0, [1, 2, 3]) // == 6
s := sum("", [1, 2, 3]) // == "123"
Run this code in the Playground
Features
- Simple and highly readable Syntax
- Dynamic typing with type coercion
- Higher-order functions and closures
- Immutable values
- Garbage collection
- Securely Embeddable and Extensible
- Compiler/runtime written in native Go (no external deps or cgo)
- Executable as a standalone language / REPL
Benchmark
|
fib(35) |
fibt(35) |
Type |
Go |
58ms |
4ms |
Go (native) |
Tengo |
4,334ms |
5ms |
VM on Go |
Lua |
1,740ms |
3ms |
Lua (native) |
go-lua |
5,229ms |
5ms |
Lua VM on Go |
GopherLua |
5,486ms |
5ms |
Lua VM on Go |
Python |
3,116ms |
27ms |
Python (native) |
starlark-go |
15,414ms |
5ms |
Python-like Interpreter on Go |
gpython |
17,754ms |
6ms |
Python Interpreter on Go |
goja |
6,843ms |
6ms |
JS VM on Go |
otto |
86,542ms |
13ms |
JS Interpreter on Go |
Anko |
98,962ms |
26ms |
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
Roadmap
v0. (Current)
Things are experimental, and, the focus is on the core language features, stability, basic interoperability, and the performance optimization.
This will be the first versioned release, and, the main goal for v1 is to make Tengo as a fast embeddable script language for Go, which means Tengo will be comparable to other Go-based script languages such as Starlark, Lua VMs, and other interpreters.
- Interoperability with Go code
- Sandbox environment
- More language features
v2. Tengo as a Standalone Language
- Language-level concurrency support
- Tengo Standard Libraries
- Native executables compilation
- More language features