SPRÜHEN SIE (Programmiersprache) FUNKEN

FUNKEN ist eine formell definierte Computerprogrammiersprache, die auf der Programmiersprache von Ada gestützt ist, beabsichtigt, um sicher zu sein und die Entwicklung der hohen Integritätssoftware zu unterstützen, die in Anwendungen und Systemen verwendet ist, wo voraussagbare und hoch zuverlässige Operation entweder aus Gründen der Sicherheit (z.B, Avionik im Flugzeug/Raumfahrzeug, oder aus medizinischen Systemen und Prozesssteuerungssoftware in Kernkraftwerken) oder für die Geschäftsintegrität (zum Beispiel Finanzsoftware für Bankverkehrs- und Versicherungsgesellschaften) notwendig ist.

Es gibt zwei Versionen der FUNKEN-Sprache; ein gestützter auf Ada 83, und anderer auf Ada 95. Die FUNKEN-Sprache besteht aus einer hoch eingeschränkten, bestimmten Teilmenge der Sprache von Ada, die kommentierte meta Information verwendet (in der Form von Anmerkungen von Ada), die gewünschtes Teilverhalten und individuelle Laufzeitvoraussetzungen beschreiben, dadurch fakultativ obligatorischen Gebrauch des Designs durch Vertragsgrundsätze erleichternd, um erwartetes Laufzeitverhalten genau zu formalisieren und gültig zu machen.

Weil die Anmerkungen im Kommentar sind, sind FUNKEN-Programme allgemein auch gültige Programme von Ada und können durch einen passenden Bearbeiter von Ada kompiliert werden.

Die neuste Revision der Durchführung, RavenSPARK, schließt Ravenscar ein, der Profil stark beansprucht, das zum Ziel hat, Parallelität in hohen Integritätsanwendungen zu unterstützen. Die formelle, eindeutige Definition des FUNKENS erlaubt und ermuntert eine Vielfalt von statischen Analyse-Techniken dazu, angewandt zu werden, um Programme ZU BEFEUERN.

Technische Übersicht

SPRÜHEN SIE FUNKEN hat zum Ziel, die Kräfte von Ada auszunutzen, während man versucht, alle seine potenziellen Zweideutigkeiten und Unsicherheit zu beseitigen. FUNKEN-Programme sind durch das Design, das beabsichtigt ist, um eindeutig zu sein, und ihr Verhalten ist erforderlich, durch die Wahl des Bearbeiters von Ada ungekünstelt zu sein.

Diese Ziele werden teilweise durch das Auslassen von einigen von den problematischeren Eigenschaften von Ada (wie uneingeschränkte Parallele stark beanspruchend) und teilweise durch das Einführen von Anmerkungen oder "formellen Anmerkungen" erreicht, die die Anwendungsentwerfer-Absichten und Voraussetzungen für bestimmte Bestandteile eines Programms verschlüsseln.

Die Kombination dieser Annäherungen wird gemeint, um FUNKEN zu erlauben, seine Designziele zu entsprechen, die sind:

  • logische Stichhaltigkeit
  • strenge formelle Definition
  • einfache Semantik
  • Sicherheit
  • ausdrucksvolle Macht
  • verifiability
  • begrenzte Quelle (Zeit und Raum) Voraussetzungen.
  • minimale Laufzeitsystemanforderungen

FUNKEN, der eine 'kommentierte Teilmenge' von Ada, im FUNKEN geschriebene Programme ist, kann durch jeden Bearbeiter von Ada kompiliert werden ('die Teilmenge' von Ada deutet an, dass nicht alle Eigenschaften von Ada verwendet werden können).

