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 and Books


GC References

The Garbage Collection Handbook

Potentially useful references from this book
Richard Jones' GC Page

Richard Jones' GC Bibiliography

Memory Management Reference

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


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.