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
Might happen (sometime/never or now/later).

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
    • 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: todo Basic module system
    • Status: wip Basic functional features
      • Status: done Higher order calls
      • Status: wip Lambda expressions & closures
    • Status: wip Runtime system
      • Status: wip Environments (for closures at runtime)
      • Status: todo Multi-module bytecode loading
  2. Concurrency and Parallelism (Nebula)
    • Status: blocked Prelude or basic libraries
    • Status: todo FFI
    • Status: todo Concurrency and Parallelism
      • Status: todo Lightweight threads
      • Status: todo Basic concurrent communications (channels, mvars etc)
    • Status: todo Language syntax
      • Status: wip Syntax for lists, dicts etc
      • Status: todo Loops
    • Status: maybe Arrays
    • Status: todo Runtime system improvements
      • Status: done Operations for different data-widths
      • Status: todo N:M multi-threading
      • Status: wip Basic Garbage Collection
      • Status: maybe Subroutine threaded bytecode execution (amd64)
    • Status: todo More examples
  3. Quality of (programmer) life improvements (Quality nebula)
    • Status: todo Type system
      • Status: todo Interfaces
    • Status: todo Language syntax
      • Status: todo Scopes
      • Status: todo State variable notation
      • Status: done Multi-valued expressions
      • Status: todo Partial application
      • Status: todo Deconstruct without case statement
      • Status: todo Expression versions of if-then-else and match (w/ multi-values)
      • Status: todo Module expressions & module import within code

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. Self hosting ready (Stella nursery)
    • Status: todo String builtin type
    • Status: todo Exceptions
    • Status: blocked Basic IO Library
    • Status: blocked Basic Datastructures Library
    • Status: todo ...
  2. Bootstraps ("Protostar")
  3. Features and Optimisations ("T-Tauri")
    • Status: todo Type system improvments
      • Status: todo Integers of different widths
      • Status: todo Arrays
      • Status: maybe HKTs
      • Status: todo Uniqueness (for resources)
    • Status: todo More expressativity
      • Status: todo Better pattern matching (multiple matches, guards, nesting etc)
      • Status: todo Field access, update and conditional update
      • Status: todo Early return
      • 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 primatives
    • Status: blocked Better libraries
    • Status: todo ...
  4. 1.0 (Star)
    • Status: blocked Bug fixing
    • Status: blocked Documentation
    • Status: blocked Polishing off rough edges (TBA)
    • Status: todo ...
  5. 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.

Smaller and shorter-term tasks are tracked on the github project board, with some duplication between the board and this roadmap.

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