DEV Community

Owen
Owen

Posted on

Elba Lang

Elba — A modern, statically-typed programming language with multiple compilation backends

GitHub → OwenBellowen/elba

As someone deeply interested in programming languages, compilers, and full-stack systems (yes, that’s me: a student, TypeScript/Zig/Rust dev), I’m excited to introduce Elba — a project I’ve been working on that brings together clarity, performance, and tooling in one language.

Note: I have no intentions yet on making this into a full project. Although I would continue working on this.


🚀 What is Elba?

Elba is a statically-typed programming language designed for clarity, performance, and developer productivity.

It offers:

  • Static type checking with type inference — so you get all the safety of static typing without always writing verbose annotations.
  • Generics — write reusable, type-safe code.
  • Union types, optional types (T?) for null safety — fewer runtime surprises.
  • A module system, first-class functions, rich arrays, structs with methods.
  • Multiple backends: AST interpreter for quick prototyping, IR interpreter for faster execution, a C code generator, and an LLVM backend for native performance.
  • A standard library covering math, strings, and more.

In short: think “modern language with the expressiveness of high-level code” + “compiled speed” + “tooling and REPL to iterate fast”.


✨ Why build Elba?

Because I believe we can push the boundaries of what a new language can offer. Specifically:

  • Type safety meets productivity: We want the benefits of static typing (fewer bugs) without getting bogged down in ceremony.
  • Multiple backend flexibility: Sometimes you just want a quick REPL or interpreter; other times you need native speed. Elba gives you both.
  • For compiler / language-enthusiasts: If you love messing around with languages, building tooling, or exploring alternative type systems (hello Zig and Rust fans), this is a playground.
  • Modern developer experience: REPL, error-reporting, benchmarking, IR visualization — all included.

🛠️ Getting Started

Prerequisites

  • Zig (version 0.15.2 or later)
  • (Optional) LLVM 20 for native backend
  • (Optional) GCC or Clang for C code generation

Build from source

You can follow the setup on the README.md or below:

git clone https://github.com/OwenBellowen/elba.git cd elba zig build ./zig-out/bin/elba --version 
Enter fullscreen mode Exit fullscreen mode

Quick Test

./zig-out/bin/elba examples/hello_world.elba ./zig-out/bin/elba repl 
Enter fullscreen mode Exit fullscreen mode

Full documentation and more examples live in the examples/ directory and the repo’s docs.

💡 Example code snippet

Here’s a small example showing Elba’s generics + optional types:

// examples/generic_example.elba fn swap<T>(a: T?, b: T?): (T?, T?) { return (b, a) } struct Pair<T> { first: T, second: T, fn new(f: T, s: T): Pair<T> { return Pair { first: f, second: s } } fn swap(self): Pair<T> { return Pair.new(self.second, self.first) } } fn main() { let maybeNum: i64? = 42 let maybeNil: i64? = null let (x, y) = swap(maybeNum, maybeNil) print("x = {x}, y = {y}") let p = Pair.new("hello", "world") let p2 = p.swap() print("swapped: {p2.first}, {p2.second}") } 
Enter fullscreen mode Exit fullscreen mode

Top comments (1)

Collapse
 
owenbellowen profile image
Owen

Some of the example code shown might not yet be implemented btw :)