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 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.
-
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!"
-
Language Groundwork
-
Language syntax
- Basic statements and expressions
- Case statments
- If-then-else
- Basic pattern matching
-
Type system
- Basic builtin types
- Sum types
- Product types
- Generics
- Higher order values
- Basic resource system
-
Basic functional features
- Higher order calls
- Closures
- Basic module system (Modules Issues)
-
Runtime system
- Environments (for closures at runtime)
- Multi-module bytecode loading
- Basic garbage collection
-
Concurrency and Parallelism
- Continuations in runtime system (Issues)
- Coroutines
- Multi-threading
- Basic concurrent communications (channels, mvars etc)
- Make Plasma easier to use (Ergonomics issues)
-
Language syntax
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.
-
Make it useful (Nebula)
-
FFI
- String & character support (basic unicode support) (Github project)
- C FFI (FFI issues)
-
Language syntax
- Deconstruct without case statement
- Expression versions of if-then-else and match (w/ multi-values)
- Truthy statements
- Re-design of bool/truth-ness
- State variable notation
- Named out parameters
- Other language groundwork (Github milestone)
-
Type system
- Interfaces (Github milestone)
- Basic libraries (data structures and IO) (Standard library issues)
-
Maintenance
- Testing and CI (Github milestone)
-
FFI
-
Make it interesting (Cloud)
-
Language features
- For loops
- While loops
- Syntax for dictionaries and other structures
- Arrays
-
Resource system
- Scope syntax (Issue #418)
- Resource escape analysis
- Resource lifetimes
- Attach resources to values (eg file handles)
- Polymorphic resources for higher-order code
- More examples (Github issue)
-
Ergonomics (Cloud)
(Github milestone)
- Update/fill-out documentation
- Editor support
-
Maintenance
- Ease of development (Github milestone)
- C++ification of Runtime (Github milestone)
-
Language features
-
Work towards bootstrapping
- Testing and implement things that may reprioritise and identify missing goals that are necessary for bootstrapping.
-
Make it fun (Stella nursery)
-
More functional features
(Closures and functional features)
- Lambda expressions
- Partial application'
-
Runtime system improvements
- Operations for different data-widths
- N:M multi-threading
- Backtraces
-
Type system
- More type inference (Infer types for functions & closures)
- Structurally-typed records
-
Language features
- Exceptions/errors
- Multi-valued expressions
- Module expressions & module import within code
- Variable initalisation at top-level
- Object-method notation (Issue #222)
-
Libraries (requires concurrency)
- Datastructures Library
- File IO Library
- Network IO Library
- Module system improvments (Modules Extras milestone)
-
Optimisations
- Codegen creates too much stack usage (Code generation tasks)
- Improved garbage collection (better heap structure & O(1) allocation)
- Subroutine threaded bytecode execution (amd64)
-
More functional features
(Closures and functional features)
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.
- Bootstraps ("Protostar")
-
Features and Optimisations ("T-Tauri")
-
Type system improvements
- Integers of different widths
- Floats
- HKTs
- Uniqueness (for resources)
-
More expressiveness
- Better pattern matching (multiple matches, guards, nesting etc) (Issue #125)
- Field access, update and conditional update
- Early return (Issue #122)
- If-without-else (Issue #123 & #183)
- Spread syntax / varargs / kw-args
- ...
- More complete resource system
-
Runtime system improvements
- Subroutine threaded bytecode execution (amd64)
- Pin threads to posix threads for FFF (eg OpenGL)
- Dedicated thread(s) for blocking IO
-
Tooling
- Packaging
- Package management (Issue #260)
- Package repositories
- Debugger
- Profiler
- Language server
- Basic Optimisations
-
More Parallelism and Concurrency
- Parallel loops
- STM and other concurrency primitives
- Better libraries
- PlasmaScript (weakened form: some code at root level, sha-bang line)
- PlasmaCore (heardened form: no undefined behaviour, auto parallelism is available)
- ...
-
Type system improvements
-
1.0 (Star)
- Bug fixing
- Documentation
- Polishing off rough edges (TBA)
- ...
-
Future
- Optimisations
-
Improved code generation
- Native code / LLVM (maybe)
- WebAssembly
- More JIT
- GPGPU
- Auto-parallelisation
- 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 (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.