HAL/S (High-order Assembly Language/Shuttle) ist eine Programmiersprache, die für Echtzeitanwendungen in Raumfahrzeugen von Intermetrics im Auftrag der NASA entwickelt wurde.
Die Entwicklungen begannen Ende der 1960er Jahre unter dem Namen HAL. Mit Beginn des Space-Shuttle-Projekts wurde 1972 der Zusatz /S hinzugefügt, da ein Großteil der Software des Shuttles in dieser Sprache geschrieben wurde. [1] HAL/S wurde auch in anderen Raumfahrtprojekten verwendet, zum Beispiel zur Lageregelung der Galileo-Sonde.
HAL/S wurde in XPL, einem Dialekt von PL/I, geschrieben.
Die drei Zielsetzungen beim Design der Sprache waren Verlässlichkeit, Effizienz und Plattformunabhängigkeit. Luft- und raumfahrttypische Aufgaben (wie Vektor- und Matrixrechnung) können in einer Weise ausgeführt werden, die für Leute mit Raumfahrtwissen, die keine tiefen Programmierkenntnisse haben, leicht verständlich ist.
HAL/S verzichtet auf Konstrukte, die als Fehlerquellen bekannt sind. Beispielsweise gibt es keine Unterstützung für dynamische Speicherverwaltung. Die Sprache bietet dafür besondere Unterstützung für Echtzeitanwendungen. Manche Elemente wie beispielsweise »GOTO« wurden hauptsächlich deshalb bereitgestellt, um maschinelle Übersetzungen von anderen Sprachen zu erleichtern.[2]
HAL/S arbeitet weitgehend mit freiem Format: Anweisungen können an einem beliebigen Punkt einer Zeile beginnen und sich über die folgenden Zeilen erstrecken, und mehrere Anweisungen können, wenn gewünscht, in eine einzige Zeile gesetzt werden. Allerdings können einzelne Zeichen am Anfang einer Zeile eine besondere Bedeutung haben. Zum Beispiel wird eine Zeile als Kommentar erkannt und beim Kompilieren ignoriert, wenn sie mit dem Buchstaben »C« beginnt.
Eine Besonderheit der HAL/S-Syntax ist die Unterstützung eines optionalen Dreizeilen-Eingabeformats, in dem drei Quellcode-Zeilen eine Anweisung darstellen. Die erste und die dritte Zeile werden dabei für Superskripte (Exponenten) und Subskripte (Indizes) verwendet, was eine Art mathematische Notation im Code ermöglicht.
Beispielsweise kann die Gleichung $ x=a^{2}+b_{i}^{2} $ so geschrieben werden:
E 2 2
M X = A + B
S I
Ansonsten werden Exponenten wie in Fortran und PL/I mit zwei Sternchen gekennzeichnet; Indizes werden in Klammern mit vorangestelltem Dollarzeichen eingefügt. Das obige Beispiel könnte also auch als Einzeiler wie folgt dargestellt werden:
X = A ** 2 + B$(I) ** 2
Der Name HAL wurde von Ed Copps, Gründungsdirektor der Firma Intermetrics, die die Sprache für die NASA entwickelte, zu Ehren des MIT-Kollegen Hal Laning gewählt. HAL war aber auch der Name des sprechenden Bordcomputers des Raumschiffs Discovery One aus einem der bekanntesten Science-Fiction-Filme, 2001: Odyssee im Weltraum von 1968 und ist daher ein besonders passender Name für eine Raumfahrt-affine Programmiersprache.