fbpx
Wikipedia

SPARK (programming language)

SPARK is a formally defined computer programming language based on the Ada programming language, intended for the development of high integrity software used in systems where predictable and highly reliable operation is essential. It facilitates the development of applications that demand safety, security, or business integrity.

SPARK
ParadigmMulti-paradigm
DeveloperAltran and AdaCore
Stable release
Community 2021 / June 1, 2021; 2 years ago (2021-06-01)
Typing disciplinestatic, strong, safe, nominative
OSCross-platform: Linux, Microsoft Windows, Mac OS X
LicenseGPLv3
WebsiteAbout SPARK
Major implementations
SPARK Pro, SPARK GPL Edition, SPARK Community
Influenced by
Ada, Eiffel

Originally, there were three versions of the SPARK language (SPARK83, SPARK95, SPARK2005) based on Ada 83, Ada 95 and Ada 2005 respectively.

A fourth version of the SPARK language, SPARK 2014, based on Ada 2012, was released on April 30, 2014. SPARK 2014 is a complete re-design of the language and supporting verification tools.

The SPARK language consists of a well-defined subset of the Ada language that uses contracts to describe the specification of components in a form that is suitable for both static and dynamic verification.

In SPARK83/95/2005, the contracts are encoded in Ada comments and so are ignored by any standard Ada compiler, but are processed by the SPARK "Examiner" and its associated tools.

SPARK 2014, in contrast, uses Ada 2012's built-in "aspect" syntax to express contracts, bringing them into the core of the language. The main tool for SPARK 2014 (GNATprove) is based on the GNAT/GCC infrastructure, and re-uses almost the entirety of the GNAT Ada 2012 front-end.

Technical overview edit

SPARK utilises the strengths of Ada while trying to eliminate all its potential ambiguities and insecure constructs. SPARK programs are by design meant to be unambiguous, and their behavior is required to be unaffected by the choice of Ada compiler. These goals are achieved partly by omitting some of Ada's more problematic features (such as unrestricted parallel tasking) and partly by introducing contracts which encode the application designer's intentions and requirements for certain components of a program.

The combination of these approaches allows SPARK to meet its design objectives, which are:

Contract examples edit

Consider the Ada subprogram specification below:

procedure Increment (X : in out Counter_Type); 

In pure Ada this might increment the variable X by one or one thousand; or it might set some global counter to X and return the original value of the counter in X; or it might do absolutely nothing with X at all.

With SPARK 2014, contracts are added to the code to provide additional information regarding what a subprogram actually does. For example, we may alter the above specification to say:

procedure Increment (X : in out Counter_Type)  with Global => null, Depends => (X => X); 

This specifies that the Increment procedure does not use (neither update nor read) any global variable and that the only data item used in calculating the new value of X is X itself.

Alternatively, the designer might specify:

procedure Increment (X : in out Counter_Type)  with Global => (In_Out => Count), Depends => (Count => (Count, X),  X => null); 

This specifies that Increment will use the global variable Count in the same package as Increment, that the exported value of Count depends on the imported values of Count and X, and that the exported value of X does not depend on any variables at all and it will be derived from constant data only.

If GNATprove is then run on the specification and corresponding body of a subprogram, it will analyse the body of the subprogram to build up a model of the information flow. This model is then compared against that which has been specified by the annotations and any discrepancies reported to the user.

These specifications can be further extended by asserting various properties that either need to hold when a subprogram is called (preconditions) or that will hold once execution of the subprogram has completed (postconditions). For example, we could say the following:

procedure Increment (X : in out Counter_Type)  with Global => null, Depends => (X => X), Pre => X < Counter_Type'Last, Post => X = X'Old + 1; 

This, now, specifies not only that X is derived from itself alone, but also that before Increment is called X must be strictly less than the last possible value of its type (to ensure that the result will never overflow) and that afterwards X will be equal to the initial value of X plus one.

Verification conditions edit

GNATprove can also generate a set of verification conditions or VCs. These conditions are used to establish whether certain properties hold for a given subprogram. At a minimum, the GNATprove will generate VCs to establish that all run-time errors cannot occur within a subprogram, such as:

  • array index out of range
  • type range violation
  • division by zero
  • numerical overflow.

If a postcondition or any other assertion is added to a subprogram, GNATprove will also generate VCs that require the user to show that these properties hold for all possible paths through the subprogram.

Under the hood, GNATprove uses the Why3 intermediate language and VC Generator, and the CVC4, Z3, and Alt-Ergo theorem provers to discharge VCs. Use of other provers (including interactive proof checkers) is also possible through other components of the Why3 toolset.