'Kommentiert' bedeutet, dass bestimmte Anmerkungen in der Form von Anmerkungen von Ada (d. h., ignoriert durch den Bearbeiter von Ada) durch ein zusätzliches Werkzeug genannt den 'Prüfer' bewertet werden, der gemeint wird, um strenge Erzwingung der über die oben erwähnten Anmerkungen ausgedrückten Voraussetzungen zu sichern, um das entsprechende SPARK/Ada Programm für seine Genauigkeit vor dem Übergang davon zu einem Bearbeiter von Ada zu analysieren, um den Quellcode zu kompilieren.

Werkzeug-Unterstützung

Der "Prüfer" (ein Teil des "FUNKENS Toolset") führt zwei Arten der statischen Analyse durch. Das erste, die zusammengesetzte von Sprachübereinstimmungskontrollen und Fluss-Analyse, Kontrollen, dass das Programm "gut gebildet" wird und mit der in seine Anmerkungen eingeschlossenen Designinformation im Einklang stehend ist. Diese Bühne kann in die Codierphase des Entwicklungsprozesses vereinigt werden. Nach diesen Kontrollen, wie man bekannt, ist die Quelle vom falschen Verhalten frei, und von bedingten und vorbehaltlosen Daten frei, überfluten Fehler (z.B, Gebrauch von uninitialisierten Daten) auf einer weiten System Basis (einschließlich des abstrakten Staates in Paket-Körpern).

Das zweite, fakultative, Analyse ist Überprüfung: Die Vertretung durch den Beweis, dass das FUNKEN-Programm bestimmte angegebene Eigenschaften hat. Das aufrichtigste ist ein Beweis, dass der Code freie Ausnahme ist; das fügt die Ausnahme zur Liste von möglichen durch den FUNKEN beseitigten Fehlern hinzu. Dieser Beweis kann auch verwendet werden, um unzweideutig zu demonstrieren, dass der Code wichtige Sicherheits- oder Sicherheitseigenschaften aufrechterhält. Es kann auch verwendet werden, um Übereinstimmung mit einer passenden Spezifizierung zu zeigen.

Anmerkungsbeispiele

Denken Sie die Unterprogramm-Spezifizierung von Ada unten:

Verfahren Zunahme (X: in Counter_Type);

Was tut dieses Unterprogramm wirklich? In reiner Ada konnte es eigentlich irgendetwas tun - es könnte durch eintausend oder eintausend erhöhen; oder es könnte einen globalen Schalter darauf setzen und den ursprünglichen Wert des Schalters darin zurückgeben; oder es könnte absolut nichts mit überhaupt tun.

Mit dem FUNKEN werden Anmerkungen zum Code hinzugefügt, um Zusatzinformation bezüglich zur Verfügung zu stellen, was ein Unterprogramm wirklich tut. Zum Beispiel können wir die obengenannte Spezifizierung verändern, um zu sagen:

Verfahren Zunahme (X: in Counter_Type);

--# 'stammt X von X ab;

oder

Verfahren Zunahme (X: in Counter_Type);

--# 'globaler Graf;

--# 'leitet ab

--# zählen 'vom Graf, X

&

--# X 'davon;

Die erste von diesen Spezifizierungen sagt uns, dass das Verfahren nicht aktualisiert oder von irgendwelchen globalen Variablen lesen, und dass der einzige Datenartikel, der im Rechnen des neuen Werts von X verwendet ist, X selbst ist. Der zweite Satz von Anmerkungen sagt uns, dass das eine globale Variable genannt "" in demselben Paket wie verwenden wird, und dass der exportierte Wert dessen von den importierten Werten abhängig ist und, aber dass exportierter Wert dessen von keinen Variablen überhaupt abhängt - wird es einfach von unveränderlichen Daten abgeleitet.

Wenn der Prüfer dann auf der Spezifizierung und dem entsprechenden Körper eines Unterprogramms geführt wird, wird es den Körper des Unterprogramms analysieren, um ein Modell des Datenflusses aufzubauen. Dieses Modell wird dann dagegen verglichen, was durch die Anmerkungen angegeben worden ist und irgendwelche Diskrepanzen dem Benutzer berichtet haben.

