Advanced SPARK¶
Warning
This version of the website contains UNPUBLISHED contents.
This course will teach you advanced topics of SPARK.
Note
The code examples in this course use an 80-column limit, which is a typical limit for Ada code. Note that, on devices with a small screen size, some code examples might be difficult to read.
Contents:
- Subprogram Contracts
- Subprogram Contracts in Ada 2012 and SPARK 2014
 - Dynamic Execution of Subprogram Contracts
 - Dynamic Behavior when Subprogram Contracts Fail
 - Precondition
 - Postcondition
 - Contract Cases
 - Attribute 
'Old - Implication and Equivalence
 - Reasoning by Cases
 - Universal and Existential Quantification
 - Expression Functions
 - Code Examples / Pitfalls
 
 - Type Contracts
 - Systems Programming
- Type Contracts in Ada 2012 and SPARK 2014
 - Systems Programming – What is it?
 - Systems Programming – How can SPARK help?
 - Systems Programming – A trivial example
 - Volatile Variables and Volatile Types
 - Flavors of Volatile Variables
 - Constraints on Volatile Variables
 - Constraints on Volatile Functions
 - State Abstraction on Volatile Variables
 - Constraints on Address Attribute
 - Can something be known of volatile variables?
 - Other Concerns in Systems Programming
 - Code Examples / Pitfalls
 
 - Concurrency
- Concurrency ≠ Parallelism
 - Concurrent Program Structure in Ada
 - The problems with concurrency
 - Ravenscar – the Ada solution to concurrency problems
 - Concurrent Program Structure in Ravenscar
 - Ravenscar – the SPARK solution to concurrency problems
 - Concurrency – A trivial example
 - Setup for using concurrency in SPARK
 - Tasks in Ravenscar
 - Communication Between Tasks in Ravenscar
 - Protected Objects in Ravenscar
 - Protected Communication with Procedures & Functions
 - Blocking Communication with Entries
 - Relaxed Constraints on Entries with Extended Ravenscar
 - Interrupt Handlers in Ravenscar
 - Other Communications Between Tasks in SPARK
 - Data and Flow Dependencies of Tasks
 - State Abstraction over Synchronized Variables
 - Synchronized Abstract State in the Standard Library
 - Code Examples / Pitfalls
 
 - Object-oriented Programming
 - Ghost code
- What is ghost code?
 - Ghost code – A trivial example
 - Ghost variables – aka auxiliary variables
 - Ghost variables – non-interference rules
 - Ghost statements
 - Ghost procedures
 - Ghost functions
 - Imported ghost functions
 - Ghost packages and ghost abstract state
 - Executing ghost code
 - Examples of use
 - Extreme proving with ghost code – red black trees in SPARK
 - Positioning ghost code in proof techniques
 - Code Examples / Pitfalls
 
 - Test and Proof