Was macht Ada zur Sprache der Wahl für die sicherheitskritischen Systeme der ISS?

Wir wissen aus guter Quelle , dass Ada zumindest auf der US-Seite der Internationalen Raumstation weit verbreitet für "sicherheitskritische Software" verwendet wird.

Welche Aspekte von allen möglichen Sprachen zur Auswahl machen Ada zur Wahl der NASA für eine so kritische Anwendung? Wie könnte die Gewichtung zwischen Legacy-Gründen und intrinsischer Eignung aussehen?

Ada war die Sprache des Verteidigungsministeriums. Nachdem es entwickelt wurde, ist es eine Schande, es nicht zu verwenden. Es hat starke Echtzeitelemente, bleibt aber auf hohem Niveau. Ich bin vielleicht voreingenommen, es ist meine Lieblingssprache. (obwohl das vielleicht daran liegt, dass ich seit über zwei Jahrzehnten nichts mehr darin geschrieben habe)
@JCRM: Dann können Sie vielleicht eine Antwort schreiben, die einige Aspekte von Ada beschreibt, die es für unternehmenskritische Systeme geeignet machen, im Gegensatz zu beispielsweise C oder Java, nein? :-) Als Softwareentwickler bin ich sehr daran interessiert, von jemandem zu hören, der Erfahrung mit der Sprache hat (im Gegensatz zum Lesen des Wikipedia-Artikels…).
Ich weiß nicht genug über die Systemanforderungen der ISS und habe nur alte Erinnerungen an Ada, daher beschränkt sich mein Beitrag auf (hoffentlich) hilfreiche Kommentare. Ich vermute stark, dass es das "Sie müssen in Ada schreiben" des Verteidigungsministeriums war, das es in die ISS brachte; Sprachwechsel tut man in sicherheitskritischen Systemen nicht ohne SEHR guten Grund.
Frage mich, warum ada auch, ist Java nicht schneller?
@repluser: Ada ist mehrere Jahre schneller als Java, in dem Sinne, dass bei der Entwicklung der ISS Ada existierte und Java nicht. Die Alternativen wären damals wahrscheinlich Modula-3 oder Mesa gewesen, oder vielleicht Eiffel (aber Eiffel war damals kein internationaler Standard).
@repluser: ... und selbst als Java existierte, war es nicht so streng definiert wie jetzt. Die exakte Spezifikation einer Programmiersprache festzulegen ist schwierig . Und je größer eine Sprache ist, desto nützlicher ist sie, aber auch schwieriger, sie genau zu spezifizieren. Die Threading-Bibliothek von Java ist besonders knifflig.
@JörgWMittag Nicht nur das, Java steckte noch in den Kinderschuhen - es hatte bis 2001 mit RTSJ 1.0 nicht einmal eine Echtzeit-Spezifikation, und es ist immer noch nicht für sicherheitskritische Anwendungen geeignet, eine Spezifikation für die (JSR-302) wird seit 2006 herumgeschmissen und befindet sich derzeit im vierten Entwurf.
Warum überrascht dich Ada?
Interessant. Obwohl die Geschichte sagt, dass es Ende der 70er Jahre entwickelt wurde, würde ich schwören, dass ich Ada zum ersten Mal erwähnt habe, als ich mit RCA Camden Labs an Hardware für Skylab arbeitete, ca. 1974. Dann, als ich Ende der 70er Jahre mit IBM in Rochester MN arbeitete, Ich habe einige von Adas Konzepten zur Programmstrukturierung (insbesondere Ausnahmebehandlung) für die Verwendung in IBMs System/38 "ausgeliehen". Ich war davon ausgegangen, dass die Sprache in den 1980er Jahren ihren Lauf genommen hatte.

Antworten (6)

