Skip to the content.

Home β€Ί Developer Docs β€Ί Aether Architecture & Roadmap

Aether Architecture & Roadmap

This document provides a high-level overview of Aether’s architecture, current status, and future roadmap.

Table of Contents


πŸ“– For Practical Development: This document focuses on high-level architecture and long-term roadmap.

For day-to-day development guidance, see:


Architecture Overview

Aether is a tree-walking interpreter written in Rust following a classic three-stage pipeline:

Source Code (.ae)
      ↓
   [Lexer]  ──→  Tokens
      ↓
   [Parser] ──→  Abstract Syntax Tree (AST)
      ↓
[Interpreter] ──→  Execution / Output
         ↕
   [I/O Thread Pool]  (async tasks)

Core Components

Component Status Purpose Details
Lexer βœ… Complete Tokenization See LEXER.md
Parser βœ… Complete Syntax analysis See PARSER.md
Interpreter βœ… Complete AST execution See INTERPRETER.md
I/O Thread Pool βœ… Complete Concurrent I/O See ASYNC.md
Event Loop βœ… Complete Callback-based async See EVENT_LOOP.md
REPL βœ… Complete Interactive mode See REPL.md
Standard Library βœ… Complete Core functions See STDLIB.md
Garbage Collection βœ… Complete Memory management See GC_DESIGN.md

Project Structure

aether/
β”œβ”€β”€ docs/              # Comprehensive documentation
β”œβ”€β”€ stdlib/            # Standard library (written in Aether)
β”œβ”€β”€ examples/          # Example programs
β”œβ”€β”€ tests/             # Integration tests (~559 tests)
└── src/
    β”œβ”€β”€ lexer/         # Tokenization (14 unit tests)
    β”œβ”€β”€ parser/        # Parsing (53 unit tests)
    β”œβ”€β”€ interpreter/   # Execution (17 unit tests)
    β”‚   β”œβ”€β”€ evaluator/
    β”‚   β”‚   β”œβ”€β”€ mod.rs          β€” Evaluator struct, constructors, call_main
    β”‚   β”‚   β”œβ”€β”€ expressions.rs  β€” eval_expr, eval_index, await_value
    β”‚   β”‚   β”œβ”€β”€ statements.rs   β€” exec_stmt_internal (all Stmt variants)
    β”‚   β”‚   β”œβ”€β”€ functions.rs    β€” eval_call, try_submit_io_task
    β”‚   β”‚   β”œβ”€β”€ members.rs      β€” eval_member, eval_method_call
    β”‚   β”‚   β”œβ”€β”€ modules.rs      β€” load_module, resolve_module_path
    β”‚   β”‚   └── operators.rs    β€” eval_unary, eval_binary
    β”‚   β”œβ”€β”€ builtins.rs         β€” Built-in function dispatch
    β”‚   β”œβ”€β”€ environment.rs      β€” Scope chain
    β”‚   β”œβ”€β”€ event_loop.rs       β€” on_ready / event_loop
    β”‚   β”œβ”€β”€ io_pool.rs          β€” I/O thread pool
    β”‚   └── value.rs            β€” Value enum (16 variants)
    └── repl/          # Interactive mode

Current Status

Phase 5 Complete βœ…

Test Coverage: ~693 tests passing (134 unit + ~559 integration) Code Quality: cargo clippy clean (5 acceptable mutable_key_type warnings for HashSet)

What’s Implemented

Core Language βœ…

Control Flow βœ…

Error Handling βœ…

Null Safety βœ…

Structs βœ…

Async / Await βœ…

I/O Thread Pool βœ…

Event Loop βœ…

Module System βœ…

Built-in Functions βœ…

Standard Library βœ… (40+ functions, written in Aether)

Test Coverage

Total: ~693 tests passing βœ… (2 permanently ignored β€” deep recursion stack overflow in debug builds)

Unit Tests (134):
β”œβ”€β”€ Lexer: 14 tests
β”œβ”€β”€ Parser: 53 tests
β”œβ”€β”€ Interpreter: 17 tests
β”œβ”€β”€ Built-ins: 15 tests
└── Other unit: 35 tests

Integration Tests (~559):
β”œβ”€β”€ Core features: 29 tests
β”œβ”€β”€ Async: 21 tests
β”œβ”€β”€ I/O pool: 14 tests
β”œβ”€β”€ Event loop: 15 tests
β”œβ”€β”€ Structs: 14 tests
β”œβ”€β”€ Iterators: 22 tests
β”œβ”€β”€ Sets: 24 tests
β”œβ”€β”€ Null safety: 23 tests
β”œβ”€β”€ JSON: 25 tests
β”œβ”€β”€ HTTP: 5 tests (0 ignored β€” all network-free)
β”œβ”€β”€ Error handling: 10 + 11 tests
β”œβ”€β”€ String features: 16 + 9 + 8 + 15 tests
β”œβ”€β”€ Array methods: 22 tests
β”œβ”€β”€ Dict: 27 tests
β”œβ”€β”€ Module system: 13 tests
β”œβ”€β”€ Stdlib (collections/math/string/core): 38+26+24+9 tests
β”œβ”€β”€ Stdlib testing framework: 19 tests
β”œβ”€β”€ Function expressions: 13 tests
β”œβ”€β”€ GC/leak: 6 + 4 tests
└── ... (35 test files total)

Roadmap

Completed Phases

Phase Description Tests at completion
Phase 1 Core interpreter (lexer, parser, evaluator, REPL) 102
Phase 2 Essential features (collections, error handling, modules) 147
Phase 3 Standard library (stdlib written in Aether) 230
Phase 4 Advanced language features (structs, sets, iterators) 314
Phase 5 Sprint 1 Testing framework 333
Phase 5 Sprint 2 Advanced types (structs, sets, iterators) 420
Phase 5 Sprint 3 Async/await + I/O pool 476
Phase 5 Sprint 4 Error context + stack traces ~547
Phase 5 Sprint 5 Null safety + Event loop ~693

Near-Term Backlog (Tier 1)

See BACKLOG.md for the full prioritised list. Top items:

Tier 2: Type System

Tier 3: Networking

Longer-Term

Compiler Improvements

Runtime Optimization

Design Principles

Core Philosophy

  1. Simplicity First β€” start with straightforward implementations; optimize later
  2. Test-Driven Development β€” write tests before implementation; tests serve as documentation
  3. User Empowerment β€” stdlib in Aether (users can read and extend); clear error messages
  4. Pragmatic Evolution β€” ship working features quickly; iterate based on usage

Technical Decisions

Why Tree-Walking Interpreter?

Why Rust?

Why Rc for GC?

Why Stdlib in Aether?

Why std::sync::mpsc for async?

Resources

Documentation

Core Implementation:

Language Features:

External Resources


Last Updated: April 29, 2026 Current Phase: Phase 5 Complete βœ… Test Count: ~693 passing


← Language Design Β Β  Development Guide β†’