Forked and more actively developed tengo version
Find a file
Ozan HACIBEKİROĞLU ac534053e8
builtin delete for maps and arrays (#250)
* added builtin delete function and unit tests

* added vm tests for builtin delete

* added doc for builtin delete

* update doc
2020-02-19 15:02:31 +01:00
.circleci some code clean up (#237) 2019-12-20 11:40:38 -08:00
cmd add go module v2 (#244) 2019-12-29 13:38:51 -08:00
docs builtin delete for maps and arrays (#250) 2020-02-19 15:02:31 +01:00
parser add go module v2 (#244) 2019-12-29 13:38:51 -08:00
require add go module v2 (#244) 2019-12-29 13:38:51 -08:00
stdlib add go module v2 (#244) 2019-12-29 13:38:51 -08:00
token fix internal package issue (#241) 2019-12-24 07:42:30 -08:00
.gitignore add goreleaser deploy to travis 2019-01-30 00:52:55 -08:00
.goreleaser.yml updated goreleaser config (#249) 2020-02-16 06:29:06 +01:00
builtins.go builtin delete for maps and arrays (#250) 2020-02-19 15:02:31 +01:00
builtins_test.go builtin delete for maps and arrays (#250) 2020-02-19 15:02:31 +01:00
bytecode.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
bytecode_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
compiler.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
compiler_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
doc.go fix internal package issue (#241) 2019-12-24 07:42:30 -08:00
errors.go some code clean up (#237) 2019-12-20 11:40:38 -08:00
example_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
formatter.go some code clean up (#237) 2019-12-20 11:40:38 -08:00
go.mod add go module v2 (#244) 2019-12-29 13:38:51 -08:00
go.sum fix go.sum (#238) 2019-12-20 11:51:04 -08:00
instructions.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
iterator.go some code clean up (#237) 2019-12-20 11:40:38 -08:00
LICENSE Create LICENSE 2019-01-11 01:17:07 -08:00
Makefile some code clean up (#237) 2019-12-20 11:40:38 -08:00
modules.go some code clean up (#237) 2019-12-20 11:40:38 -08:00
objects.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
objects_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
README.md Update README.md 2020-01-19 16:16:30 -08:00
script.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
script_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
symbol_table.go fix internal package issue (#241) 2019-12-24 07:42:30 -08:00
symbol_table_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
tengo.go some code clean up (#237) 2019-12-20 11:40:38 -08:00
tengo_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
variable.go some code clean up (#237) 2019-12-20 11:40:38 -08:00
variable_test.go add go module v2 (#244) 2019-12-29 13:38:51 -08:00
vm.go update vm to raise wrapped runtime errors (#247) 2020-02-16 04:46:53 +01:00
vm_test.go builtin delete for maps and arrays (#250) 2020-02-19 15:02:31 +01:00

The Tengo Language

GoDoc Go Report Card CircleCI

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 */
fmt := import("fmt")

each := func(seq, fn) {
    for x in seq { fn(x) }
}

sum := func(init, seq) {
    each(seq, func(x) { init += x })
    return init
}

fmt.println(sum(0, [1, 2, 3]))   // "6"
fmt.println(sum("", [1, 2, 3]))  // "123"

Test this Tengo code in the Tengo Playground

Features

Benchmark

fib(35) fibt(35) Type
Go 48ms 3ms Go (native)
Tengo 2,349ms 5ms VM on Go
Lua 1,416ms 3ms Lua (native)
go-lua 4,402ms 5ms Lua VM on Go
GopherLua 4,023ms 5ms Lua VM on Go
Python 2,588ms 26ms Python (native)
starlark-go 11,126ms 6ms Python-like Interpreter on Go
gpython 15,035ms 4ms Python Interpreter on Go
goja 5,089ms 5ms JS VM on Go
otto 68,377ms 11ms JS Interpreter on Go
Anko 92,579ms 18ms 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

Quick Start

go get github.com/d5/tengo/v2

A simple Go example code that compiles/runs Tengo script code with some input/output values:

package main

import (
	"context"
	"fmt"

	"github.com/d5/tengo/v2"
)

func main() {
	// Tengo script code
	src := `
each := func(seq, fn) {
    for x in seq { fn(x) }
}

sum := 0
mul := 1
each([a, b, c, d], func(x) {
	sum += x
	mul *= x
})`

	// create a new Script instance
	script := tengo.NewScript([]byte(src))

	// set values
	_ = script.Add("a", 1)
	_ = script.Add("b", 9)
	_ = script.Add("c", 8)
	_ = script.Add("d", 4)

	// run the script
	compiled, err := script.RunContext(context.Background())
	if err != nil {
		panic(err)
	}

	// retrieve values
	sum := compiled.Get("sum")
	mul := compiled.Get("mul")
	fmt.Println(sum, mul) // "22 288"
}

References