Elle Programming Language
Welcome to Elle
Elle is a Lisp. What separates it from other Lisps is the depth of its static analysis: full binding resolution, capture analysis, and signal inference happen at compile time, before any code runs. This gives Elle a sound signal system, fully hygienic macros, colorless concurrency via fibers, and deterministic memory management — all derived from the same analysis pass.
What Makes Elle Different
- Fibers — independent execution contexts with their own stack, call frames, signal mask, and heap. Cooperative and explicitly resumed. When a fiber finishes, its heap is freed in O(1) — no GC pause, no reference counting.
- Signals — typed, cooperative flow-control interrupts. A signal is a keyword (
:error,:log,:abort, or user-defined) that a fiber emits to its parent. The compiler infers which functions can emit signals. - Hygienic Macros — full metaprogramming with
defmacro, quasiquote/unquote,gensym, and scope sets - Colorless Concurrency — fibers, coroutines, and OS threads from the same primitives
- Mutable/Immutable Split —
[array]vs@[array],{struct}vs@{struct},"str"vs@"str" - Pattern Matching —
matchwith destructuring, struct tags, wildcards, and& rest - FFI — call C functions directly with
ffi/nativeandffi/defbind - Bytecode Compilation — programs are compiled to bytecode with optional JIT
- Module System — closure-as-module with parametric imports
Quick Example
A fiber yields progress updates; the parent drives it to completion:
(defn process-items [items]
(each item items
(emit :progress {:item item :result (* item item)})))
(def f (fiber/new (fn [] (process-items [1 2 3])) |:progress|))
(forever
(fiber/resume f)
(if (= (fiber/status f) :paused)
(print "progress:" (fiber/value f))
(break)))When the fiber finishes, its entire heap is freed in O(1).
Documentation
Elle ships with comprehensive design documents and runnable examples:
- Getting Started — installation and first steps
- Language Guide — data types, functions, and control flow
- Concurrency — fibers, coroutines, signals, and threads
- Documentation — language reference, design documents, and contributor guides
- Examples — 20+ runnable programs covering every major feature
- Standard Library — all built-in functions, auto-generated from runtime metadata