Wir können weiter diese Spezifizierungen erweitern, indem wir verschiedene Eigenschaften behaupten, die entweder halten müssen, wenn ein Unterprogramm (Vorbedingungen) genannt wird oder das halten wird, sobald die Ausführung des Unterprogramms (Postbedingungen) vollendet hat. Zum Beispiel konnten wir den folgenden sagen:

Verfahren Zunahme (X: in Counter_Type); --# 'stammt X von X ab;

--# 'pre X ist nur auf sich zurückzuführen gewesen, aber dass vorher genannt wird, muss ausschließlich weniger sein als der letzte mögliche Wert seines Typs, und der später dem Anfangswert plus ein - nicht mehr und nicht weniger gleich sein wird.

Überprüfungsbedingungen

Der Prüfer kann gebeten werden, eine Reihe von Überprüfungsbedingungen oder VCs zu erzeugen. VCs werden verwendet, um zu versuchen, bestimmte Eigenschaften zu gründen, halten für ein gegebenes Unterprogramm. An einem Minimum wird der Prüfer VCs erzeugen, der versucht festzustellen, dass die folgenden Laufzeitfehler innerhalb eines Unterprogramms nicht vorkommen können:

  • Reihe-Index außer Reichweite
  • Typ-Reihe-Übertretung
  • Abteilung durch die Null
  • numerische Überschwemmung.

Wenn eine Postbedingung zur Spezifizierung hinzugefügt wird, wird der Prüfer auch VCs erzeugen, die verlangen, dass der Benutzer zeigt, dass die Postbedingung für alle möglichen Pfade durch das Unterprogramm halten wird.

Entladung dieser Probeverpflichtungen wird mit dem SPATEN Simplifier (ein automatisierter Lehrsatz prover) und der SPATEN-Probekontrolleur (ein manueller Lehrsatz prover durchgeführt, für diejenigen verwendet, die VCs sind, zu dornig für Simplifier, um sich automatisch zu entladen).

Geschichte

Die erste Version des FUNKENS (gestützt auf Ada 83) wurde an der Universität von Southampton (mit der Verteidigungsministerium-Bürgschaft des Vereinigten Königreichs) von Bernard Carré und Trevor Jennings erzeugt. Nachher wurde die Sprache progressiv erweitert und zuerst von Program Validation Limited und dann von Praxis Critical Systems Limited raffiniert. 2004 hat Praxis Critical Systems Limited seinen Namen in Praxis High Integrity Systems Limited geändert. Im Januar 2010 ist die Gesellschaft Altran Praxis geworden.

Anfang 2009 hat Praxis eine Partnerschaft mit AdaCore gebildet, und hat "FUNKEN Pro" in Form vom GPL veröffentlicht. Dem wurde im Juni 2009 durch den FUNKEN GPL Ausgabe 2009 gefolgt, die auf die GLASSCHLACKE und akademischen Gemeinschaften gerichtet ist.

Im Juni 2010 hat Altran Praxis bekannt gegeben, dass die FUNKEN-Programmiersprache in der Software von amerikanischem MondprojektcubeSat, angenommen verwendet würde, 2015 vollendet zu werden.

Im August 2010 hat Rod Chapman, Hauptingenieur von Altran Praxis, Strang, einen von Kandidaten für SHA-3 im FUNKEN durchgeführt. Er hat die Leistung des FUNKENS und C Durchführungen vergleichen wollen. Nach der sorgfältigen Optimierung hat er geschafft, die FUNKEN-Version nur um ungefähr 5 bis 10 % langsamer zu haben, als C. Die spätere Verbesserung zum mittleren Ende von Ada in GCC (durchgeführt von Eric Botcazou von AdaCore) hat die Lücke mit dem FUNKEN-Code geschlossen, der den C in der Leistung genau vergleicht.

Siehe auch

Referenzen

Links


Pontevedra / Priester von Robert
Impressum & Datenschutz