xgo/README.md
2019-01-23 20:12:34 -08:00

4.3 KiB

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 (v1)
    • 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 3ms Go (native)
Tengo 4,245ms 5ms VM on Go
Lua 1,739ms 3ms Lua (native)
go-lua 5,368ms 5ms Lua VM on Go
GopherLua 5,408ms 5ms Lua VM on Go
Python 3,176ms 27ms Python (native)
starlark-go 15,400ms 5ms Python-like Interpreter on Go
gpython 17,724ms 6ms Python Interpreter on Go
otto 82,050ms 22ms JS Interpreter on Go
Anko 98,739ms 31ms 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