Dieser Wikibooks-Link listet seine Stärken auf, von denen einige sind:

  • Ein extrem starkes, statisches und sicheres Typsystem, das es dem Programmierer ermöglicht, leistungsstarke Abstraktionen zu konstruieren, die die reale Welt widerspiegeln, und dem Compiler ermöglicht, viele logische Fehler zu erkennen, bevor sie zu Fehlern werden.
  • Modularität, wobei der Compiler direkt die Konstruktion sehr großer Softwaresysteme aus Quellen verwaltet.
  • Ausblenden von Informationen; Die Sprache trennt Schnittstellen von der Implementierung und bietet eine feinkörnige Kontrolle über die Sichtbarkeit.
  • Lesbarkeit, die Programmierern hilft, Code zu überprüfen und zu verifizieren. Ada bevorzugt den Leser des Programms gegenüber dem Schreiber, denn ein Programm wird einmal geschrieben, aber viele Male gelesen. Zum Beispiel verbietet die Syntax alle mehrdeutigen Konstrukte, so dass es keine Überraschungen gibt, in Übereinstimmung mit dem Gesetz des geringsten Erstaunens des Tao der Programmierung. (Einige Ada-Programmierer sprechen nur ungern über Quellcode, der oft kryptisch ist; sie bevorzugen Programmtext, der englischer Prosa nahe kommt.)
  • Portabilität: Die Sprachdefinition erlaubt es Compilern, sich nur auf wenige kontrollierte Arten zu unterscheiden, und definiert ansonsten die Semantik von Programmen sehr genau; Infolgedessen ist der Ada-Quelltext über Compiler und Zielhardwareplattformen hinweg sehr portabel. Meistens kann das Programm ohne Änderungen neu kompiliert werden.
  • Standardisierung: Standards sind seit der Gestaltung der Sprache in den späten 1970er Jahren ein Ziel und ein herausragendes Merkmal. Der erste Standard wurde 1980 veröffentlicht, nur 3 Jahre nach Beginn des Designs. Ada-Compiler unterstützen alle genau dieselbe Sprache; der einzige Dialekt, SPARK, ist lediglich eine annotierte Teilmenge und kann mit einem Ada-Compiler kompiliert werden.

Der Punkt der Lesbarkeit ist ein wichtiger Punkt, da die Lebensdauer eines Softwareprodukts nicht endet, wenn Sie es fertig programmiert/getestet haben. Der größte Aufwand (in Zeit und Geld) besteht in der Wartung dieses Produkts. Für ein langes Projekt wie die ISS erscheint es daher angemessen, eine Sprache zu verwenden, die entwickelt wurde, um bei dieser Aufgabe zu helfen, indem Fehler und allgemeine Mehrdeutigkeiten minimiert werden.

Diese Antwort vergleicht es mit C und C++:

Ada hat eine Reihe von Sicherheitsfunktionen in die Sprache integriert. (Vergleichen Sie mit C, wo der Standard zwölf Seiten hat, die die in die Sprache eingebauten undefinierten Verhaltensweisen zusammenfassen. Vergleichen Sie mit C++, wo die undefinierten Verhaltensweisen so zahlreich sind, dass sie sie nicht einmal auflisten.) Diese Ada-Sicherheitsfunktionen können von Bedeutung sein Leistungskosten, und aus diesem Grund bietet Ada auch die Möglichkeit, diese Sicherheitsfunktionen selektiv zu deaktivieren.

Beachten Sie, dass es möglich ist, das gleiche Sicherheitsniveau mit C oder C++ zu erreichen, wenn Sie eine Teilmenge der C- oder C++-Sprachen verwenden und sich auf einen Styleguide festlegen, aber in Ada kommt es mit der Sprache.

EDIT (Danke JCRM): Der erste Link spricht auch über die Unterstützung für Low-Level-Programmierung:

Ada verfügt über leistungsstarke Spezialfunktionen, die die Low-Level-Programmierung für Echtzeit-, sicherheitskritische und eingebettete Systeme unterstützen. Zu diesen Funktionen gehören unter anderem Maschinencode-Einfügungen, Adressarithmetik, Low-Level-Zugriff auf den Speicher, Kontrolle über die bitweise Darstellung von Daten, Bitmanipulationen und ein wohldefiniertes, statisch beweisbares Concurrent-Computing-Modell namens Ravenscar Profile.

Wo ich arbeite, verwenden wir tatsächlich die Adressarithmetik und die Low-Level-Memory-Funktionen, um verschiedene Konfigurationsdaten zu laden, ohne das Produkt jedes Mal neu kompilieren zu müssen, was viel Zeit spart.

