Forked and more actively developed tengo version
Find a file
earncef 5816186821 parser.ParseFile removed (#117)
* parser.ParseFile removed

* return values
2019-02-25 22:52:08 -08:00
assert Improvements on compiler/VM error reporting (filename:line:col) 2019-02-20 16:26:11 -08:00
cmd parser.ParseFile removed (#117) 2019-02-25 22:52:08 -08:00
compiler parser.ParseFile removed (#117) 2019-02-25 22:52:08 -08:00
docs Fix a closure-block scope bug (#99) 2019-02-11 17:34:02 -08:00
objects Improvements on compiler/VM error reporting (filename:line:col) 2019-02-20 16:26:11 -08:00
runtime parser.ParseFile removed (#117) 2019-02-25 22:52:08 -08:00
script Fixed panic when bailout is triggered in parser.ParseFile() (#113) 2019-02-25 10:22:45 -08:00
stdlib Improvements on compiler/VM error reporting (filename:line:col) 2019-02-20 16:26:11 -08:00
.gitignore add goreleaser deploy to travis 2019-01-30 00:52:55 -08:00
.goreleaser.yml fix CLI version command 2019-01-30 01:31:41 -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 Error Object (#4) 2019-01-16 12:23:20 -08:00
README.md 1. Added documentation on operators. 2. Add (char)-(int) operators 2019-02-01 16:58:44 -08:00
tengo.go update README, remove some unnecessary code 2019-01-12 22:58:12 -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 */

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

References