SPARK (ohjelmointikieli)

KIPINÄ
Kieliluokka moniparadigma
Esiintyi 1988
Kehittäjä Altran , AdaCore
Vapauta 22 (2021 ) ( 2021 )
Tyyppijärjestelmä staattinen , tiukka , turvallinen , nimeävä
Tärkeimmät toteutukset SPARK Pro, SPARK GPL Edition
Vaikutettu Helvetti , Eiffel
Lisenssi GPLv3
Verkkosivusto adaic.org/advantages/spa…
OS Linux , Microsoft Windows , macOS

SPARK ( SPADE Ada Kernel [1] ) on muodollisesti määritelty ohjelmointikieli , joka on Adan [2] osajoukko, joka on suunniteltu kehittämään varmennettuja ohjelmistoja, joilla on korkea turvallisuustaso . SPARKin avulla voit luoda sovelluksia, joilla on ennakoitavissa oleva toiminta ja korkea luotettavuus.

SPARK-kieliversiot liittyvät Adan versioihin ja on jaettu kahteen sukupolveen: SPARK 83, SPARK 95 ja SPARK 2005 (vastaavasti Ada 83, Ada 95 ja Ada 2005) kuuluvat ensimmäiseen sukupolveen ja SPARK 2014 (Ada 2012) toiseen sukupolveen. . Tämä johtuu siitä, että alun perin kommentteja käytettiin osoittamaan eritelmiä ja sopimuksia , mutta Ada 2012:sta lähtien tähän alettiin käyttää kieleen ilmestynyttä aspektimekanismia. Tämä johti koko kielityökalupaketin täydelliseen uudelleensuunnitteluun ja uuden GNATprove-todentajan syntymiseen.

SPARKia käytetään ilmailussa ( Rolls-Royce Trent -suihkumoottorit [3] , Eurofighter Typhoon [4] ja Be-200 [5] lentokoneet , UK NATS iFACTS -järjestelmä [6] ) ja avaruusjärjestelmien kehittämiseen ( Vega kantoraketti , monet satelliitit [7 ] ). Sitä käytetään myös salausjärjestelmien [8] ja kyberturvallisuuden [9] [10] [11] kehittämiseen .

Käsitteet

SPARK-kehityksen tavoitteena oli säilyttää Adan vahvuudet (kuten pakettijärjestelmä ja rajoitetut tyypit) ja poistaa siitä kaikki mahdollisesti vaaralliset tai epäselvät rakenteet [1] , koska Ada, ilmoitetuista kehitystavoitteista huolimatta, osoittautui melko monimutkaista kieltä, eikä sillä ollut täydellisiä muodollisia määritelmiä [1] , ja jotkut sen osat ovat aiheuttaneet vakavaa kritiikkiä [12] . SPARK-ohjelmien tulee olla yksiselitteisiä, niiden käyttäytyminen ei saa riippua kääntäjän valinnasta [K 1] , käännösvaihtoehdoista ja ympäristön tilasta. Tätä varten kieleen on lisätty joitain rajoituksia, mukaan lukien: tehtävien käyttö on mahdollista vain Ravenscar-profiilissa; ilmaukset eivät salli sivuvaikutuksia ; on kiellettyä käyttää ohjattuja tyyppejä, joille on mahdollista määritellä uudelleen alustusmenettelyt ja osoitusoperaattori; nimien yhdistäminen on kielletty; joidenkin operaattoreiden, kuten goto , rajoitettu käyttö ; dynaaminen muistin varaus on kielletty (mutta tyypit, joissa on dynaamiset rajat ja tyypit, joissa on erotteita, ovat sallittuja) [2] .

Ada-kääntäjä voi kuitenkin edelleen kääntää minkä tahansa SPARK-ohjelman, jonka avulla voit sekoittaa nämä kielet yhteen projektiin.

SPARK-kehittäjät onnistuivat saamaan automaattiseen todentamiseen sopivan kielen, jolla on yksinkertainen semantiikka, tiukka muodollinen määritelmä, looginen oikeellisuus ja hyvä ilmaisukyky [1] .

Sopimukset ja riippuvuudet