Kommentare sind nicht für längere Diskussionen gedacht; diese Konversation wurde in den Chat verschoben .
Ich lehne den Vorschlag ab, dass es "möglich ist, das gleiche Sicherheitsniveau mit C oder C++ zu erreichen, wenn Sie eine Teilmenge der C- oder C++-Sprachen verwenden". Die Verwendung einer Teilmenge vermeidet einige der offensichtlichen Fallstricke und Unsicherheiten, die in C/C++ eingebaut sind, und hebt sie somit auf ein minimales Maß an Vernunft. Im Vergleich dazu wurde Ada mit Sicherheit als zentrales Designziel entwickelt. Für ernste Dinge. Wissen Sie, Flugzeuge und Bomben und so. Im Gegensatz zu noch einem anderen Compiler, Compiler und so. Ich kann mich nicht erinnern, wie oft ein Compiler-Fehler in Ada einen Fehler aufgedeckt hat, der in C ein Core-Dump gewesen wäre.
@uhoh Diese Antworten bei Stackoverflow sind voller Unsinn. Ich habe an mehreren Raumfahrzeugen gearbeitet, deren Flugsoftware C++-Vorlagen verwendet. Was man nicht tun möchte, ist die Verwendung von Funktionen, die nach der Initialisierungszeit dynamisch Speicher vom Heap zuweisen, Ausnahmen auslösen/abfangen, Systemfunktionen aufrufen oder Recursing/Looping ohne Grenzen verwenden. Ein Großteil der C++-Standardbibliothek hat keine solchen algorithmischen Einschränkungen. Das hat nichts mit Vorlagen im Allgemeinen zu tun.

Zeitliche Koordinierung. Ada wurde in den 1970er und 80er Jahren mit der Absicht entwickelt, die Fülle von Sprachen zu ersetzen, die in den Echtzeitsystemen des US-Verteidigungsministeriums verwendet werden. Die NASA (und auch Organisationen aus Europa) waren aktive Teilnehmer. Das Verteidigungsministerium beauftragte Ada 1991 mit allen wichtigen Entwicklungen. Die NASA tat das Gleiche. Die Internationale Raumstation war bis dahin ein Papierkonzept. Genau mit dem Inkrafttreten des Ada-Mandats begann es Realität zu werden.

Das Verteidigungsministerium ließ 1997 sein Ada-Mandat fallen. Die NASA tat dasselbe. Wenn die ISS heute gebaut würde, wäre ihre Flugsoftware höchstwahrscheinlich nicht in Ada.


Warum also Ada? Ada wurde geschaffen, um eine Reihe von Problemen anzugehen. Einer war die große Anzahl von Sprachen, die beim Verteidigungsministerium verwendet wurden. Ein weiterer Grund war der wahrgenommene Mangel an Sicherheit in diesen Sprachen, insbesondere in Bezug auf Echtzeitsysteme und eingebettete Systeme. Ada hat einige Funktionen bereitgestellt, die in anderen Sprachen fehlten.

Es gibt viele Gründe, warum Ada zu einer Nischensprache geworden ist. Einer davon ist, dass die übermäßige Strenge und Ausführlichkeit der Sprache einer Allzwecksprache im Weg stehen. Ein weiteres Problem war, dass die Ada-Community beim Übergang von Großrechnern zu Minicomputern zu Desktop-Computern den Anschluss verpasste. Die Sprachen an der Spitze dieser Übergänge (C und C++) bleiben weit verbreitet. Auch die Ada-Community hat den Anschluss an die Freie-Software-Bewegung verpasst. Der erste kostenlose Ada-Compiler kam erst 1995 heraus, und diese Veröffentlichung war noch nicht vollständig. Da war es zu spät.

