xgo/README.md
2019-01-23 16:30:41 -08:00

4 KiB

The Tengo Language

GoDoc Go Report Card Build Status

Tengo is a small, dynamic, securely embeddable script language for Go.

Tengo is fast because it's compiled/executed as bytecode on stack-based VM that's written in native Go.

Try Tengo in Playground

Features

  • Similar syntax to Go but much simpler
  • Dynamically-typed with type coercions
  • First-class functions and closures
  • Garbage-collected
  • Extensible
  • Written in 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 such as bound methods and switch-case statements

v2. Tengo as a Standalone Language

  • Language-level concurrency support
  • Tengo Standard Libraries
  • Native executables compilation
  • More language features