eevo script

Everything should be as simple as possible, but not simpler

eevo is a lightweight yet expressive, high-level scripting language for data-driven programming. A general-purpose Lisp-like language designed to be easy to embed and extend, ideal for scripting, an interactive shell, data/configuration files, or use as a scientific calculator. Forget the boilerplate and needless ceremony: focus on the what, and let eevo handle the how.

def fib(n)
  "Fibonacci number of n"
  if (< n 2)
    n
    + fib((- n 1)) fib((- n 2))

fib 25  ; = 46368

A lightweight modular core allows you to choose how much of the language you need. This comes in a few layers:

While eevo is a general purpose programming language, that does not mean it is the best tool for every problem. Like all languages, eevo has many design decisions which have different trade-offs in different situations. To solve problems that are ill-suited to eevo’s design (such as requiring circular references or precise mutations) other languages can be called upon through C-bindings (and soon WASM).

This interoperability makes it easy to offload computationally heavy code to another language or gradually replace existing code with concise scripts. This enables a dual approach to bridge languages in two directions:

Both methods can be done at the same time with different languages, allowing eevo to glue different libraries, ecosystems, and tools together.

Warning

eevo is still in active development and not yet stable. Until the v1.0 release expect breaking non-backwards compatible changes.

Features

High-level

Functional programming

Interactive

First Class Types

Records as universal type

Metaprogramming

Quoted expressions

Literate Programming

Tail call optimization

Dyslexic friendly

See the language manual for complete set of features.

Anti-Features

Just like jazz, what is missing is often more insightful:

No mutations

No dependencies (eg LLVM)

No statements

No keywords

No reader macros

No exceptions

No multiple return values

No explicit return

No arrays, linked lists, or tuples

No function currying

No build systems

No mandatory editor tools

No garbage collector

Coming Soon…

Automatic reference counting memory management

Strong static typing with type inference

Batteries included standard library

Powerful string interpolation

First class algebraic pattern matching

Improve error messages

Sandboxed

Full Unicode support

Interoperability

WebAssembly compiler

Environmental image

Hygienic macros

Multithreading

Optimizations