Obwohl ich diese Antwort positiv bewertet habe, weil ich denke, dass sie die Hauptursache identifiziert, würde sie meiner Meinung nach verbessert, indem die Gründe erwähnt würden, warum die NASA Ada gegenüber anderen damals verfügbaren Alternativen bevorzugt hat. Es war nicht völlig willkürlich.
Wie bei den anderen Antworten beantwortet dies, was es geeignet gemacht hat , aber nicht den zweiten Teil der Suche, warum es immer noch verwendet wird.
@JackAidley: Gab es Alternativen? Vielleicht Modula-3 oder Mesa?
Das Warum ist ziemlich einfach: Flugsoftware ist nicht wie andere Software. Sie ändern nichts, wenn Sie es nicht unbedingt müssen. Ich würde vom Dach des Gebäudes 1 geschmissen werden, wenn ich ernsthaft um eine vollständige Portierung der Flugsoftware in eine andere Sprache bitten würde.
@Tristan - Ich habe eine Idee für einen Aprilscherz nächstes Jahr...
". Wenn die ISS heute gebaut würde, wäre ihre Flugsoftware höchstwahrscheinlich nicht in Ada." Es wäre in Java oder Python, wie alles andere.
@QuoraFeans So sehr ich Python auch liebe, es ist noch nicht ganz auf der Ebene von echtzeit-/sicherheitskritischen Anwendungen. Java mit seiner schwergewichtigen Laufzeitumgebung ist im Wesentlichen von Embedded-Controls-Anwendungen ausgeschlossen. Es ist sehr wahrscheinlich, dass der Code in C (vielleicht C ++) endet und so etwas wie die MISRA-Standards verwendet, die die Automobilindustrie verwendet (oder einen der Millionen ähnlicher Standards). Diese Sprachen sind aus vielen sehr guten Gründen immer noch König im Embedded-Bereich.
@Tristan, genau. ist einfach nicht in der/den Antwort(en)
@JCRM - eine andere Art, es auszudrücken, ist "Paradigmen kommen und gehen, aber Legacy-Code ist für immer". Es ist nicht nur Flugsoftware – ich kenne mindestens ein Auftragsverwaltungssystem eines Unternehmens, das noch COBOL aus den 70er Jahren verwendet, weil das Risiko, es auf eine modernere Sprache zu portieren, einfach zu hoch ist.
Die Ada-Community hat beim Übergang von Mainframes zu Desktops den Anschluss verpasst ? Nun, es gibt Boote, die verpasst werden, und Boote, an deren Fang einige Leute kein Interesse haben! Von Natur aus war Ada immer eine Nischenmarktsprache und niemals Mainstream - die meisten Apps brauchen seine Strenge nicht. Wie auch immer, die Versorgung eines Mainstream-Marktes erfordert einen High-Tech-Support-Overhead, da die Kundenunternehmen nur über allgemeine Programmierkenntnisse (dh C/C++/Java) verfügen. Da ist kein Geld drin. Es ist besser, Ada kritischen Branchen vorzustellen – alle mit internem Know-how – damit der Aufwand für den technischen Support minimal ist. $
@Trunk - Das Problem bei dieser Sichtweise ist, dass davon ausgegangen wird, dass Ada zum Erstellen zeitkritischer / sicherheitskritischer Systeme benötigt wird und dass andere Sprachen nicht ausreichen. Das ist ganz und gar nicht der Fall.
@David Hammen – Ich habe versucht, das Geschäftsmodell der Ada-Industrie darzustellen, wie ich es gelesen habe. Ich hoffe, dies deutete nicht darauf hin, dass ich damit einverstanden war, oder noch weniger der enge sozioökonomische Horizont, der dadurch suggeriert wurde.

Ich erinnere mich, dass ich Ende der 90er Jahre Informatikkurse besuchte. Der Professor für CS erklärte unserer mageren Gruppe von CS-Majors, dass er uns C beibringen würde und nicht COBOL oder Ada, weil es im Allgemeinen nützlicher wäre. Zu dieser Zeit waren sie die wichtigsten Programmiersprachen-Colleges, die damals unterrichtet wurden (jede größere Universität in der Region mit einem Informatik-Abschluss lehrte einen dieser beiden). Warum sollten sie ältere Sprachen unterrichten? Weil Sie immer noch einen Job bekommen könnten, der Code in ihnen schreibt. Das war ungefähr zu der Zeit, als die ISS gebaut wurde.

Der Grund, warum Ada entstand, war, dass sie geschäftskritische Software brauchten, die zuverlässig war, und Ada wurde buchstäblich dafür gemacht, die Rechnung zu erfüllen. Die NASA hat immer noch einen der teuersten Softwarefehler der Geschichte (zurück in die dunklen Zeiten der Lochkarten )

Ein durch eine Lochkarte eingeführter Fehler stellte sich als einer der teuersten Softwarefehler der Geschichte heraus, als er 1962 zur Zerstörung des Raumschiffs Mariner 1 führte (Kosten 1962: 18,5 Millionen Dollar; Kosten in heutigen Dollar: 135 Millionen Dollar). ), bevor es seine Mission erfüllen konnte, an der Venus vorbeizufliegen.

Allerdings gab es einen fatalen Fehler in der Software dieses Leitsystems: Als die Gleichungen, die zur Verarbeitung und Übersetzung von Tracking-Daten in Fluganweisungen verwendet wurden, auf Lochkarten kodiert wurden, wurde ein entscheidendes Symbol weggelassen: oft ein Überstrich oder Überstrich in den Folgejahren mit einem Bindestrich verwechselt. Das Fehlen dieses Überbalkens führte im Wesentlichen dazu, dass der Leitcomputer eine ansonsten normale Bewegung im Raumfahrzeug falsch kompensierte.

