Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
68 lines (58 sloc) 2.76 KB
Plasma Language Ideas
Paul Bone <>
v0.2, October 2017: Always a draft.
Copyright (C) 2016-2017 Plasma Team
License: CC BY-SA 4.0
to this page]
== Ideas to consider
Many of these should also wait until later. But this category is separate
as I'm not sure that these are good ideas.
* Regions
* Mark-compact for acyclic objects
+ Convert ANF to relaxed ANF then to PZ. Use the relaxed ANF to find
single use variables and optimize them away to generate more efficient PZ.
Do some other def-use analysis too, including for parallel tasks.
* Use structural matching to some degree, an instance can implement more
than one interface, and may define more than an interface requires.
* When supporting interfaces, maybe they can be integrated with the
package system in a kind-of "does this package provide X?"
* Evaluate HKTs.
* Refinement types / path-aware constraints.
* Use symbols like ? for maybe and | for or, like Flow Types.
* Consider safe/unsafe integer operations such as overflows, division by
zero etc. Allow checking for error to be done at the end of a
complex calculation or by throwing an exception.
+ When implementing more subtyping, during an ambigious type which the
value of a match expression, prefer the type (if there is one) that allows
the match to "cover" the whole type, and provide that as guidance to the
* Add field update and conditional field update syntax.
* Maybe remove parens from if-then-else conditions and other places such as
match parameters.
* Guards on cases
* Disjunctive patterns on cases
* SISAL allows "masks" (like guards or filters) on returns clauses of
loops. This looks pretty powerful.
* More succinct loop syntax, for simpler loops.
* Maybe allow simple loop outputs to be specified in the loop "head".
* Consider different syntax & and ,? for combining multiple loop inputs in
lockstep or Cartesian combinations.
* List, array and sequence comprehensions.
* Add a scope statement that contains a block allowing shadowing of some
variables, and hiding of any produced variables.
* Add let expressions?
* Add something to allow statements within expressions?
* Probably drop { } for dictionary constants in favor of [ ] with a => to
separate keys from values.
+ Add more logical operators to the langauge, maybe xor and implication,
probably via keywords or functions rather than symbols.
* Predicate expressions as a syntax sugar for applicative.
* Read about Facebook reason wrt naming things and syntax.
* Use command line parsing as example code for language & library.