Plasma Language References
<paul@plasmalang.org>
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
Closures
My own blog articles, the second one discusses the two above papers:
Continuations
- Implementation Strategies for First-class continuations
-
http://lampwww.epfl.ch/teaching/archive/advanced_compiler/2006/assignments/part5/continuations.pdf
GC References
- The Garbage Collection Handbook
- Potentially useful references from this book
-
-
Appel 1989b, Goldberg 1991 about pointer finding
-
Looks like Appel has several good papers about GC
-
Tarditi Compressing stack maps. http://research.microsoft.com/pubs/68937/ismm-2000b.pdf
-
Doligez and Leroy 1993 and other papers pp107 http://gallium.inria.fr/~xleroy/publi/concurrent-gc.pdf
-
Halsteed 1985 concurrent copying
-
Marlow 2008
-
Train collector
-
- 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.
-
https://www.koterpillar.com/talks/instances-for-everyone/#18 Alexy’s talk about deriving things like Eq, Ord etc in Haskell/GHC. Contains further links at the end.
Optimiation and code gneeration
-
http://www.agner.org/optimize/ Software optimization resources
https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/compilingml.pdf Compiling a Functional Language.
Libraries
Message Passing
- Nanomsg
-
Nanomsg is a C library for message passing. It exposes a BSD sockets style API.
Profiling
- SHIM
-
https://github.com/ShimProfiler/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.
Tools
Build systems
- Autosetup
-
http://msteveb.github.io/autosetup/ Autosetup is an alternative to autoconf, it is written in Tcl.
- Tup
-
http://gittup.org/tup/index.html Tup is an alternative to Make. It looks like it avoids a lot of Make’s problems.
Git/Project hosting
- gitlab
-
Software.
- gitgud.io
-
Gitlab hosted service.
- gogs.io
-
Git oriented project hosting written in Go.
C Static analysis
- splint
Algorithms
PRNGs
A table of some PRNGs.
Related programming languages
Plasma is implemented in Mercury.
Plasma is inspired by many other languages, some of them are:
-
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.
-
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.
-
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.
Several other imperative/declarative languages like Plasma include:
Disclosure: Mars, Wybe and Pawns are all developed by colleagues of mine.