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
Feature idea

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: wip Type system
      • Status: done Basic builtin types
      • Status: done Sum types
      • Status: done Product types
      • Status: done Generics
      • Status: done Higher order values
      • Status: todo Interfaces
    • 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: todo Partial application
    • Status: blocked Prelude or basic libraries
    • Status: todo More examples
    • Status: wip Runtime system
      • Status: wip Environments (for closures at runtime)
      • Status: todo Multi-module bytecode loading
      • Status: wip Basic Garbage Collection
  2. Concurrency and Parallelism (Nebula)
    • 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: todo Scopes
      • Status: todo State variable notation
      • Status: done Multi-valued expressions
      • Status: todo Expression versions of if-then-else and match (w/ multi-values)
      • Status: todo Module expressions & module import within code
    • Status: todo Runtime system improvements
      • Status: done Operations for different data-widths
      • Status: todo Subroutine threaded bytecode execution (amd64)
      • Status: todo 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)
    • 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 Deconstruction without match
      • 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: 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.