History edit

The first version of SPARK (based on Ada 83) was produced at the University of Southampton (with UK Ministry of Defence sponsorship) by Bernard Carré and Trevor Jennings. The name SPARK was derived from SPADE Ada Kernel, in reference to the SPADE subset of the Pascal programming language.[1]

Subsequently the language was progressively extended and refined, first by Program Validation Limited and then by Praxis Critical Systems Limited. In 2004, Praxis Critical Systems Limited changed its name to Praxis High Integrity Systems Limited. In January 2010, the company became Altran Praxis.

In early 2009, Praxis formed a partnership with AdaCore, and released "SPARK Pro" under the terms of the GPL. This was followed in June 2009 by the SPARK GPL Edition 2009, aimed at the FOSS and academic communities.

In June 2010, Altran-Praxis announced that the SPARK programming language would be used in the software of US Lunar project CubeSat, expected to be completed in 2015.

In January 2013, Altran-Praxis changed its name to Altran which in April 2021 became Capgemini Engineering (following Altran's merger with Capgemini).

The first Pro release of SPARK 2014 was announced on April 30, 2014, and was quickly followed by the SPARK 2014 GPL edition, aimed at the FLOSS and academic communities.

Industrial applications edit

Safety-related systems edit

SPARK has been used in several high profile safety-critical systems, covering commercial aviation (Rolls-Royce Trent series jet engines, the ARINC ACAMS system, the Lockheed Martin C130J), military aviation (EuroFighter Typhoon, Harrier GR9, AerMacchi M346), air-traffic management (UK NATS iFACTS system), rail (numerous signalling applications), medical (the LifeFlow ventricular assist device), and space applications (the Vermont Technical College CubeSat project).[citation needed]

Security-related systems edit

SPARK has also been used in secure systems development. Users include Rockwell Collins (Turnstile and SecureOne cross-domain solutions), the development of the original MULTOS CA, the NSA Tokeneer demonstrator, the secunet multi-level workstation, the Muen separation kernel and Genode block-device encrypter.

In August 2010, Rod Chapman, principal engineer of Altran Praxis, implemented Skein, one of candidates for SHA-3, in SPARK. In comparing the performance of the SPARK and C implementations and after careful optimization, he managed to have the SPARK version run only about 5 to 10% slower than C. Later improvement to the Ada middle-end in GCC (implemented by Eric Botcazou of AdaCore) closed the gap, with the SPARK code matching the C in performance exactly.[2]

NVIDIA have also adopted SPARK for the implementation of security-critical firmware.[3]

In 2020, Rod Chapman re-implemented the TweetNaCl cryptographic library in SPARK 2014.[4] The SPARK version of the library has a complete auto-active proof of type-safety, memory-safety and some correctness properties, and retains constant-time algorithms throughout. The SPARK code is also significantly faster than TweetNaCl.

See also edit

References edit

  1. ^ "SPARK - The SPADE Ada Kernel (including RavenSPARK)". AdaCore. Retrieved 30 June 2021.
  2. ^ Handy, Alex (24 August 2010). "Ada-derived Skein crypto shows SPARK". SD Times. BZ Media LLC. Retrieved 31 August 2010.
  3. ^ "Securing the Future of Safety and Security of Embedded Software". 8 January 2020.
  4. ^ "SPARKNaCl". GitHub. 8 October 2021.

Further reading edit

  • McCormick, John W.; Chapin, Peter C. (2015). Building High Integrity Applications with SPARK. Cambridge University Press. ISBN 978-1-107-65684-0.
  • Ross, Philip E. (September 2005). "The Exterminators". IEEE Spectrum. 42 (9): 36–41. doi:10.1109/MSPEC.2005.1502527. ISSN 0018-9235. S2CID 26369398.

External links edit

  • SPARK 2014 community site
  • SPARK Pro website
  • SPARK Libre (GPL) Edition website
  • Altran
  • Correctness by Construction: A Manifesto for High-Integrity Software 30 October 2012 at the Wayback Machine
  • UK's Safety-Critical Systems Club
  • Comparison with a C specification language (Frama C)
  • Tokeneer Project Page
  • Muen Kernel Public Release
  • LifeFlow LVAD Project
  • VTU CubeSat Project

spark, programming, language, this, article, about, programming, language, cluster, computing, framework, that, scala, java, python, apache, spark, this, article, multiple, issues, please, help, improve, discuss, these, issues, talk, page, learn, when, remove,. This article is about the programming language For the cluster computing framework that can run on Scala Java and Python see Apache Spark This article has multiple issues Please help improve it or discuss these issues on the talk page Learn how and when to remove these template messages This article includes a list of general references but it lacks sufficient corresponding inline citations Please help to improve this article by introducing more precise citations September 2010 Learn how and when to remove this message This article may rely excessively on sources too closely associated with the subject potentially preventing the article from being verifiable and neutral Please help improve it by replacing them with more appropriate citations to reliable independent third party sources May 2014 Learn how and when to remove this message Learn how and when to remove this message SPARK is a formally defined computer programming language based on the Ada programming language intended for the development of high integrity software used in systems where predictable and highly reliable operation is essential It facilitates the development of applications that demand safety security or business integrity SPARKParadigmMulti paradigmDeveloperAltran and AdaCoreStable releaseCommunity 2021 June 1 2021 2 years ago 2021 06 01 Typing disciplinestatic strong safe nominativeOSCross platform Linux Microsoft Windows Mac OS XLicenseGPLv3WebsiteAbout SPARKMajor implementationsSPARK Pro SPARK GPL Edition SPARK CommunityInfluenced byAda Eiffel Originally there were three versions of the SPARK language SPARK83 SPARK95 SPARK2005 based on Ada 83 Ada 95 and Ada 2005 respectively A fourth version of the SPARK language SPARK 2014 based on Ada 2012 was released on April 30 2014 SPARK 2014 is a complete re design of the language and supporting verification tools The SPARK language consists of a well defined subset of the Ada language that uses contracts to describe the specification of components in a form that is suitable for both static and dynamic verification In SPARK83 95 2005 the contracts are encoded in Ada comments and so are ignored by any standard Ada compiler but are processed by the SPARK Examiner and its associated tools SPARK 2014 in contrast uses Ada 2012 s built in aspect syntax to express contracts bringing them into the core of the language The main tool for SPARK 2014 GNATprove is based on the GNAT GCC infrastructure and re uses almost the entirety of the GNAT Ada 2012 front end Contents 1 Technical overview 2 Contract examples 3 Verification conditions 4 History 5 Industrial applications 5 1 Safety related systems 5 2 Security related systems 6 See also 7 References 8 Further reading 9 External linksTechnical overview editSPARK utilises the strengths of Ada while trying to eliminate all its potential ambiguities and insecure constructs SPARK programs are by design meant to be unambiguous and their behavior is required to be unaffected by the choice of Ada compiler These goals are achieved partly by omitting some of Ada s more problematic features such as unrestricted parallel tasking and partly by introducing contracts which encode the application designer s intentions and requirements for certain components of a program The combination of these approaches allows SPARK to meet its design objectives which are logical soundness rigorous formal definition simple semantics security expressive power verifiability bounded resource space and time requirements minimal runtime system requirementsContract examples editConsider the Ada subprogram specification below procedure Increment X in out Counter Type In pure Ada this might increment the variable X by one or one thousand or it might set some global counter to X and return the original value of the counter in X or it might do absolutely nothing with X at all With SPARK 2014 contracts are added to the code to provide additional information regarding what a subprogram actually does For example we may alter the above specification to say procedure Increment X in out Counter Type with Global gt null Depends gt X gt X This specifies that the Increment procedure does not use neither update nor read any global variable and that the only data item used in calculating the new value of X is X itself Alternatively the designer might specify procedure Increment X in out Counter Type with Global gt In Out gt Count Depends gt Count gt Count X X gt null This specifies that Increment will use the global variable Count in the same package as Increment that the exported value of Count depends on the imported values of Count and X and that the exported value of X does not depend on any variables at all and it will be derived from constant data only If GNATprove is then run on the specification and corresponding body of a subprogram it will analyse the body of the subprogram to build up a model of the information flow This model is then compared against that which has been specified by the annotations and any discrepancies reported to the user These specifications can be further extended by asserting various properties that either need to hold when a subprogram is called preconditions or that will hold once execution of the subprogram has completed postconditions For example we could say the following procedure Increment X in out Counter Type with Global gt null Depends gt X gt X Pre gt X lt Counter Type Last Post gt X X Old 1 This now specifies not only that X is derived from itself alone but also that before Increment is called X must be strictly less than the last possible value of its type to ensure that the result will never overflow and that afterwards X will be equal to the initial value of X plus one Verification conditions editGNATprove can also generate a set of verification conditions or VCs These conditions are used to establish whether certain properties hold for a given subprogram At a minimum the GNATprove will generate VCs to establish that all run time errors cannot occur within a subprogram such as array index out of range type range violation division by zero numerical overflow If a postcondition or any other assertion is added to a subprogram GNATprove will also generate VCs that require the user to show that these properties hold for all possible paths through the subprogram Under the hood GNATprove uses the Why3 intermediate language and VC Generator and the CVC4 Z3 and Alt Ergo theorem provers to discharge VCs Use of other provers including interactive proof checkers is also possible through other components of the Why3 toolset History editThe first version of SPARK based on Ada 83 was produced at the University of Southampton with UK Ministry of Defence sponsorship by Bernard Carre and Trevor Jennings The name SPARK was derived from SPADE Ada Kernel in reference to the SPADE subset of the Pascal programming language 1 Subsequently the language was progressively extended and refined first by Program Validation Limited and then by Praxis Critical Systems Limited In 2004 Praxis Critical Systems Limited changed its name to Praxis High Integrity Systems Limited In January 2010 the company became Altran Praxis In early 2009 Praxis formed a partnership with AdaCore and released SPARK Pro under the terms of the GPL This was followed in June 2009 by the SPARK GPL Edition 2009 aimed at the FOSS and academic communities In June 2010 Altran Praxis announced that the SPARK programming language would be used in the software of US Lunar project CubeSat expected to be completed in 2015 In January 2013 Altran Praxis changed its name to Altran which in April 2021 became Capgemini Engineering following Altran s merger with Capgemini The first Pro release of SPARK 2014 was announced on April 30 2014 and was quickly followed by the SPARK 2014 GPL edition aimed at the FLOSS and academic communities Industrial applications editSafety related systems edit SPARK has been used in several high profile safety critical systems covering commercial aviation Rolls Royce Trent series jet engines the ARINC ACAMS system the Lockheed Martin C130J military aviation EuroFighter Typhoon Harrier GR9 AerMacchi M346 air traffic management UK NATS iFACTS system rail numerous signalling applications medical the LifeFlow ventricular assist device and space applications the Vermont Technical College CubeSat project citation needed Security related systems edit SPARK has also been used in secure systems development Users include Rockwell Collins Turnstile and SecureOne cross domain solutions the development of the original MULTOS CA the NSA Tokeneer demonstrator the secunet multi level workstation the Muen separation kernel and Genode block device encrypter In August 2010 Rod Chapman principal engineer of Altran Praxis implemented Skein one of candidates for SHA 3 in SPARK In comparing the performance of the SPARK and C implementations and after careful optimization he managed to have the SPARK version run only about 5 to 10 slower than C Later improvement to the Ada middle end in GCC implemented by Eric Botcazou of AdaCore closed the gap with the SPARK code matching the C in performance exactly 2 NVIDIA have also adopted SPARK for the implementation of security critical firmware 3 In 2020 Rod Chapman re implemented the TweetNaCl cryptographic library in SPARK 2014 4 The SPARK version of the library has a complete auto active proof of type safety memory safety and some correctness properties and retains constant time algorithms throughout The SPARK code is also significantly faster than TweetNaCl See also edit nbsp Free and open source software portal Z notation Java Modeling LanguageReferences edit SPARK The SPADE Ada Kernel including RavenSPARK AdaCore Retrieved 30 June 2021 Handy Alex 24 August 2010 Ada derived Skein crypto shows SPARK SD Times BZ Media LLC Retrieved 31 August 2010 Securing the Future of Safety and Security of Embedded Software 8 January 2020 SPARKNaCl GitHub 8 October 2021 Further reading editBarnes John 2012 SPARK The Proven Approach to High Integrity Software Altran Praxis ISBN 978 0 9572905 1 8 McCormick John W Chapin Peter C 2015 Building High Integrity Applications with SPARK Cambridge University Press ISBN 978 1 107 65684 0 Ross Philip E September 2005 The Exterminators IEEE Spectrum 42 9 36 41 doi 10 1109 MSPEC 2005 1502527 ISSN 0018 9235 S2CID 26369398 External links editSPARK 2014 community site SPARK Pro website SPARK Libre GPL Edition website Altran Correctness by Construction A Manifesto for High Integrity Software Archived 30 October 2012 at the Wayback Machine UK s Safety Critical Systems Club Comparison with a C specification language Frama C Tokeneer Project Page Muen Kernel Public Release LifeFlow LVAD Project VTU CubeSat Project Retrieved from https en wikipedia org w index php title SPARK programming language amp oldid 1222721943, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.