Generated by DeepSeek V3.2| SPARK | |
|---|---|
| Name | SPARK |
| Paradigm | Imperative programming, Structured programming, Concurrent computing |
| Designer | Bernard Carré, Trevor Jennings |
| Developer | Altran, AdaCore |
| Typing | Strong, Static, Manifest |
| Influenced by | Ada (programming language), HOL (proof assistant) |
| Influenced | Ada 2012, Rust (programming language) |
| Operating system | Cross-platform |
| License | GPL |
SPARK. SPARK is a formally defined computer programming language based on the Ada (programming language) designed specifically for the development of high-integrity software used in systems where reliability and safety are paramount. It comprises a restricted, analyzable subset of Ada (programming language) and a set of verification tools that use Formal verification to prove the absence of certain classes of errors in program code. The language and its toolset are used extensively in critical domains such as Aerospace engineering, Defense industry, Rail transport, and Medical device development, where failure can have catastrophic consequences.
SPARK aims to eliminate the possibility of runtime errors by design, targeting flaws like Arithmetic overflow, Buffer overflow, Dereferencing (computer programming), and Deadlock. This is achieved by imposing strict, statically verifiable contracts on program components through the use of Preconditions, Postconditions, and Data invariants, concepts influenced by Design by contract methodologies. The core toolset, historically developed by Altran and now primarily by AdaCore, includes a static analyzer and an automated theorem prover that integrates with proof assistants like GNAT Programming Studio and interacts with solvers such as Alt-Ergo and CVC4. Unlike general-purpose languages, SPARK sacrifices some expressive power and programming convenience to gain mathematical certainty about key program properties, making it distinct from, but complementary to, testing with frameworks like JUnit.
The origins of SPARK trace back to the late 1980s at the University of Southampton and Program Validation Limited, where researchers including Bernard Carré and Trevor Jennings sought to apply formal methods to Ada (programming language), which was mandated for many United States Department of Defense projects. The first published definition appeared in 1988, with subsequent major revisions known as SPARK83, SPARK95, and SPARK 2005 aligning with updates to the Ada (programming language) standard. A pivotal evolution was the SPARK 2014 release, which incorporated features from Ada 2012—such as Contract-based programming constructs—and shifted from an own-defined language to a provably sound subset of Ada (programming language). This transition was largely driven by work at Altran Praxis (later acquired by Altran) and has been sustained by AdaCore through the GNAT toolchain, with significant funding and validation from projects for organizations like the European Space Agency and the UK Ministry of Defence.
The SPARK language is defined by a precise subsetting of the Ada (programming language) ISO/IEC 8652 standard, excluding or restricting features that are difficult or impossible to analyze statically, such as pointers (Access types), Exception handling, and certain forms of Dynamic dispatch. Programs are annotated with special comments or Aspect specifications that express formal contracts in the Annotation language. The verification toolchain performs several stages of analysis: Flow analysis examines information flow and data dependencies; Proof of program correctness attempts to mathematically verify that subprogram implementations meet their contracts using techniques from Hoare logic; and Abstract interpretation may be used for certain checks. The tools generate verification conditions that are discharged either automatically by integrated Satisfiability modulo theories solvers or interactively with proof assistants like Coq.
SPARK is predominantly deployed in safety-critical and high-assurance systems across several regulated industries. In Aerospace engineering, it has been used in the Lockheed Martin C-130J Super Hercules mission computer, components of the Eurofighter Typhoon, and software for the BAE Systems Hawk. Within Rail transport, it underpins signaling and control systems certified under standards like CENELEC EN 50128. The language has also been applied to cryptographic components, such as in the MISRA C-alternative for automotive, and in secure Financial technology applications. Notable projects include the Multos smart card operating system, elements of the Paris Métro Line 14 driverless train, and security-critical modules for the Common Criteria evaluation of products from Thales Group.
While SPARK itself is a specific language and toolset, its principles and technology have influenced and spawned related efforts. The most direct derivative is the ongoing evolution of the SPARK 2014 language as part of the GNAT Pro toolchain from AdaCore. The RavenSPARK variant was developed for high-assurance MIL-STD projects. Concepts from SPARK's formal verification have been incorporated into the Ada 2012 standard itself, particularly its Contract-based programming features. Furthermore, the success of SPARK has inspired similar projects for other languages, such as Frama-C for C (programming language), and has informed the design of modern safe systems languages like Rust (programming language), which also emphasizes compile-time provable memory safety without a Garbage collection (computer science).
* Ada (programming language) * Formal verification * Design by contract * Static program analysis * Safety-critical system * DO-178C * Common Criteria * Automated theorem proving * Altran * AdaCore
Category:Programming languages Category:Formal methods Category:Ada (programming language) family Category:Computer science