Proseduurille, joka kasvattaa jonkin globaalin muuttujan arvoa argumentillaan, jos se on positiivinen, ja muussa tapauksessa yhdellä, voit kirjoittaa seuraavan määrityksen:

menettely Add_to_Total ( Arvo : kokonaislukuna ) ja Global => ( In_Out => Total ), Depends => ( Total => ( Total , Value )), Pre = > ( Total < Integer ' Last - ( jos Arvo > 0 niin arvo else 1 )), Viesti => ( Yhteensä = Yhteensä ' Vanha + ( jos Arvo > 0 niin Arvo else 1 ));

Globaali - aspekti näyttää, mihin globaaleihin muuttujiin menettelyllä on pääsy. Tässä tapauksessa se käyttää vain Total -muuttujaa lukemiseen ja kirjoittamiseen. Riippuu näyttää muuttujien välisen suhteen: Totalin uusi arvo riippuu sen vanhasta arvosta ja Arvon arvosta . Ennakkoehto  , se näyttää, mikä tila ohjelman tulee olla ennen toimenpiteen suorittamista; tässä tapauksessa ennakkoehto tarkistaa, tapahtuuko ylivuotoa. Postitus on jälkiehto  , se näyttää ohjelman tilan toimenpiteen suorittamisen jälkeen.

Rutiinien lisäksi on muita tapoja määrittää ohjelman tilan rajoituksia, kuten tarkistuslausekkeita:

pragma Assert ( kunto );

tai silmukkainvariantteja:

pragma Loop_Invariant ( ehto );

Samanaikaisesti ensimmäisen ja toisen sukupolven SPARK-versioiden sopimusten kuvauksen syntaksissa on merkittäviä eroja.

Kielen ensimmäinen sukupolvi käytti erityisiä kommentteja:

-- Luonnollisen luvun kaksinkertaistaminen. menettely Double ( X : in out Natural ); --# pre X < Natural'Last / 2; --# viesti X = 2 * X~;

Vastaava koodi toiselle sukupolvelle:

-- Luonnollisen luvun kaksinkertaistaminen. menettely Tupla ( X : in out Natural ) Pre => X < Natural ' Last / 2 , Post = > X = 2 * X ' Old ;

Vahvistus

Ohjelmia tarkistettaessa käytetään seuraavia menetelmiä:

  • toimintojen ennakko- ja jälkiehtojen täyttymisen tarkistaminen;
  • poikkeuksen tekemiseen kykenevän koodin puuttumisen tarkistaminen ;
  • streaming riippuvuusanalyysi, joka tarkistaa muuttujien alustuksen sekä parametrien ja funktioiden tuloksen välisen suhteen.

Ohjelman oikeellisuuden todistamiseksi kaikille ohjelmoijan käyttämille rakenteille, kuten esi- ja jälkiehdolle, luodaan joukot varmennuslausekkeita. GNATprove-todentaja voi myös joissain tapauksissa luoda varmistusvahvistuksia itsekseen. Joten taulukoiden tai tyyppien rajojen ulkopuolella, ylivuoto ja nollalla jakaminen tarkistetaan.

Lisäksi automaattiseen tarkistusohjelmaan siirretään joukko varmennuslausuntoja ja tietoja ohjelman alkutilasta sekä kehittäjältä saadut varmentamattomat lausunnot. GNATprove käyttää Why3-alustaa [13] sekä CVC4-, Z3- ja Alt-Ergo [14] -testausjärjestelmiä . Todistukseen voidaan käyttää myös kolmannen osapuolen järjestelmiä, kuten Coq [14] .

Historia

SPADE-Pascalin [15] luotettavan Pascal -ohjelmointijärjestelmän kirjoittajat Bernard Carré ja Trevor Jennings loivat ensimmäisen SPARK-version (perustuu Ada 83:een) Southamptonin yliopistossa Britannian puolustusministeriön tuella . Lisäksi seuraavat yritykset työskentelivät kielen parantamiseksi: Program Validation Limited, Praxis Critical Systems Limited (jäljempänä Altran-Praxis, Altran) ja AdaCore.

