forked from lug/matterbridge
		
	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,180ms | 5ms | VM on Go | 
| Lua | 1,695ms | 3ms | Lua (native) | 
| go-lua | 5,163ms | 5ms | Lua VM on Go | 
| GopherLua | 5,525ms | 5ms | Lua VM on Go | 
| Python | 3,097ms | 27ms | Python (native) | 
| starlark-go | 15,307ms | 5ms | Python-like Interpreter on Go | 
| gpython | 17,656ms | 5ms | Python Interpreter on Go | 
| goja | 6,876ms | 5ms | JS VM on Go | 
| otto | 81,886ms | 12ms | JS Interpreter on Go | 
| Anko | 97,517ms | 14ms | 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
 
			