SHA sums SHA-256 sum 2bdc75d7c06ba515f6f2e63327c9ff70568eb76b886a3060abfcab62b2ed1b75 SHA-256 sum 5c720c9c871cd37dfc6f476378469361939862bc26fc48058db65bbca5d312c1 SHA-256 sum 9312df70a833878cd17e249407f8e9245b9191c5051006ac94d4b351d25ba4c9


Compiling langur requires the following (see installation instructions). Since we're now using Go modules, the IDE might download and install these for you automatically.

As of 0.8, it is no longer necessary to use the decNumber library and CGo wrapper, as it has been replaced with a slightly modified version of shopspring/decimal, a native Go library with arbitrary precision.

Compiling langur 0.7 or earlier also requires the following (see installation instructions).

revision history

A full revision history is included in the download.

2022-10-06 - 0.11.5 - fixed checking number literals starting with 0 not to give false warnings when using basex notation - set warn on number literals starting with 0 to default to true to avoid confusion with base 8 number literals (as used in other programming languages) - added options to disable warnings using lowercase w, such as -w0123 to disable checking for number literals starting with 0 - slight clean up to object copying 2022-10-02 - 0.11.4 - curly braces required on catch (for syntax clarity) - fixed bug created in 0.11.0 with concatenation with combination operator optimization (this optimization disabled for now) 2022-09-27 - 0.11.3 - improved design and efficiency of calling built-in functions and doing callbacks on compiled code moved built-ins to the process package (vm/process) eliminates use of goroutine and call channels pointer to the current frame on the process struct 2022-09-25 - 0.11.2 - separated process struct and functions from vm package into vm/process - (also in 0.5.15) changed where() to filter(); deprecated use of where() - (also in 0.5.15) dropped superfluous built-in function bestTag() 2022-09-07 - 0.11.1 - allows passing a rounding selection to the round() function (from the _round hash) as a third parameter - fixed default rounding name from "half up" to "half away from 0" to match what it actually does 2022-09-02 - 0.11.0 - added rounding mode setting - changed default rounding to half up (was half even) - added switch expression (same as given expression, except that it defaults to case or, that is, testing that any condition is true) - array concatenation optimizations (especially with combination operator) - combination operator concatenation optimization for hashes and strings - use defer for frame release (ensure frames are released on panic) - fixed object.CopyAndReverseRefSlice() to not copy object references twice - dropped likely superfluous functions best(), bestkey(), good(), and wherekeys()

breaking changes

0.11.4 makes curly braces on catch no longer optional.

0.11.2 changed where() to filter() (deprecated use of where()) and dropped superfluous built-in function bestTag()

0.11.1 changes the name of the default rounding mode to "half away from 0" to match what it actually does.

0.11 changes default rounding to round half away from zero.

0.11 drops likely superfluous functions best(), bestkey(), good(), and wherekeys().

0.10 changes parsing multi-variable assignment in 2 ways (limited to statement context or tests of if expressions, and no longer uses parentheses).

0.10 disallows declarations in given test expressions, but no one will miss it.

0.10 removes break with value not using assignment operator (deprecated in 0.9.6).

0.10 removes using explicitly negated modifiers, as no longer necessary (deprecated in 0.9.4).

0.9.3 allows an ending block quote marker to be spaced from the beginning of the line with tabs and spaces. It also standardizes the result of group() when called with 1 argument (by truthiness) to always put true array first, then false array second.

0.9.2 returns nanoseconds, not seconds, from toNumber() when passed a date-time.

0.9 limits declaration expression context to statement or to if/given expression tests.

0.8.4 changes the default of base and hex interpolation modifiers to pad with spaces; precede the number with 0 to pad with zeroes. 0.8.4 also fixes padding counts for interpolation modifiers to include the sign, if one present.

0.8 changes the 1 part for loop (test only) to a while loop, with implicit loop variable _while.

0.8 changes the decimal implementation from a fixed 34 digit precision to an "arbitrary precision" decimal. The following changes were also made.

0.7 changes the implicit exception variable from .err to _err.

0.7 removes the use of carriage return/line feed combination for new lines in source code (deprecated since 0.6.8). Use ASCII line feed only ("Linux new line").

0.7 evaluates complex test expressions for given expressions once instead of on every case. This is both more efficient and convenient.

0.6 disallows anything but a variable to be used as a lone token in an interpolation.


Langur uses the Apache license 2.0.

The Go wrapper for decNumber and the decNumber library use an ICU license, which is included with the download.