SPARK (programozási nyelv)

SZIKRA
Nyelvóra több paradigma
Megjelent 1988
Fejlesztő Altran , AdaCore
Kiadás 22 (2021 ) ( 2021 )
Típusrendszer statikus , szigorú , biztonságos , névelő
Főbb megvalósítások SPARK Pro, SPARK GPL Edition
Befolyásolt A pokolba , Eiffel
Engedély GPLv3
Weboldal adaic.org/advantages/spa…
OS Linux , Microsoft Windows , macOS

A SPARK ( SPADE Ada Kernel [1] ) egy formálisan meghatározott programozási nyelv , amely az Ada [2] egy részhalmaza, és magas szintű biztonsági integritású ellenőrzött szoftverek fejlesztésére szolgál . A SPARK lehetővé teszi olyan alkalmazások létrehozását, amelyek kiszámítható viselkedésűek és nagy megbízhatóságot biztosítanak.

A SPARK nyelvi verziói az Ada verziókhoz kapcsolódnak, és két generációra oszthatók: a SPARK 83, a SPARK 95 és a SPARK 2005 (Ada 83, Ada 95 és Ada 2005) az első generációhoz, a SPARK 2014 (Ada 2012) pedig a másodikhoz tartozik. . Ez annak köszönhető, hogy kezdetben a megjegyzésekkel jelezték a specifikációkat és a szerződéseket , de 2012-től Ada-tól kezdődően erre a nyelvben megjelent szempontmechanizmust kezdték használni. Ez a teljes nyelvi eszköztár teljes újratervezéséhez és egy új GNATprove ellenőrző megjelenéséhez vezetett.

A SPARK-ot a repülésben ( Rolls-Royce Trent sugárhajtóművek [3] , Eurofighter Typhoon [4] és Be-200 [5] repülőgépek , UK NATS iFACTS rendszer [6] ) és űrrendszerek fejlesztésére használják ( Vega hordozórakéta , sok műhold [7] ). Titkosító rendszerek [8] és kiberbiztonság [9] [10] [11] fejlesztésére is használják .

Fogalmak

A SPARK fejlesztés célja az volt, hogy megőrizze az Ada erősségeit (például a csomagrendszert és a korlátozott típusokat), és eltávolítson belőle minden potenciálisan nem biztonságos vagy félreérthető konstrukciót [1] , mivel az Ada a megfogalmazott fejlesztési célok ellenére egy meglehetősen összetett nyelv és nem rendelkezett teljes formális definíciókkal [1] , és egyes részei komoly kritikát váltottak ki [12] . A SPARK programok legyenek egyértelműek, viselkedésük ne függjön a fordítóprogramtól [K 1] , a fordítási lehetőségektől és a környezet állapotától. Ennek érdekében bizonyos korlátozásokat vezettek be a nyelvbe, többek között: a feladatok használata csak a Ravenscar profilban lehetséges; a kifejezések nem engednek mellékhatásokat ; tilos a vezérelt típusok használata, amelyekhez lehetőség van inicializálási eljárások újradefiniálására és operátor hozzárendelésére; a nevek kombinációja tilos; néhány operátor korlátozott használata, például a goto ; a dinamikus memóriafoglalás tilos (de dinamikus határokkal és diszkriminálókkal rendelkező típusok megengedettek) [2] .

Bármely SPARK programot azonban továbbra is le tudja fordítani az Ada fordító, amely lehetővé teszi ezeknek a nyelveknek a keverését egy projektben.

A SPARK fejlesztőinek sikerült megszerezniük az automatikus ellenőrzéshez kényelmes nyelvet, amely egyszerű szemantikával, szigorú formai definícióval, logikai helyességgel és jó kifejezőképességgel rendelkezik [1] .

Szerződések és függőségek

Egy olyan eljáráshoz, amely valamely globális változó értékét az argumentumával növeli, ha az pozitív, és egyébként eggyel, a következő specifikációt írhatja fel:

eljárás Add_to_Total ( Érték : egész számban ) a következővel: Global => ( In_Out => Total ), Depends => ( Total => ( Total , Value )), Pre => ( Total < Integer ' Last - ( ha Érték > 0 , akkor Érték else 1 )), Post => ( Összesen = Összesen ' Régi + ( ha Érték > 0 , akkor Érték else 1 ));

A Globális szempont megmutatja, hogy az eljárás mely globális változókhoz fér hozzá. Ebben az esetben csak az Összes változót használja olvasásra és írásra. A Depends a változók közötti kapcsolatot mutatja: a Total új értéke a régi értékétől és az Érték értékétől függ . Elő  - előfeltétel, megmutatja, hogy a program milyen állapotban legyen az eljárás végrehajtása előtt; ebben az esetben az előfeltétel ellenőrzi, hogy nincs-e túlcsordulás. A Post  utófeltétel, megmutatja a program állapotát az eljárás végrehajtása után.

A rutinok szempontjain kívül más módok is vannak a program állapotára vonatkozó korlátozások megadására, például ellenőrző utasítások:

pragma Assert ( Feltétel );

vagy ciklusinvariánsok:

pragma Loop_Invariant ( Feltétel );

Ugyanakkor jelentős különbségek vannak a szerződések leírásának szintaxisában az első és második generációs SPARK verziók esetében.

A nyelv első generációja speciális megjegyzéseket használt:

-- Természetes szám megkettőzése. eljárás Dupla ( X : in out Natural ); --# pre X < Natural'Last / 2; --# post X = 2 * X~;

Egyenértékű kód a második generációhoz:

-- Természetes szám megkettőzése. eljárás Dupla ( X : in out Natural ) with Pre => X < Natural ' Last / 2 , Post => X = 2 * X ' Old ;