Adas Hauptmerkmal ist Stabilität

Mit seinem Schwerpunkt auf soliden Software-Engineering-Prinzipien unterstützt Ada die Entwicklung von Anwendungen mit hoher Integrität, einschließlich solcher, die nach Sicherheitsstandards wie DO-178B und Sicherheitsstandards wie den Common Criteria zertifiziert werden müssen. Starke Typisierung bedeutet beispielsweise, dass auf Daten, die für einen bestimmten Zweck bestimmt sind, nicht über unangemessene Vorgänge zugegriffen wird; Fehler wie das Behandeln von Zeigern als ganze Zahlen (oder umgekehrt) werden verhindert. Und die Überprüfung der Array-Grenzen von Ada verhindert Pufferüberlauf-Schwachstellen, die in C und C++ üblich sind.

Die NASA hat versucht, ihre eigene Ada-ähnliche Sprache namens (ich erfinde das nicht) HAL/S zu erstellen , die das Space Shuttle verwendet hat, und ... nicht viel mehr. Die gesamte Bodenausrüstung würde bis dahin mit Ada enden ( Standards! )

Ein Vorschlag für eine bodengestützte NASA-Standardversion von HAL mit dem Namen HAL/G für "Ground" wurde vorgeschlagen, aber das bevorstehende Auftauchen der bald Ada genannten Programmiersprache trug dazu bei, dass Intermetrics kein Interesse daran hatte, diese Arbeit fortzusetzen.

Oh, HAL/S hat noch ein weiteres kleines Problem

Die Schwäche von Hal/S besteht darin, dass es nur verfügbar ist, wenn es auf Mainframe-Computern der Serie IBM 360/370 gehostet wird. Intermetrics hat Hal/S auch auf Modcomp IV und Classic sowie auf Data General Eclipse-Minicomputern gehostet. Die Modcomp-Implementierung wird jedoch nur von JPL verwendet, und die Eclipse-Entwicklung wird nicht mehr verwendet, da Adressraumbeschränkungen die Kompiliergeschwindigkeit auf etwa 30 Zeilen/Minute reduzieren.

Daher ist es nicht verwunderlich, dass es in den frühen 90er Jahren (als PCs auf dem Vormarsch waren) viel billiger war, mehr Standard-Computergeräte zu beschaffen (ich wette, IBM konnte Ada auf mehr Standardhardware ausführen, da sie bereits lieferten) . Astronauten mit Thinkpads zu dieser Zeit ). Interessante Tatsache: Thinkpads mit Linux werden als Schnittstelle zum Stationscomputer verwendet

"Es waren nur die Anwendungsanforderungen", sagte er und beschrieb, wie die Laptop-Software, die in diesen frühen Tagen mit den Befehls- und Kontrollsystemen der Station kommunizierte, so konzipiert war, dass sie auf einem Linux-basierten Betriebssystem ausgeführt werden konnte.

Im Gegensatz dazu fuhr der Rover (Anfang der 2000er) auf C

Es führt 2,5 Millionen C-Zeilen auf einem RAD750-Prozessor aus, der von BAE hergestellt wird.