Vuoden 2009 alussa Praxis solmi sopimuksen AdaCoren kanssa ja julkaisi SPARK Pron GPL :n ehtojen mukaisesti [16] . Sitten kesäkuussa 2009 julkaistiin SPARK GPL Edition, joka oli tarkoitettu ilmaiseen ja akateemiseen ohjelmistokehitykseen.

Toisen sukupolven kieliversion SPARK 2014 julkaisu julkistettiin 30. huhtikuuta 2014 [17] .

Katso myös

Muistiinpanot

Kommentit

  1. Vuodesta 2020 alkaen vain yksi kääntäjä (GNAT) tukee täysin Ada 2012:ta, ja SPARK 2014:ää voidaan käyttää vain sen kanssa.

Lähteet

  1. ↑ 1 2 3 4 SPARK - SPADE Ada -ydin (mukaan lukien RavenSPARK) . docs.adacore.com . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 7. syyskuuta 2021.
  2. ↑ 1 2 SPARK-sertifiointi . www.ada-ru.org . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 13. toukokuuta 2021.
  3. Johannes Kliemann. Ohjelman vahvistus SPARKilla – Kun koodisi ei saa epäonnistua (2018). Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 16. toukokuuta 2021.
  4. Eurofighter Typhoon - Asiakasprojektit - AdaCore . www.adacore.com . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 21. syyskuuta 2020.
  5. Be-200 lentokone . www.ada-ru.org . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 13. toukokuuta 2021.
  6. ↑ GNAT Pro valittu Iso  - Britannian seuraavan sukupolven ATC-järjestelmään  ? . AdaCore . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 21. syyskuuta 2020.
  7. Space - AdaCore . www.adacore.com . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 21. lokakuuta 2020.
  8. Kätevä . Adalta peräisin oleva Skein-salausohjelma näyttää SPARK , SD Times , BZ Media LLC (24. elokuuta 2010). Arkistoitu alkuperäisestä 25. elokuuta 2010. Haettu 31. elokuuta 2010.
  9. David Hardin, Konrad Slind, Mark Bortz, James Potts, Scott Owens. Korkean varmuuden takaava, suorituskykyinen laitteistopohjainen verkkotunnusten välinen järjestelmä  //  Tietokoneturvallisuus, luotettavuus ja turvallisuus / Amund Skavhaug, Jérémie Guiochet, Friedemann Bitsch. - Cham: Springer International Publishing, 2016. - S. 102–113 . - ISBN 978-3-319-45477-1 . - doi : 10.1007/978-3-319-45477-1_9 . Arkistoitu alkuperäisestä 20. tammikuuta 2022.
  10. Genode - Genode-käyttöjärjestelmäkehys . genode.org . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 28. lokakuuta 2020.
  11. Muen | SK x86/64:lle . muen.sk. _ Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 25. lokakuuta 2020.
  12. Henry F. Ledgard, Andrew Singer. Adan pienentäminen (tai standardinmukaista Ada-alijoukkoa kohti)  // ACM:n viestintä. - 1.2.1982. - T. 25 , no. 2 . — S. 121–125 . — ISSN 0001-0782 . - doi : 10.1145/358396.358402 .
  13. Miksi3 . miksi3.lri.fr. _ Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 12. lokakuuta 2020.
  14. ↑ 1 2 Alternative Provers - SPARK Käyttöopas 22.0w . docs.adacore.com . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 12. lokakuuta 2020.
  15. Bernard Carre. Luotettava ohjelmointi vakiokielillä  (englanti)  // High-Integrity Software / CT Sennett. — Boston, MA: Springer US, 1989. — S. 102–121 . - ISBN 978-1-4684-5775-9 . - doi : 10.1007/978-1-4684-5775-9_5 .
  16. Praxis ja AdaCore julkistavat SPARK  Pron . AdaCore . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 21. syyskuuta 2020.
  17. SPARKin käyttö sertifiointikontekstissa  . AdaCore-blogi . Haettu 10. lokakuuta 2020. Arkistoitu alkuperäisestä 12. lokakuuta 2020.

Kirjallisuus

Linkit