eevo v0.2 release

Edryd van Bruggen

2026-01-03

With a new year comes a new release, the first release under the new name!

With a new name comes a new look, this time in the form of a whole new syntax. It sits on top of the previous s-expression based syntax, but reduces the amount of parenthesis by assuming invisible parenthesis around each line. This works the same way math notation does, you don’t need to write (1 + 2) for top-level expressions, you can just type 1 + 2. Indented lines are sub-expressions of the previous level. In additional, many other syntax shorthands were also introduced.

Next, a new fundamental data type is added: records, unordered sets of key-value pairs. eevo provides a new core record ENV for the current environment. The keys are the symbols in scope, and the values are their corresponding values. Records will eventually be the core collection data type of eevo, subsuming lists (pairs) and functions, as well as serve as vectors/arrays and sets (similar to lua’s tables).

There is also a new preliminary first-class type system (dependent types), where types are expressions just like any other value. These are not true dependent types yet, so a lot of work is still needed.

This is also the first version to feature tail call optimization.

After putting together this list of changes, I fully realized how many changes I made in this release. Perhaps in the future there should be smaller but more frequent releases.

Syntax

Syntax sugar

Records

Create new record type, an unordered set of key-value pairs inside curly braces {}. For example: { a: 1 b: 2 c: 3 }.

Procedures

Several new procedures were added, and existing ones were renamed or reorganized.

New

Reorganization

CLI

Tail call optimization

When a function call is the last expression in a function, reuse the current stack to evaluate the called function body instead of creating a new one. This makes tail call recursion operationally equivalent to a loop, a requirement for a functional language.

Bug fixes

Misc