Введение

Язык программирования HAL/S (High order Assembly Language/Shuttle) — это компилятор и кросс-компилятор для аэрокосмических приложений реального времени, используемый NASA и связанными агентствами (например, JPL). Он применяется в американских космических проектах с 1973 года, а наиболее значительное его применение было в программе «Космический челнок» (около 85% программного обеспечения челнока было написано на HAL/S). Разработан HAL/S компанией Intermetrics в 1972 году для NASA и поставлен в 1973 году. HAL/S написан на XPL, диалекте PL/I. Хотя HAL/S предназначен прежде всего для программирования бортовых компьютеров, он достаточно универсален для удовлетворения практически всех потребностей в производстве, верификации и поддержке аэрокосмических и других приложений реального времени. Согласно документации за 2005 год, его поддержка осуществлялась проектом HAL/S компании United Space Alliance.

Цели и принципы

Три ключевых принципа при разработке языка заключались в надёжности, эффективности и машинно-независимости. Язык разработан для выполнения задач, связанных с аэрокосмической областью (таких как векторная и матричная арифметика), таким образом, чтобы они были легко понятны людям, обладающим знаниями в области космических полётов, но необязательно владеющим навыками компьютерного программирования. HAL/S был разработан без включения некоторых конструкций, которые считались источниками ошибок. Например, в нём отсутствует поддержка динамического выделения памяти. Язык предоставляет специальную поддержку для сред выполнения в реальном времени. Некоторые элементы, такие как оператор "GOTO", были предусмотрены главным образом для упрощения автоматического перевода программ с других языков. (страница 82)

Название "HAL" было предложено Эдом Коппсом, одним из основателей Intermetrics, в честь Хала Лэнинга, его коллеги из MIT. На странице предисловия спецификации языка HAL/S:

Типы данных

HAL/S изначально поддерживает целые числа, числа с плавающей точкой, векторы, матрицы, логические значения и строки из 8-битных символов, максимальная длина которых составляет 255. Структурированные типы могут быть определены с помощью оператора DECLARE STRUCT.