Plasma Language References

Paul Bone
version 0.1, May 2018
Perpetual draft. Copyright © 2015-2018, Plasma Team License: CC BY-SA 4.0

References to 3rd-party papers and software that we are using or that may be helpful at some point.

Papers, Books & other ideas


GC References

The Garbage Collection Handbook

Potentially useful references from this book
Richard Jones' GC Page

Richard Jones' GC Bibiliography

Memory Management Reference

Data structures for GC
  • TLSF - a data structure for fast, constant time allocation.

Type systems

  • 1ML is an ML language with the module language and value language unified into one language (I think) I need to read more.

  • Modular Implicits is an extension to OCaml to add ad-hoc polymorphism to the language. This is similar to my vague ideas about implicit interfaces, and I will probably use this in some way.

  • Alexy’s talk about deriving things like Eq, Ord etc in Haskell/GHC. Contains further links at the end.

Optimiation and code gneeration

  • Frances Allen, 1971: A cataloge of Optimizing Transformations".

    Inline, Unroll, CSE, DCE, Code Motion, Constant Fold, Peephole.
    Alledgedly these give 80% of the best case of all optimisations.
    Unfortunately I couldn't find this paper.  The referece came from a slide
    deck by Gradon Hoare.
  • Software optimization resources

Concurrency and parallelism


Message Passing


Nanomsg is a C library for message passing. It exposes a BSD sockets style API.


SHIM SHIM is a tool for high-resolution sampling of CPU performance counters. It may be more useful as a basis of our own implementation than useful as-is.


Build systems

Autosetup Autosetup is an alternative to autoconf, it is written in Tcl.

Tup Tup is an alternative to Make. It looks like it avoids a lot of Make’s problems.

Git/Project hosting



Gitlab hosted service.

Git oriented project hosting written in Go.

C Static analysis



A table of some PRNGs.

Plasma is implemented in Mercury.

Plasma is inspired by many other languages, some of them are:

  • Mercury is a logic/functional language that I also work on. I developed an auto-parallelisation system for Mercury and plan to implement one for Plasma. After 7 years contributing to Mercury I’m sure other aspects of it will also influence Plasma.

  • Hope influenced Plasma indirectly. Hope is the first language with abstract data types.

  • OCaml's parametric modules are the inspiration for Plasma’s interfaces.

Several other imperative/declarative languages like Plasma include:

Disclosure: Mars, Wybe and Pawns are all developed by colleagues of mine.

Other parallel languages:

  • SISAL is an applicative single-assignment language, like Plasma it has declarative semantics and an imperative-ish style. It supported auto-parallelisation based on loops and streams and rivaled Fortran form performance.

  • Futhark is an array based language (like APL) for GPGPU programming. I don’t know much about it at the moment but will be reading their papers and following their work.

  • A Data-parallel eDSL embedded in C++

  • Looks like an implicitly-parallel language.