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.


TODO, Not started
Work in progress
Might happen (sometime/never or now/later).


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
    • Status: done Bytecode assembly tool
    • Status: done Basic bytecode interpreter
      • Status: done Bytecode loading
      • Status: done Token threaded bytecode execution
      • Status: done Bytecode hello world
      • Status: done Basic suite of instructions
      • Status: done Blocks and control flow
      • Status: done Bytecode fibs
    • Status: done 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 Groundwork", covers the kinds of features that form the basics of the language, and any groundwork that's required for more advanced features or may constrain later features. The third milestone, "Nebula", is where the excitement begins it will introduce parallelism and concurrency and features that are unique to Plasma.

  1. Language Groundwork
    • Status: done Language syntax
      • Status: done Basic statements and expressions
      • Status: done Case statments
      • Status: done If-then-else
      • Status: done Basic pattern matching
    • Status: done Type system
      • Status: done Basic builtin types
      • Status: done Sum types
      • Status: done Product types
      • Status: done Generics
      • Status: done Higher order values
    • Status: done Basic resource system
    • Status: done Basic functional features
    • Status: wip Basic module system (Modules Issues)
    • Status: done Runtime system
      • Status: done Environments (for closures at runtime)
      • Status: done Multi-module bytecode loading (Issue #158)
    • Status: todo Make Plasma easier to use (Ergonomics issues)
  2. Concurrency and Parallelism (Nebula)
    • Status: todo FFI (FFI issues)
    • Status: todo Language syntax
      • Status: wip Syntax for lists, dicts etc
      • Status: todo Loops
      • Status: todo State variable notation
      • Status: maybe Named out parameters
      • Status: done Deconstruct without case statement (Issue #120)
      • Status: done Expression versions of if-then-else and match (w/ multi-values) (Issue #119)
    • Status: todo Resource system
      • Status: todo Scope syntax
      • Status: todo Resource escape analysis
    • Status: todo Concurrency and Parallelism
      • Status: todo Lightweight threads
      • Status: todo Basic concurrent communications (channels, mvars etc)
    • Status: maybe Arrays
    • Status: blocked Prelude or basic libraries (Standard library issues)
    • Status: todo More functional features
    • Status: todo More examples
    • Status: todo Runtime system improvements
      • Status: done Operations for different data-widths
      • Status: done Basic garbage collection
      • Status: todo N:M multi-threading
  3. Quality of (programmer) life improvements (Stella nursery)
    • Status: todo Type system
      • Status: todo Interfaces (Issue #72)
      • Status: maybe Structurally-typed records
    • Status: todo Language features
      • Status: todo String builtin type
      • Status: todo Exceptions/errors
    • Status: todo Language syntax
      • Status: done Multi-valued expressions
      • Status: maybe Object-method notation (Issue #222)
      • Status: todo Scopes
      • Status: todo Module expressions & module import within code
      • Status: maybe Re-design of bool/truth-ness
    • Status: todo Libraries
    • Status: todo Runtime system improvements
      • Status: todo Improved garbage collection (better heap structure & O(1) allocation)
      • Status: maybe Subroutine threaded bytecode execution (amd64)
    • Status: todo Optimisations
      • Status: wip Codegen creates too much stack usage

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

  1. Bootstraps ("Protostar")
  2. Features and Optimisations ("T-Tauri")
    • Status: todo Type system improvements
      • Status: todo Integers of different widths
      • Status: todo Arrays
      • Status: maybe HKTs
      • Status: todo Uniqueness (for resources)
    • Status: todo More expressiveness
      • Status: todo Better pattern matching (multiple matches, guards, nesting etc) (Issue #125)
      • Status: todo Field access, update and conditional update
      • Status: todo Early return (Issue #122)
      • Status: todo If-without-else (Issue #123 & #183)
      • Status: maybe Spread syntax / varargs / kw-args
      • Status: todo ...
    • Status: todo More complete resource system
    • Status: blocked Runtime system improvements
      • Status: todo Subroutine threaded bytecode execution (amd64)
    • Status: blocked Basic Optimisations
    • Status: blocked More Parallelism and Concurrency
      • Status: blocked Parallel loops
      • Status: blocked STM and other concurrency primitives
    • Status: blocked Better libraries
    • Status: Add a weakened form (some code at root level, sha-bang line) PlasmaScript
    • Status: Add heardened form (no undefined behaviour, auto parallelism is available) PlasmaCore
    • Status: todo ...
  3. 1.0 (Star)
    • Status: blocked Bug fixing
    • Status: blocked Documentation
    • Status: blocked Polishing off rough edges (TBA)
    • Status: todo ...
  4. Future
    • Status: blocked Optimisations
    • Status: blocked Improved code generation
    • Status: blocked Native code / LLVM (maybe)
    • Status: blocked WebAssembly
    • Status: blocked Improved Garbage Collection
    • Status: blocked 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).

We re-arrange the items on the roadmap from time to time, to see how these have changed you can see the history of the roadmap entries on github.

Issues are grouped into github milestones which can help us see how close we are to particular goals. The use of these milestones is documented in our bugtracking policy/style guide.

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