Das ist bei weitem nicht der teuerste Fehler. Der Mars Climate Orbiter kostete 1998 327,6 Millionen Dollar. Er stürzte ab, weil imperiale und metrische Einheiten gemischt wurden. Obwohl es sich technisch gesehen letztendlich nicht um einen Softwarefehler handelte - das Problem wurde vor dem Ausfall bemerkt, nur die Ingenieure "befolgten nicht die Regeln zum Ausfüllen [des] Formulars, um ihre Bedenken zu dokumentieren". Das war also wirklich ein Bürokratiefehler, genau wie Challenger, wo Ingenieure die Bürokratie auch im Voraus gewarnt hatten.
Das Overbar-Ding war kein Fehler in der Programmiersprache, sondern ein Fehler in der Spezifikation. (Quelle: Scott Manley, glaube ich), das eigentliche Problem war, dass die Spezifikation hätte sagen sollen, dass dieser Wert gemittelt werden sollte, daher der Overbar, aber die Spezifikationsüberprüfung und die Codeüberprüfung haben nicht erkannt, dass es sich um einen Durchschnitt handeln sollte Wert. Nun, eine Sprache mit geringerer kognitiver Belastung könnte den Programmierer leichter bemerken, aber dieser spezielle Vorfall wurde nicht durch eine Sprache verursacht.
"Der Informatikprofessor war ein jovialer Typ" - sprechen Sie über eine Sprache mit 1000 Dialekten, die jeweils einen eigenen Compiler benötigen! Aus diesem Grund wurde Ada entwickelt: Um die Hunderte von fröhlichen Dialekten zu ersetzen. Kein Wunder, dass er dir C beigebracht hat: Schlechte Gefühle, dass Ada seine Lieblingssprache ersetzt hat!
@davidbak rimshot BIS es so eine Sprache gibt ...
@Machavity: Oh ja! JOVIAL ist etwas berühmt, weil die Avionik-Software des B2 Spirit in JOVIAL geschrieben wurde. Die Air Force beauftragte dann später eine Firma namens Semantic Designs (deren Chefingenieur eigentlich sehr aktiv im Bereich Software Engineering und Stack Overflow ist ) , einen Übersetzer von JOVIAL nach C zu erstellen , was sie tun konnten, ohne jemals Zugang zum Quellcode zu haben .
HAL/S ging Ada um einiges voraus. Einer der drei Verlierer des DoD-Wettbewerbs, der schließlich zu Ada führte, war von Intermetrics. Ihr Vorschlag war im Wesentlichen ein HAL/S-Derivat. Dass Intermetrics HAL/S entworfen und implementiert hat, hat ihren Vorschlag stark beeinflusst.
Interessanterweise läuft Curiosity auf Code, der in C geschrieben ist. Es sollte jedoch beachtet werden, dass ein SW-Fehler entweder behoben werden kann (SW-Updates) oder im Extremfall zum Verlust der Mission, aber nicht zum Verlust des Lebens führen würde . Womit fuhr die Trägerrakete, frage ich mich?
Ich glaube nicht, dass es richtig ist, dass die Bodenausrüstung des Shuttle-Programms Ada verwendete. Weder das Mission Control Center noch der Shuttle Mission Simulator. Das Launch Processing System verwendete eine Sprache namens GOAL. Ada wurde von der NASA im ISS-Programm eingesetzt, nicht im Shuttle.

Von der Webseite :

AdaCore-Tools können verwendet werden, um Verifizierungsziele zu erreichen, einschließlich der Einhaltung von Codierungsstandards , Codegenauigkeit ( Vermeidung von Fehlern wie Pufferüberlauf, Ganzzahlüberlauf und Verweise auf nicht initialisierte Variablen) und strukturelle Abdeckungsanalyse bis hin zu MC/DC . Spezialisierte High-Assurance-Laufzeitbibliotheken, darunter eine, die das Ravenscar-Tasking-Profil implementiert, sind einfach genug, um in qualifizierte Systeme integriert zu werden, aber ausdrucksstark genug, um die erforderliche Funktionalität für harte Echtzeit- Weltraumsoftware zu unterstützen. Qualifizierungsmaterial für die Laufzeitbibliotheken kann für den ECSS-Standard entwickelt und an neue Projektkontexte angepasst werden.

C und C++ verhindern diese Fehler nicht (abgesehen von kostspieligen Addons ), und Java ist nicht hart in Echtzeit (abgesehen von nicht standardmäßigen VMs ).

Wenn Leben auf dem Spiel stehen, ist es am besten, Laufzeitfehler und Verzögerungen per Design auszuschließen :

with Ada.Text_IO; use Ada.Text_IO;

procedure Learn is

   subtype Alphabet is Character range 'A' .. 'Z';

begin

   Put_Line ("Learning Ada from " & Alphabet'First & " to " & Alphabet'Last);

end Learn;

Hier kann Alphabet keinen anderen Wert als A bis Z enthalten. Diese ziemlich einzigartige Sprachfunktion half unter anderem einem Team von Studenten, die CubeSat-Mission 2013-2015 abzuschließen :

Als ein Beispiel für Ada im Grundstudium haben Studenten des Vermont Technical College in den USA die SPARK-Sprache (eine formal analysierbare Untergruppe von Ada) verwendet, um die Software für einen CubeSat-Satelliten zu entwickeln, der kürzlich eine erfolgreiche zweijährige Orbitalmission absolviert hat. SPARK wurde aufgrund seiner Zuverlässigkeitsvorteile ausgewählt. Die Studenten hatten keine Vorkenntnisse in Ada, SPARK oder formalen Methoden, konnten sich aber schnell einarbeiten.

