Roadmap

We will measure our progress towards a stable and mostly feature complete release using several milestones; each of which is broken into a number of tasks.

Legend

TODO, Not started
Work in progress
Done
Blocked

Milestones

The first milestone, "Hello World", is simply the implementation of a basic runtime, bytecode interpreter and compiler that is capable of compiling and executing a hello world program. Although there are many rough edges, this milestone is now complete, and the rough edges have been moved to our TODO list.

  1. Hello World
    • Bytecode assembly tool
    • Basic bytecode interpreter
      • Bytecode loading
      • Token threaded bytecode execution
      • Bytecode hello world
      • Basic suite of instructions
      • Blocks and control flow
      • Bytecode fibs
    • Basic compiler that can handle "Hello world!"

The goal of the second and third milestones, are to be able to demonstrate the kind of language that Plasma will eventually become, and allow developers to "get a feel" for the language. The second milestone, "Language Basics", covers the kinds of features that form the basic language. The third milestone, "Nebula", will introduce parallelism and concurrency.

  1. Language Basics
    • Language syntax
      • Basic statements and expressions
      • Case statments
      • If-then-else
      • Multi-valued expressions
      • Basic pattern matching
      • Loops
      • Expression versions of if-then-else and match
    • Type system
      • Builtin types
      • Sum types
      • Product types
      • Generics
      • Higher order values
    • Basic resource system
    • Basic functional features
      • Higher order calls
      • Lambda expressions & closures
      • Partial application
    • Prelude or basic libraries
    • More examples
    • Multi-module programs
    • Runtime system
      • Multi-module bytecode loading
      • Basic Garbage Collection
  2. Concurrency and Parallelism (Nebula)
    • Concurrency and Parallelism
      • Lightweight threads
      • Basic concurrent communications (channels, mvars etc)
    • Runtime system improvements
      • Operations for different data-widths
      • Subroutine threaded bytecode execution (amd64)
      • N:M multi-threading

The remaining milestones represent steps towards a stable release. While we're revising all the milestones as we go, milestones 4 and onwards are the most-likely milestones to change.

  1. Self hosting ready (Stella nursery)
    • Exceptions
    • Basic IO Library
    • Basic Datastructures Library
    • ...
  2. Bootstraps ("Protostar")
  3. Features and Optimisations ("T-Tauri")
    • Type system improvments
      • Interfaces
    • More expressativity
      • Better pattern matching (multiple matches, guards, nesting etc)
      • Deconstruction without match
      • Field access, update and conditional update
      • ...
    • More complete resource system
    • Runtime system improvements
    • Basic Optimisations
    • More Parallelism and Concurrency
    • Better libraries
    • ...
    • 1.0 (Star)
      • Bug fixing
      • Documentation
      • Polishing off rough edges (TBA)
      • ...
    • Future
      • Optimisations
      • Improved code generation
      • Native code / LLVM (maybe)
      • Improved Garbage Collection
      • Plenty of other ideas

Staying informed

If you'd like to be informed when we reach each milestone you may wish to join the Plasma News Mailing List or follow @PlasmaLang on Twitter (contact information).

The source is on github. If you'd like to contribute our CONTRIBUTING.md has information and suggestions.