One runnable result per milestone.

Each milestone ends with an exit test that must pass before the next starts. The 1.0 stability promise is the last step of M8.

  1. M0Done

    Design

    The language reference, the grammar, and example programs.

    Exit test
    Documents and examples exist.
  2. M1Done

    Hello world

    Lexer and parser for the full grammar, diagnostics with codes and JSON, a Cranelift JIT, lucid run and lucid check.

    Exit test
    lucid run prints Hello, world!, and every example parses.
  3. M2Done

    Core language

    Numbers with overflow traps, let and var, if, while, for, tasks and recursion, and type checking.

    Exit test
    FizzBuzz and recursive Fibonacci run.
  4. M3Done

    Data

    Text, lists, maps, sets, type, choice, match, unions and narrowing, generics, traits, any, lambdas, parameter modes, and reference counting.

    Exit test
    examples/hello.lcd runs, and golden tests cover every feature with no leaks.
  5. M4Done

    Ownership performance

    Moves on last use, static text, fewer count operations, lucid check --costs, and a benchmark suite.

    Exit test
    The benchmark suite is measured against the speed and memory targets.
  6. M5Done

    A usable language

    try and else, tests, unsafe, modules, packages, permissions, the first std modules, and the build, test, explain, context, fix, and fmt commands.

    Exit test
    examples/todo.lcd builds to a standalone .exe and works.
  7. M6Done

    Browser

    A WebAssembly backend, lucid build --target web, and std.dom for interactive pages.

    Exit test
    An interactive page written only in Lucid runs in a browser.
  8. M7Done

    Concurrency and servers

    Bit operators, threads with spawn, channels, locks and a deadlock trap, std.net, an HTTP/1.1 server and client with TLS, and std.html.

    Exit test
    examples/website.lcd serves pages under a load test.
  9. M8In progress

    Ecosystem

    Linux, cryptography, SQLite, a package registry, a language server, and the 1.0 stability promise.

    • Done:Prelude text tasks: starts_with, ends_with, contains, find, trim
    • Done:Compile only reachable tasks
    • To do:Linux x86-64: run, test, and build
    • To do:std.crypto
    • To do:std.sql and the sql type
    • To do:Orphan rule for tasks with self
    • To do:Registry, lucid package, version selection, and lucid.lock
    • To do:lucid lsp
    • To do:Spec review, then the version 1.0 promise
    Exit test
    A package that uses a registry package with std.sql and std.crypto builds and passes lucid test on Windows and Linux, and an editor shows its diagnostics through lucid lsp.
  10. M9Planned

    Self-hosted front end

    The lexer, parser, checker, and ownership pass ported to Lucid, one stage at a time. Starts after the 1.0 promise.

    Exit test
    The compiler written in Lucid builds itself, and a second build is byte-identical.

Not planned yet: macOS, an LLVM release backend, plain types stored inline, and compile-time evaluation.