Jaynes is preceded and directly influenced by numerous high-quality systems and research groups. This page attempts to acknowledge these systems, and the people involved.
There are a number of good references in both textbook and research paper form on probabilistic programming. In reference to this system, here are a few I would recommend:
A compilation target for probabilistic programming languages
Lightweight implementations of probabilistic programming languages via transformational compilation
The design and implementation of probabilistic programming languages
There are also numerous papers about current systems:
Figaro: an object-oriented probabilistic programming language
Venture: a higher-order probabilistic programming platform with programmable inference
Gen: a general-purpose probabilistic programming system with programmable inference
FACTORIE: probabilistic programming via imperatively defined factor graphs
(monad-bayes) Practical probabilistic programming with monads
(probabilistic C) A compilation target for probabilistic programming languages
Jaynes is a context-oriented programming system for probabilistic programming. Internally, the current implementation closely follows the design of the dynamic DSL in Gen which also uses the notion of stateful execution contexts to produce the interfaces required for inference. Jaynes is focused on an optimized dynamic language which allows most of the Julia language to be used in expressing probabilistic programs.
I would recommend users of Jaynes become familiar with Gen - to understand the problems which Jaynes attempts to solve. The following papers may be useful in this regard:
Gen: a general-purpose probabilistic programming system with programmable inference
Lightweight implementations of probabilistic programming languages via transformational compilation
In the design space of compiler metaprogramming tools, the following systems have been highly influential in the design of Jaynes
In particular, IRTools
provides a large part of the core infrastructure for the implementation. Strictly speaking, Jaynes
is not dependent on a fundamental mechanism which only IRTools
provides (anything can be expressed with generated functions from Julia) but IRTools
greatly reduces the level of risk in working with generated functions and lowered code.
Jaynes has also been influenced by Turing, the Poutine effects system in Pyro, and Unison lang. Jaynes does not implement algebraic effects in a rigorous (or static!) way, but the usage of execution contexts which control how certain method calls are executed is closely aligned with these concepts.
Finally, the probabilistic programming community in Julia is largely responsible for many of the ideas and conversations which lead to Jaynes. I'd like to thank Chad Scherrer, Martin Trapp, Alex Lew, Jarred Barber, George Matheos, Marco Cusumano-Towner, Ari Katz, Philipp Gabler, Valentin Churavy, Mike Innes, and Lyndon White for auxiliary help and discussion concerning the design and implementation of many parts of the system.