Forked and more actively developed tengo version
Find a file
2019-01-30 00:52:55 -08:00
assert add Time type; add is_array, is_immutable_array, is_map, is_immutable_map, is_time, time builtin function 2019-01-29 16:01:14 -08:00
cmd Compile can take custom stdlibs 2019-01-18 09:19:45 -08:00
compiler add documentation for text module 2019-01-29 21:08:21 -08:00
docs add documentation for times module 2019-01-29 21:22:58 -08:00
objects add 'times' module 2019-01-29 17:39:25 -08:00
runtime clean up stdlib code 2019-01-29 19:52:00 -08:00
script add more strings functions to text module 2019-01-28 19:30:32 -08:00
.gitignore add goreleaser deploy to travis 2019-01-30 00:52:55 -08:00
.goreleaser.yml add goreleaser deploy to travis 2019-01-30 00:52:55 -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 add documentation for text module 2019-01-29 21:08:21 -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,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.

v1. Tengo as a Script Language

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