How It Works
Tamarin includes an interpreter written in Go and uses an approach called Pratt Parsing to parse expressions. The excellent book Writing an Interpreter in Go was the inspiration for the project.
The Internals
As with many other interpreted languages, Tamarin includes:
- A lexer which takes source code as input and produces a stream of tokens as output.
- A parser which takes tokens as an input and produces an abstract syntax tree (AST).
- An evaluator which executes an AST as a program.
- Built-in types available to all programs.
- Built-in functions that are accesible by default.
Controlling Execution
The exec
package offers a user-friendly API to use Tamarin as a library.
The provided context.Context
is used to cancel execution or limit execution
with a timeout. Internally Tamarin passes this context to all operations to
guarantee that execution quickly stops when the context is canceled.
Concurrency
A single Tamarin execution operates within a single goroutine. Multiple Tamarin executions may happen concurrently and these are entirely independent. Tamarin avoids all use of global state.
Providing Input
When running Tamarin as a library, you can provide input data to the scripts by
passing in a scope that has been pre-populated with some variables. The scope
can be passed via the exec.Opts
struct that is passed to an execution.