Forked and more actively developed tengo version
Find a file
Daniel Kang c816b705c1
Merge pull request from d5/doc
Documentation directory (/docs)
2019-01-23 20:16:36 -08:00
assert add os File functions; add Bytes type 2019-01-18 01:43:46 -08:00
cmd Compile can take custom stdlibs 2019-01-18 09:19:45 -08:00
compiler Merge pull request from d5/indexable 2019-01-23 09:29:19 -08:00
docs update interoperability 2019-01-23 17:35:57 -08:00
objects add Iterable interface 2019-01-23 13:36:03 -08:00
runtime add Iterable interface 2019-01-23 13:36:03 -08:00
script Moved interfaceToObject from scripts/conversion.go to objects/conversion.go as FromInterface 2019-01-22 21:09:52 +01:00
.gitignore initial commit 2019-01-08 23:17:42 -08:00
.travis.yml install golint in travis 2019-01-19 20:34:52 -08:00
LICENSE Create LICENSE 2019-01-11 01:17:07 -08:00
Makefile Error Object () 2019-01-16 12:23:20 -08:00
README.md add a sample 2019-01-23 20:12:34 -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 (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