Forked and more actively developed tengo version
Find a file
2019-01-23 16:30:41 -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 #30 from d5/indexable 2019-01-23 09:29:19 -08:00
docs update docs 2019-01-23 16:30:41 -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 (#4) 2019-01-16 12:23:20 -08:00
README.md update docs 2019-01-23 16:30:41 -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, 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