Von den zwölf CubeSats von akademischen Einrichtungen, die in den Start einbezogen wurden, war der von Vermont Tech der einzige, der seine Mission erfüllte. Viele der anderen endeten aufgrund von Softwarefehlern. Die Vermont Tech Group führt ihren Erfolg auf den SPARK-Ansatz zurück, der es ihnen beispielsweise ermöglichte, formal die Abwesenheit von Laufzeitfehlern nachzuweisen.

Kommentare sind nicht für längere Diskussionen gedacht; diese Konversation wurde in den Chat verschoben .

Welche Aspekte von allen möglichen Sprachen zur Auswahl machen Ada zur Wahl der NASA für eine so kritische Anwendung? Wie könnte die Gewichtung zwischen Legacy-Gründen und intrinsischer Eignung aussehen?

  • Ada ist eine Sprache , die genau für diese Art von Situation entwickelt wurde , dh fehlerintolerante Echtzeit- und (häufig) eingebettete Systeme, die zur Steuerung kritischer Geräte oder Prozesse verwendet werden

  • Adas Entwicklung war von Anfang an viel konzentrierter und strenger gesteuert . Sowohl seine Urheber als auch seine Bewerter waren handverlesene Experten auf dem Gebiet der Sprachentwicklung mit einem starken Pflichtgefühl sowohl ihrem Beruf als auch dem Ada-Projekt gegenüber. So wie die Werte der Westküste Java durchdringen, gab die selbstlose Bescheidenheit von Ichbiah, Dewar und Taft für Ada einen Ton an, der immer noch vorherrscht und einer Organisation wie der NASA gefallen muss.

  • Ada verfügt über eine formal definierte Subset-Sprache namens SPARK, die eine einfache Zuordnung eines formal verifizierten Systemdesigns zu seinem Code ermöglicht

  • Ada ist eine der schnellsten Sprachen überhaupt, außerdem mit parallelen Prozessoren

  • Die Ada-Industrie (Unternehmen wie AdaCore, Altran, Green Hills, Wind River usw. usw.) hat zahlreiche Support-Tools für die kritische Systementwicklung in Ada/SPARK entwickelt

  • Es gibt nur wenige fähige Alternativsprachen zu Ada

  • Alternative Sprachen wie formal definiertes C verfügen nicht über die gleiche Erfahrungstiefe oder Unterstützung wie Ada/SPARK

Ich habe keine Ahnung, was die detaillierten Systemanforderungen waren oder wie streng die Ausschreibungsrichtlinien in Bezug auf die Gewichtung von Alt- und Eigeneignung waren. Aber es erscheint mir vernünftig, dass Ada/SPARK in beiden Kategorien gut abschneiden würden. Legacy-Faktoren sollten Dinge beinhalten wie

  • Die NASA war ein ursprünglicher Sponsor des Ada-Projekts und hatte es von Anfang an auf früheren Systemen verwendet

  • Wahrscheinlich größere Vertrautheit des Systembauunternehmens mit Ada/SPARK, Know-how bei der effektiven Bereitstellung seiner Konstrukte für die Anforderungen des neuen kritischen Systems

  • Wahrscheinlich bestehende Nutzung von Ada/SPARK durch Subunternehmer, zB eingebettete Systeme für Zusatzgeräte wie Radar, Röntgengeräte usw., für das Projekt und Datenschnittstellen zwischen Haupt- und Subsystemen

