eevo script

eevo is a lightweight yet expressive, high-level scripting language for data-driven functional programming. A general-purpose language in the Lisp family that is ideal for scripting, acting as an interactive shell, data/configuration files, or a scientific calculator. eevo’s portable, simple design makes it easy to embed and extend, enabling integration into existing projects and straightforward use of established libraries. Forget the boilerplate and needless ceremony: focus on the what, and let eevo handle the how.

Everything should be as simple as possible, but not simpler

Albert Einstein
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 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

Functions as the 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