Appendix B. A brief survey of probabilistic programming systems
A growing number of probabilistic programming systems (PPSs) are under development. In this survey, I briefly describe some of the more widely used systems and mention their key features. Where possible, I also provide you with URLs to download the systems. I don’t attempt to cover all of the systems out there; I apologize to any developers whose system I don’t cover. I also apologize in advance for any errors or key omissions in the description of the systems.
PPSs can be characterized along various dimensions:
- How expressive is the language? For example, does it support user-defined functions, undirected models, discrete and continuous variables, open-universe models, and variables with arbitrary data types?
- What is the deployment strategy of the system? Does it provide a standalone language, a library in an existing language, or a new implementation of an existing language with probabilistic extensions? And if it’s a standalone language, does it provide an interface from an existing language?
- What kind of programming style does it use, such as functional, logical, imperative, or object-oriented?
- What kinds of inference algorithms, such as factored and sampling algorithms, does it provide? Does it support dynamic reasoning?
- What kinds of queries does it support?
Following are some examples of PPSs.