Ada ist SGMLvon Programmiersprachen (und Java/C# ist XML). Beide sind in einer neuen Basis für eine Komplettlösung eingebaut. Und beide wurden aufgrund ihrer Komplexität und Kuriosität nicht populär. (Minderheit kennt SGML, aber jeder versteht HTML: Einfachheit ist Stärke.) Wir lernten Ada 1991 und liebten es, obwohl wir von Modula-3 kamen und nicht von Junk Pascal oder C. (Ganz zu schweigen von Assembler.) Ada sah perfekt eingebaut aus Allgemein und im Detail. Aber keiner von uns hat es benutzt, weil die einzige Ada-Umgebung für IBM 360 (oder einen russischen Klon davon) war und viele Jahre lang kein Ada-Compiler für PC erschienen ist. Und es wurde ein "glänzender Diamant in einer Vitrine", theoretisch perfekt, aber unantastbar. Wir haben Code für Sieve of Eratosthenes geschrieben, aber es gab keine Ressourcen, um ihn mit log(log(10e9))-Aufgaben auszuführen. (An diesem Tag zählten sie RAM in Hunderten von KBs. ) Inzwischen kamen gute C++-Umgebungen (mit brauchbaren Klassenbibliotheken!) und die meisten Programmierer verwendeten sie als primäre Plattform, bis Java ein Jahrzehnt später erschien. Und auch für Java gab es keine guten Entwicklungstools, aber brauchbare und auf billigen PCs lauffähige.

Ich habe 1989 ADA auf Sun Workstations kompiliert. Bis 1991 gab es viele Versionen für viele Plattformen.
Ich habe 1988 Ada für Motorola 68000/68020 geschrieben und auf einem VAX crosskompiliert. Ein paar Jahre später schrieb ich Ada für einen Fließkomma-DSP von TI, wiederum crosskompilierend auf einem VAX. @JCRM ist absolut richtig: Bis 1991 gab es viele Optionen für viele Plattformen.
Ada ist weit, weit weniger komplex als C++. Sogar frühes C++. Nicht nur ist jede Behauptung, warum es "nicht populär geworden ist", persönliche Spekulation, die nicht als Tatsacheninformation präsentiert werden sollte, sondern diese spezielle ist nachweislich falsch.
Als grobes Maß, meine alte grüne Ada83 LRM hat ungefähr 250 Seiten. Dieser Arbeitsentwurf des ISO-C++-Standards umfasst 1440 Seiten.
AdaCore könnte sagen, dass das heutige Ada immer mehr dem HTML 5 der Welt der High-Integrity-Systeme ähnelt – es kann auf zahlreichen Betriebssystemen (einschließlich iOS und Android) (quer) kompiliert werden und verfügt über so viele schillernde Tools zum gründlichen Überprüfen von Code , Schnittstellen zu Systemen in anderen wichtigen Sprachen, APIs für GUIs, XML- und Skript-Handler für Validierungstest-Frameworks, einen sicheren Webserver usw. Die einzige Trennung zu HTML 5 ist das lieblose Erscheinungsbild (aber nicht die Funktionalität) seiner IDE, GPS . . .
Bis 1985 lieferte Alsys kommerziell einen vollständig validierten (die offizielle Testsuite bestanden) Ada-Compiler für den IBM PC/AT unter DOS aus. Die vollständige Sprache einschließlich Nebenläufigkeit. Ich bin mir nicht sicher, was Sie mit log(log(10e9))-Aufgaben gemeint haben, da dies überhaupt nicht zu viele Aufgaben sind, aber eine übliche Demo für Alsys Ada bestand darin, eine Heat-in-Pipe-Simulation durch Entspannung mit jeder Charakterposition auszuführen auf dem Bildschirm (80x25), unterstützt durch eine Ada-Aufgabe, die sich mit ihren vier Nachbarn trifft.
@TED ​​nicht wahr, dass Ada 83 weniger komplex als C + qa war, es hatte typsichere und bereichsgeprüfte markierte Datensätze, die Arrays mit variabler Größe als Felder (mehr als eines separat variierend), Aufgaben haben konnten - die auch Felder in diesen Datensätzen sein könnten , oder in Arrays - und natürlich leistungsstarke, optimierbare und vollständig typsichere Generika mit echter separater Kompilierung, die C++-Compiler bis heute nicht haben!! Und vieles mehr, einschließlich Ginsu-Messer! Aber ja, das Greenbook war kürzer als der heutige C++-Standard!
@davidbak - Die Vorlagen von C ++ sind weitaus komplexer zu implementieren, zu beschreiben und für Benutzer zu handhaben als die Generika von Ada. Dies kommt hauptsächlich von der Entscheidung, Duck-Typing zu verwenden (was meiner Meinung nach wiederum von einer Entscheidung kam, zu versuchen, zu viele Probleme mit dieser einen Funktion zu lösen). Sie sind natürlich auch viel mächtiger (sie sind sogar Turing-komplett!), aber Macht kommt immer mit einem Preis. Insbesondere Fehlerromane und Landminencode, der sich gut kompilieren lässt, bis ein armer Bastard versucht, ihn zu instanziieren, sind zwei besondere Probleme, die bei Ada-Generika nicht auftreten.
@JCRM: Wir lebten auf der falschen Seite der Mauer, jede Hardware, die nicht in der UdSSR hergestellt wurde, war alles andere als aktuell. Software auch. Der Ada-Compiler wurde von zwei begeisterten (und natürlich talentierten) Lehrern an der Universität erstellt.