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

Milestones

The first milestones represent the groundwork in getting the project started and the basics working. The second, "Language Groundwork", sets up many required features like the type and resource systems which are critical to making further changes work.

  1. Hello World
    • done Bytecode assembly tool
    • done Basic bytecode interpreter
      • done Bytecode loading
      • done Token threaded bytecode execution
      • done Bytecode hello world
      • done Basic suite of instructions
      • done Blocks and control flow
      • done Bytecode fibs
    • done Basic compiler that can handle "Hello, World!"
  2. Language Groundwork
    • done Language syntax
      • done Basic statements and expressions
      • done Case statments
      • done If-then-else
      • done Basic pattern matching
    • done Type system
      • done Basic builtin types
      • done Sum types
      • done Product types
      • done Generics
      • done Higher order values
    • done Basic resource system
    • done Basic functional features
    • WIP Basic module system (Modules Issues)
    • done Runtime system
      • done Environments (for closures at runtime)
      • done Multi-module bytecode loading (Issue #158)
      • done Basic garbage collection
    • WIP Concurrency and Parallelism
      • WIP Continuations in runtime system (Issues)
      • TODO Coroutines
      • TODO Multi-threading
      • TODO Basic concurrent communications (channels, mvars etc)
    • WIP Make Plasma easier to use (Ergonomics issues)

The goal of next few milestones, is to be able to demonstrate the kind of language that Plasma will eventually become, and allow developers to "get a feel" for the language. These milestones is where the excitement begins: they will introduce parallelism, concurrency and features that are unique to Plasma.

  1. Make it useful (Nebula)
  2. Make it interesting (Cloud)
    • TODO Language features
      • TODO For loops
      • TODO While loops
      • TODO Syntax for dictionaries and other structures (Issue #120)
      • TODO Arrays
    • TODO Resource system
      • TODO Scope syntax (Issue #418)
      • TODO Resource escape analysis
      • TODO Resource lifetimes
      • TODO Attach resources to values (eg file handles)
      • TODO Polymorphic resources for higher-order code
    • TODO More examples (Github issue)
    • TODO Ergonomics (Cloud) (Github milestone)
      • TODO Update/fill-out documentation
      • TODO Editor support
    • TODO Maintenance
  3. Work towards bootstrapping
    • blocked Testing and implement things that may reprioritise and identify missing goals that are necessary for bootstrapping.
  4. Make it fun (Stella nursery)
    • TODO More functional features (Closures and functional features)
      • TODO Lambda expressions
      • TODO Partial application'
    • TODO Runtime system improvements
      • done Operations for different data-widths
      • TODO N:M multi-threading
      • TODO Backtraces
    • TODO Type system
    • TODO Language features
      • TODO Exceptions/errors
      • done Multi-valued expressions
      • TODO Module expressions & module import within code
      • TODO Variable initalisation at top-level
      • TODO Object-method notation (Issue #222)
    • TODO Libraries (requires concurrency)
      • blocked Datastructures Library
      • blocked File IO Library
      • blocked Network IO Library
    • blocked Module system improvments (Modules Extras milestone)
    • TODO Optimisations
      • WIP Codegen creates too much stack usage (Code generation tasks)
      • TODO Improved garbage collection (better heap structure & O(1) allocation)
      • maybe Subroutine threaded bytecode execution (amd64)

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

  1. Bootstraps ("Protostar")
  2. Features and Optimisations ("T-Tauri")
    • TODO Type system improvements
      • TODO Integers of different widths
      • TODO Floats
      • maybe HKTs
      • TODO Uniqueness (for resources)
    • TODO More expressiveness
      • TODO Better pattern matching (multiple matches, guards, nesting etc) (Issue #125)
      • TODO Field access, update and conditional update
      • TODO Early return (Issue #122)
      • TODO If-without-else (Issue #123 & #183)
      • maybe Spread syntax / varargs / kw-args
      • TODO ...
    • TODO More complete resource system
    • blocked Runtime system improvements
      • TODO Subroutine threaded bytecode execution (amd64)
      • TODO Pin threads to posix threads for FFF (eg OpenGL)
      • TODO Dedicated thread(s) for blocking IO
    • blocked Tooling
      • blocked Packaging
      • blocked Package management (Issue #260)
      • blocked Package repositories
      • blocked Debugger
      • blocked Profiler
      • blocked Language server
    • blocked Basic Optimisations
    • blocked More Parallelism and Concurrency
      • blocked Parallel loops
      • blocked STM and other concurrency primitives
    • blocked Better libraries
    • TODO PlasmaScript (weakened form: some code at root level, sha-bang line)
    • TODO PlasmaCore (heardened form: no undefined behaviour, auto parallelism is available)
    • TODO ...
  3. 1.0 (Star)
    • blocked Bug fixing
    • blocked Documentation
    • blocked Polishing off rough edges (TBA)
    • TODO ...
  4. Future
    • blocked Optimisations
    • blocked Improved code generation
      • blocked Native code / LLVM (maybe)
      • blocked WebAssembly
      • blocked More JIT
      • maybe GPGPU
    • blocked Auto-parallelisation
    • blocked Improved Garbage Collection
    • 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 (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 CONTRIBUTING.md has information and suggestions.