Capsule-oriented Programming
in the Panini Language

Panini Team

Revised: January 19, 2015 for Panini 0.9.3

Contents
I  Introduction
1 Overview
2 Motivation
 2.1 Concurrency: A Pressing Need
 2.2 Running Example
 2.3 Difficult Concurrency-related Design Decisions
3 Getting Started
 3.1 Panini’s Goals
 3.2 Hello World!
 3.3 Compiling and running Hello World!
 3.4 Decomposing a Program into Capsules
 3.5 Implicit Concurrency in Capsule-oriented Programs
4 Capsule-oriented Design
 4.1 Asteroids in Panini
 4.2 Architecture and Design
 4.3 Implementation
 4.4 Analysis of Benefits
 4.5 Compiling and running Asteroids!
II  Panini Language and its Features
5 Capsule Declarations
 5.1 Syntax of Capsule Declaration
 5.2 Capsule States
 5.3 Capsule Initializer
 5.4 Capsule Procedures
 5.5 Autonomous Capsule Behavior
 5.6 Capsule Procedure Calls
 5.7 Shutdown and Exit Procedures
 5.8 Example: Bank Account
 5.9 Implicit concurrency
6 Design Declarations
 6.1 Capsule Instance Declarations
 6.2 Wiring Capsule Instances
 6.3 Topology operators in design declarations
7 Signature Declarations
8 Capsule State Confinement
 8.1 Confinement between Instances of a Capsule
 8.2 Confinement Violation in Procedure Call
 8.3 Confinement Violation in Return Statements
 8.4 Resolving Confinement Violation
III  Implicit Parallelism
9 Master-Worker Pattern
 9.1 Computing the constant Pi
 9.2 Architecture and design
 9.3 Implementation
 9.4 Implicit concurrency
10 Leader-Follower Pattern
 10.1 Creating Server/Client applications in Panini
 10.2 Architecture and design
 10.3 Implementation
 10.4 Implicit concurrency
11 Pipeline Pattern
 11.1 Overview of pipeline parallelism implementation
 11.2 Architecture and design
 11.3 Implementation
 11.4 Implicit concurrency
12 Distributor Pattern
IV  Appendix
13 Installing and Running the Panini Compiler
 13.1 Downloading the Compiler
 13.2 Structure of Panini Distribution
 13.3 Requirements for Running Panini Compiler
 13.4 Running the Panini Compiler
 13.5 Running the Panini Compiler from the command-line
 13.6 Compiling Examples from Command-Line
 13.7 Running the Panini Compiler from Within Ant
 13.8 Translating Panini into Java
 13.9 Acknowledgments and Licensing
14 Profiling Panini Programs
 14.1 Using Panini Profiler
 14.2 Configuring Panini Profiler
15 FAQs
 15.1 FAQs about the Language
 15.2 FAQs about the Compiler
Bibliography
Bibliography