Ellenőrzés

A programok ellenőrzésekor a következő módszereket kell használni:

  • funkciók elő- és utófeltételeinek teljesítésének ellenőrzése;
  • kivételt dobni képes kód hiányának ellenőrzése ;
  • streaming függőségi elemzés, amely a változók inicializálását, valamint a paraméterek és a függvények eredménye közötti kapcsolatot ellenőrzi.

A program helyességének bizonyítására a programozó által használt összes konstrukcióhoz, mint például az elő- és utófeltételekhez ellenőrző utasításkészletek készülnek. A GNATprove ellenőrző bizonyos esetekben önmagában is képes hitelesítési állításokat generálni. Tehát a tömbök vagy típusok határain túllépések, a túlcsordulás és a nullával való osztás ellenőrzése megtörténik.

Továbbá egy sor ellenőrző nyilatkozat és a program kezdeti állapotára vonatkozó adatok, valamint a fejlesztőtől kapott ellenőrizhetetlen nyilatkozatok átkerülnek az automatikus ellenőrző programba. A GNATprove a Why3 platformot [13] és a CVC4, Z3 és Alt-Ergo [14] tesztellenőrző rendszereket használja . Harmadik féltől származó rendszerek, mint például a Coq [14] , szintén használhatók bizonyításra .

Történelem

A SPARK első verzióját (Ada 83 alapján) a Southamptoni Egyetemen hozták létre a brit védelmi minisztérium támogatásával Bernard Carré és Trevor Jennings , a SPADE-Pascal [15] megbízható Pascal programozási rendszer szerzői . Továbbá a következő cégek dolgoztak a nyelv fejlesztésén: Program Validation Limited, Praxis Critical Systems Limited (a továbbiakban Altran-Praxis, Altran) és AdaCore.

2009 elején a Praxis megállapodást kötött az AdaCore-ral, és kiadta a SPARK Pro-t a GPL feltételei szerint [16] . Aztán 2009 júniusában megjelent a SPARK GPL Edition, amelynek célja az ingyenes és tudományos szoftverfejlesztés.

A SPARK 2014 második generációs nyelvi verziójának megjelenését 2014. április 30-án jelentették be [17] .

Lásd még

Jegyzetek

Hozzászólások

  1. 2020-tól csak egy fordító (GNAT) támogatja teljes mértékben az Ada 2012-t, és a SPARK 2014 csak vele használható.

Források

  1. ↑ 1 2 3 4 SPARK – A SPADE Ada kernel (beleértve a RavenSPARK-ot is) . docs.adacore.com . Letöltve: 2020. október 10. Az eredetiből archiválva : 2021. szeptember 7..
  2. ↑ 1 2 SPARK tanúsítvány . www.ada-ru.org . Letöltve: 2020. október 10. Az eredetiből archiválva : 2021. május 13.
  3. Johannes Kliemann. Programellenőrzés a SPARK segítségével – Amikor a kód nem hibásodhat meg (2018). Letöltve: 2020. október 10. Az eredetiből archiválva : 2021. május 16.
  4. Eurofighter Typhoon - Ügyfélprojektek - AdaCore . www.adacore.com . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. szeptember 21.
  5. Be-200 repülőgép . www.ada-ru.org . Letöltve: 2020. október 10. Az eredetiből archiválva : 2021. május 13.
  6. ↑ A GNAT Pro-  t választották az Egyesült Királyság következő generációs ATC rendszeréhez  ? . AdaCore . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. szeptember 21.
  7. Space - AdaCore . www.adacore.com . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. október 21.
  8. Praktikus . Ada-eredetű Skein kriptokód: SPARK , SD Times , BZ Media LLC (2010. augusztus 24.). Az eredetiből archiválva : 2010. augusztus 25. Letöltve: 2010. augusztus 31.
  9. David Hardin, Konrad Slind, Mark Bortz, James Potts, Scott Owens. Nagy biztonságú, nagy teljesítményű hardveralapú, tartományok közötti rendszer  //  Számítógép-biztonság, megbízhatóság és biztonság / Amund Skavhaug, Jérémie Guiochet, Friedemann Bitsch. - Cham: Springer International Publishing, 2016. - P. 102–113 . - ISBN 978-3-319-45477-1 . - doi : 10.1007/978-3-319-45477-1_9 . Az eredetiből archiválva : 2022. január 20.
  10. Genode – Genode operációs rendszer keretrendszer . genode.org . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. október 28.
  11. Muen | SK x86/64-hez . muen.sk. _ Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. október 25.
  12. Henry F. Ledgard, Andrew Singer. Az Ada kicsinyítése (vagy egy szabványos Ada részhalmaz felé)  // Az ACM kommunikációja. - 1982-02-01. - T. 25 , sz. 2 . – S. 121–125 . — ISSN 0001-0782 . - doi : 10.1145/358396.358402 .
  13. Miért3 . miért3.lri.fr. _ Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. október 12.
  14. ↑ 1 2 Alternatív Provers - SPARK Felhasználói kézikönyv 22.0w . docs.adacore.com . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. október 12.
  15. Bernard Carre. Megbízható programozás szabványos nyelveken  (angol)  // High-Integrity Software / CT Sennett. – Boston, MA: Springer US, 1989. – P. 102–121 . - ISBN 978-1-4684-5775-9 . - doi : 10.1007/978-1-4684-5775-9_5 .
  16. A Praxis és az AdaCore bejelentette a SPARK  Pro -t . AdaCore . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. szeptember 21.
  17. A SPARK használata tanúsítási  környezetben . Az AdaCore Blog . Letöltve: 2020. október 10. Az eredetiből archiválva : 2020. október 12.

Irodalom

Linkek