{{language|SPARK
|site=http://www.altran-praxis.com/spark.aspx
|tags=spark
|exec=machine
|gc=allowed
|parampass=both
|checking=static
|compat=nominative
|express=explicit
|strength=strong
|safety=safe
|LCT=yes}}
{{language programming paradigm|concurrent}}
{{language programming paradigm|imperative}}
{{language programming paradigm|object-oriented}}
[[wp:SPARK_programming_language|'''SPARK''']] or '''SPARK Ada''' is a sub-language of [[Ada]], supplemented with annotations (formal comments).  Its primary purpose is for high-integrity applications, where static analysis of the source is used to determine properties of the program.

The properties that SPARK code can be analysed for are:
*Freedom from data-flow errors.
*Freedom from information flow errors.
*Freedom from information flows that violate safety or security.
*Type safety (freedom from run-time errors).
*Functional correctness.
*Absence of dead paths.

In older versions, the annotations always began, on each line, with the Ada comment symbol “--”, so all SPARK programs comply with the [[Ada]] standard.  Newer versions, starting with SPARK 2014, use the aspect syntax known from Ada 2012.

A SPARK program can be compiled by any [[Ada]] compiler or processed by any other [[Ada]] tool.

The annotations state the required properties of a program.  Different properties may require different types of annotation.

A description of the SPARK Proof process is [[SPARK_Proof_Process|here]].

The SPARK tools are freely available under the GNU GPL.  The SPARK language definition is available from AdaCore at [http://docs.adacore.com/spark2014-docs/html/lrm/ SPARK 2014 Reference Manual].

The [news:comp.lang.ada comp.lang.ada] [[newsgroup]] ([http://groups.google.com/group/comp.lang.ada/topics access via Google Groups])is the main forum for discussing or asking questions about SPARK.