Langur is an open-source imperative/functional scripting language written by Anthony Davis. Its principles of design are sensibility to humans, accuracy in calculation, and a clean, expressive syntax.

The following is a partial list of langur's features.

I initially developed langur using Thorsten Ball's books (1, 2), with many changes made and features added. It's not his fault if langur doesn't work. Please don't pester him about it.

Source code examples can be found on


Try it and let me know what you think. Constructive feedback is welcome.

langur 0.4.33 beta source code (7-Zip, 122K, released November 7, 2019)

Compiling langur also requires the following.

You'll need to copy the files from Go's regexp folder (something like /usr/lib/go-1.10/src/regexp) to the langur/regexp folder. This is to account for the missing replace-with-maximum-count method in Go's standard library, which is needed to make langur's regex methods complete for re2.

Langur uses the Apache license 2.0.

A full revision history is included in the download.

2019-11-07 - 0.4.33 beta - fixed closures clobbering each other's free slice when multiple definitions with multiple assignments and a single CompiledCode object - removed "leq" token (deprecated in 0.4.31 for "nxor" token) - changed method of stringification for interpolated string value when using OpEscString to not require an OpString first 2019-10-27 - 0.4.32 beta - updated more() to work with hashes; throws if duplicate hash keys present (use concatenation instead if you want to overwrite keys) - fixed parser to disallow explicit blocks within lists (better to get parsing error than a VM error) - updated parser to disallow statements within lists (such as break/next/return) - updated REPL to replace Unicode 2029 and 2028 characters to allow pasting input with line returns from text editors which generate Unicode line returns when copying text - fixed internal str.PadLeft and str.PadRight to check code point length, not byte length