What is GoLisp?
GoLisp is a simple Lisp language and runtime implemented in Google’s Go programming language. It’s main purpose is integration into a Go application to provide runtime extension and scripting. The core of a basic Lisp is provided, but with limited special forms and primitive functions. More of these will be added as required without having to modify the GoLisp core. Also, a REPL is provided and GoLisp can be used as-is to enter and evaluate code.
Work on GoLisp was started late April 2013 and we’ve been using it in production since September 2013 when Engine3 debuted at PAX Prime with the Siberia Elite.
GoLisp is a lexically scoped Lisp-1:
Lexically scoped:
The scope of definitions are determined by where they are made in the
lexical structure of the code. Each function, lambda
, let
, and
do
creates a new lexical scope. From [2]:
Here references to the established entity can occur only within certain program portions that are lexically (that is, textually) contained within the establishing construct. Typically the construct will have a part designated the body, and the scope of all entities established will be (or include) the body.
Lisp-1:
A Lisp where functions and variables share a single namespace. This differs from a Lisp-2 in which functions and variables have separate namespaces.
A bit more about it
The language and runtime of GoLisp are largely inspired by Scheme [1].
One decision I made was to implement the core builtin functions in GO rather than in Lisp itself (which is common and valid) for performance reasons.
The GoLisp REPL supports readline
and so provides history and
command editing. History is local to the directory from which you
execute GoLisp.